Permita su IP pública en el firewall de AWS con Terraform

Utilizar de forma programática la IP pública en Terraform como IP origen para las reglas de seguridad de AWS

Durante las pruebas de planes de HashiCorp Terraform, se requiere crear reglas de firewall que utilizan la dirección IP pública de Internet, por ejemplo para acceder mediante SSH a las instancias y continuar su aprovisionamiento con Ansible.

Updates:

  • 2020 Jun 29: Upgraded to Terraform 0.12

Hay una forma sencilla de obtener la dirección IP pública utilizando una fuente de datos externa de Terraform.

La IP se obtiene utilizando un comando externo al Terraform por lo que se crearán una script shell que obtiene la dirección IP y la devuelve como un objeto JSON.

whatismyip.sh

#!/bin/bash
...
set -e
INTERNETIP="$(dig +short myip.opendns.com @resolver1.opendns.com)"
echo $(jq -n --arg internetip "$INTERNETIP" '{"internet_ip":$internetip}')

La llamada a la fuente de datos externa de Terraform se realiza dentro de un plan de Terraform. A continuación se muestra un ejemplo donde el fichero aws_security_group_rules.tf define la fuente de datos externa whatismyip y la utiliza para crear una regla de acceso para permitir la entrada desde esa IP (la obtenida por el script) al puerto 22 (SSH) que asigna a un grupo de seguridad.

aws_security_group_rules.tf

data "external" "whatismyip" {
  program = ["/bin/bash" , "${path.module}/whatismyip.sh"]
}
resource "aws_security_group_rule" "allow_ssh_from_my_ip" {
 type = "ingress"
 from_port = 22
 to_port = 22
 protocol = "tcp"
 cidr_blocks = [format("%s/%s",data.external.whatismyip.result["internet_ip"],32)]
 security_group_id = "sg-123456"
}

Asegúrese de instalar la utilidad jq y que el script whatismyip.sh es ejecutable:

sudo apt-get install jq
chmod 764 whatismyip.sh

Dado que estamos utilizando una nueva fuente de datos externos, se requiere inicializar Terraform.

terraform init

Puede ver un ejemplo completo de Terraform para crear un VPC con EC2, RDS y Route 53 en AWS.

Otros ejemplos de Terraform y Ansible

Permita su IP pública en el firewall de AWS con Terraform

Leave a Reply

Your email address will not be published.