Создайте частную сеть с помощью Terraform с помощью стартового скрипта — Google Cloud Platform

недавно начав с Terraform с GCP, я хотел бы закончить упражнение:

  • Создайте новую сеть VPC с одной подсетью.
  • Создайте правило брандмауэра, разрешающее внешний трафик RDP к хост-системе-бастиону.
  • Разверните два сервера Windows, которые подключены как к сети VPC, так и к сети по умолчанию.
  • Создайте виртуальную машину, указывающую на сценарий запуска.
  • Настройте правило брандмауэра, чтобы разрешить HTTP-доступ к виртуальной машине.

Вот мое решение:

  1. Создайте новую сеть VPC с именем securenetwork, затем создайте новую подсеть VPC внутри securenetwork. После настройки сети и подсети настройте правило брандмауэра, разрешающее входящий трафик RDP (порт TCP 3389) из Интернета на хост-бастион.
# Create the securenetwork network
resource "google_compute_network" "securenetwork" {
  name                    = "securenetwork"
  auto_create_subnetworks = false
}

# Create securesubnet-us subnetwork
resource "google_compute_subnetwork" "securesubnet-eu" {
  name          = "securesubnet-eu"
  region        = "europe-west1"
  network       = "${google_compute_network.securenetwork.self_link}"
  ip_cidr_range = "10.130.0.0/20"
}

# Create a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on securenetwork
resource "google_compute_firewall" "securenetwork-allow-http-ssh-rdp-icmp" {
  name    = "securenetwork-allow-http-ssh-rdp-icmp"
  network = "${google_compute_network.securenetwork.self_link}"

  allow {
    protocol = "tcp"
    ports    = ["3389"]
  }

  allow {
    protocol = "icmp"
  }
}

# Create the vm-securehost instance
module "vm-securehost" {
  source              = "./instance/securehost"
  instance_name       = "vm-securehost"
  instance_zone       = "europe-west1-d"
  instance_subnetwork = "${google_compute_subnetwork.securesubnet-eu.self_link}"
  instance_network = "${google_compute_network.securenetwork.self_link}"
}

# Create the vm-bastionhost instance
module "vm-bastionhost" {
  source              = "./instance/bastionhost"
  instance_name       = "vm-bastionhost"
  instance_zone       = "europe-west1-d"
  instance_subnetwork = "${google_compute_subnetwork.securesubnet-eu.self_link}"
  instance_network = "${google_compute_network.securenetwork.self_link}"
}
  1. Развертывание экземпляров Windows

    • a Windows 2016 server instance called vm-securehost with two network interfaces. Configure the first network interface with an internal only connection to the new VPC subnet, and the second network interface with an internal only connection to the default VPC network. This is the secure server.
variable "instance_name" {}
variable "instance_zone" {}

variable "instance_type" {
  default = "n1-standard-1"
}

variable "instance_subnetwork" {}
variable "instance_network" {}

resource "google_compute_instance" "vm_instance" {
  name         = "${var.instance_name}"
  zone         = "${var.instance_zone}"
  machine_type = "${var.instance_type}"

  boot_disk {
    initialize_params {
      image = "windows-cloud/windows-2016"
    }
  }

  network_interface {
    subnetwork = "${var.instance_subnetwork}"
    access_config {
      # Allocate a one-to-one NAT IP to the instance
    }
  }
}
  • второй экземпляр сервера Windows 2016 под названием vm-bastionhost с двумя сетевыми интерфейсами. Настройте первый сетевой интерфейс для подключения к новой подсети VPC с эфемерным общедоступным (внешним NAT) адресом, а второй сетевой интерфейс — только для внутреннего подключения к сети VPC по умолчанию. Это джамп-бокс или хост-бастион.
variable "instance_name" {}
variable "instance_zone" {}

variable "instance_type" {
  default = "n1-standard-1"
}

variable "instance_subnetwork" {}
variable "instance_network" {}

resource "google_compute_address" "default" {
  name = "default"
  region = "europe-west1"
}

resource "google_compute_instance" "vm_instance" {
  name         = "${var.instance_name}"
  zone         = "${var.instance_zone}"
  machine_type = "${var.instance_type}"

  boot_disk {
    initialize_params {
      image = "windows-cloud/windows-2016"
    }
  }

  network_interface {
    subnetwork = "${var.instance_subnetwork}"
    network = "${var.instance_network}"
    access_config {
      # Allocate a one-to-one NAT IP to the instance
      nat_ip = "${google_compute_address.default.address}"
    }
  }
}

Мой вопрос:

  • как настроить вычислительный экземпляр Windows с именем vm-securehost, у которого нет общедоступного IP-адреса?
  • как настроить вычислительный экземпляр Windows под названием vm-securehost, который запускает программное обеспечение веб-сервера Microsoft IIS при запуске?
  • Спасибо за любой комментарий к решению

person minh-hieu.pham    schedule 27.06.2019    source источник


Ответы (1)


Чтобы создать виртуальную машину без внешнего IP-адреса, опустите аргумент «access config» в вашем сценарии terraform, так как он отвечает за создание внешнего IP-адреса.

Чтобы запустить программное обеспечение веб-сервера Microsoft IIS на виртуальной машине во время запуска, добавьте следующий аргумент в блок создания виртуальной машины (без кавычек): 'metadata_startup_script = import-module servermanager && add-windowsfeature web-server -includeallsubfeature'

Пожалуйста, обратитесь к следующим ссылкам для получения подробной информации по проблеме -

https://cloud.google.com/compute/docs/tutorials/basic-webserver-iis

https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance#metadata_startup_script

person Anant Swaraj    schedule 18.05.2021