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

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

5 1 vote
Puntuación artículo
guest

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

0 Comentarios
Inline Feedbacks
View all comments

IT Wonder Lab - Las Mejores Prácticas para el Cloud