Cree una red privada con Terraform con un script de inicio - Google Cloud Platform

2

comenzando con Terraform recientemente con GCP, me gustaría terminar un ejercicio:

  • Cree una nueva red de VPC con una sola subred.
  • Cree una regla de firewall que permita el tráfico RDP externo al sistema de host bastión.
  • Implemente dos servidores de Windows que estén conectados tanto a la red de VPC como a la red predeterminada.
  • Cree una máquina virtual que apunte al script de inicio.
  • Configure una regla de firewall para permitir el acceso HTTP a la máquina virtual.

Aquí está mi solución:

  1. Cree una nueva red de VPC llamada securenetwork, luego cree una nueva subred de VPC dentro de securenetwork. Una vez que se hayan configurado la red y la subred, configure una regla de firewall que permita el tráfico RDP entrante (puerto TCP 3389) desde Internet al host bastión.
# 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. Implementar instancias de Windows

    • una instancia de servidor de Windows 2016 llamada vm-securehost con dos interfaces de red. Configure la primera interfaz de red con una conexión única interna a la nueva subred de VPC y la segunda interfaz de red con una conexión única interna a la red de VPC predeterminada. Este es el servidor seguro.
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
    }
  }
}
  • una segunda instancia de servidor de Windows 2016 llamada vm-bastionhost con dos interfaces de red. Configure la primera interfaz de red para conectarse a la nueva subred de VPC con una dirección pública efímera (NAT externa) y la segunda interfaz de red con una conexión solo interna a la red de VPC predeterminada. Esta es la caja de salto o el bastión de acogida.
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}"
    }
  }
}

Mi pregunta:

  • ¿Cómo configurar la instancia informática de Windows llamada vm-securehost que no tiene una dirección IP pública?
  • ¿Cómo configurar la instancia informática de Windows llamada vm-securehost que ejecuta el software del servidor web Microsoft IIS al inicio?
  • Gracias por cualquier comentario sobre la solución.
1

Para crear una máquina virtual sin ninguna dirección IP externa, omita el argumento 'configuración de acceso' en su script terraform, ya que es el responsable de la creación de la dirección IP externa.

Para ejecutar el software del servidor web Microsoft IIS en su máquina virtual durante el inicio, agregue el siguiente argumento en su bloque de creación de máquina virtual (excluya las comillas): 'metadata_startup_script = import-module servermanager && add-windowsfeature web-server -includeallsubfeature'

Consulte los siguientes enlaces para obtener información detallada sobre el problema:

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