Compartir a través de


Inicio rápido: Uso de Terraform para implementar Azure Bastion

En este inicio rápido, aprenderá a usar Terraform para implementar Azure Bastion automáticamente en Azure Portal. Para ello, cree un host de Azure Bastion y sus recursos de Azure correspondientes, que incluyen un grupo de recursos, una red virtual, una subred de Azure Bastion y una dirección IP pública. Esta configuración garantiza un entorno de red privado seguro para los servicios de Azure. En el diagrama siguiente se proporciona información general sobre las implementaciones de Azure Bastion:

Diagrama que muestra la arquitectura de Azure Bastion.

La implementación de Azure Bastion permite usar RDP y SSH para acceder a las máquinas virtuales en Azure Portal. Este servicio se aprovisiona directamente en la red virtual y admite todas las máquinas virtuales allí, lo que reduce la exposición a las conexiones de red pública. Al implementar Bastion automáticamente, Bastion se implementa con la SKU estándar. Para implementar con Bastion Developer en su lugar, consulte Inicio rápido: Conexión con Azure Bastion Developer. Consulte la guía de implementación de Azure Bastion para más información sobre cómo personalizar la implementación de Azure Bastion.

Terraform habilita la definición, la versión preliminar y la implementación de la infraestructura en la nube. Con Terraform, se crean archivos de configuración mediante la sintaxis de HCL. La sintaxis de HCL permite especificar el proveedor de la nube, como Azure, y los elementos que componen la infraestructura de la nube. Después de crear los archivos de configuración, cree un plan de ejecución que le permita obtener una vista previa de los cambios de infraestructura antes de implementarlos. Una vez que compruebe los cambios, aplique el plan de ejecución para implementar la infraestructura.

  • Cree un grupo de recursos de Azure con un nombre único.
  • Establezca una red virtual con un nombre y una dirección especificados.
  • Configure una subred específicamente para Azure Bastion dentro de la red virtual creada.
  • Asigne una dirección IP pública estática estándar para Azure Bastion dentro del grupo de recursos.
  • Construya un host de Azure Bastion con una configuración de IP especificada en el grupo de recursos.
  • Genere los nombres y la dirección IP del grupo de recursos, además del host de Azure Bastion.

Requisitos previos

Implementación del código de Terraform

  1. Cree un directorio en el que probar y ejecutar el código de ejemplo de Terraform y conviértalo en el directorio actual.

  2. Cree un archivo llamado main.tf e inserte el siguiente código:

    # Create Resource Group
    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "rg" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    # Create Virtual Network
    resource "azurerm_virtual_network" "vnet" {
      name                = "example-network"
      address_space       = ["10.0.0.0/16"]
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
    }
    
    # Create Subnet for Azure Bastion
    resource "azurerm_subnet" "bastion_subnet" {
      name                 = "AzureBastionSubnet"
      resource_group_name  = azurerm_resource_group.rg.name
      virtual_network_name = azurerm_virtual_network.vnet.name
      address_prefixes     = ["10.0.1.0/24"]
    }
    
    # Create Public IP for Azure Bastion
    resource "azurerm_public_ip" "bastion_pip" {
      name                = "example-pip"
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
      allocation_method   = "Static"
      sku                 = "Standard"
    }
    
    # Create Azure Bastion Host
    resource "azurerm_bastion_host" "bastion" {
      name                = "example-bastion"
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
    
      ip_configuration {
        name                 = "configuration"
        subnet_id            = azurerm_subnet.bastion_subnet.id
        public_ip_address_id = azurerm_public_ip.bastion_pip.id
      }
    }
    
  3. Cree un archivo llamado outputs.tf e inserte el siguiente código:

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "bastion_host_name" {
      value = azurerm_bastion_host.bastion.name
    }
    
    output "bastion_host_ip" {
      value = azurerm_public_ip.bastion_pip.ip_address
    }
    
  4. Cree un archivo llamado providers.tf e inserte el siguiente código:

    terraform {
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  5. Cree un archivo llamado variables.tf e inserte el siguiente código:

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    

Inicialización de Terraform

Ejecute terraform init para inicializar la implementación de Terraform. Este comando descarga el proveedor de Azure necesario para administrar los recursos de Azure.

terraform init -upgrade

Puntos clave:

  • El parámetro -upgrade actualiza los complementos de proveedor necesarios a la versión más reciente que cumpla con las restricciones de versión de la configuración.

Creación de un plan de ejecución de Terraform

Ejecute terraform plan para crear un plan de ejecución.

terraform plan -out main.tfplan

Puntos clave:

  • El comando terraform plan crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales.
  • El parámetro -out opcional permite especificar un archivo de salida para el plan. El uso del parámetro -out garantiza que el plan que ha revisado es exactamente lo que se aplica.

Aplicación de un plan de ejecución de Terraform

Ejecute terraform apply para aplicar el plan de ejecución a la infraestructura en la nube.

terraform apply main.tfplan

Puntos clave:

  • El comando terraform apply de ejemplo asume que ejecutó terraform plan -out main.tfplan previamente.
  • Si especificó un nombre de archivo diferente para el parámetro -out, use ese mismo nombre de archivo en la llamada a terraform apply.
  • Si no ha utilizado el parámetro -out, llame a terraform apply sin ningún parámetro.

Verificación de los resultados

  1. Obtenga el nombre del grupo de recursos de Azure.

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Obtenga el nombre de host de Azure Bastion.

    bastion_host_name=$(terraform output -raw bastion_host_name)
    
  3. Obtenga la dirección IP del host de Azure Bastion.

    bastion_host_ip=$(terraform output -raw bastion_host_ip)
    
  4. Ejecute az network bastion show para ver el host de Azure Bastion.

    az network bastion show --name $bastion_host_name --resource-group $resource_group_name
    

Limpieza de recursos

Cuando ya no necesite los recursos creados a través de Terraform, realice los pasos siguientes:

  1. Ejecute terraform plan y especifique la destroy bandera.

    terraform plan -destroy -out main.destroy.tfplan
    

    Puntos clave:

    • El comando terraform plan crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales.
    • El parámetro -out opcional permite especificar un archivo de salida para el plan. El uso del parámetro -out garantiza que el plan que ha revisado es exactamente lo que se aplica.
  2. Ejecute terraform apply para aplicar el plan de ejecución.

    terraform apply main.destroy.tfplan
    

Solución de problemas de Terraform en Azure

Solución de problemas comunes al usar Terraform en Azure.

Pasos siguientes

En este inicio rápido, ha usado Terraform para crear un grupo de recursos de Azure y otros recursos gratuitos de Azure para configurar un host de Azure Bastion. A continuación, puede explorar los siguientes recursos para obtener más información sobre Azure Bastion y Terraform.