Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

287
Visualizações
Cree varias reglas en el grupo de seguridad de AWS

Intenté crear un grupo de seguridad de AWS con varias reglas de entrada. Normalmente, necesitamos varias entradas en el sg para varias reglas de entrada. En lugar de crear varias reglas de ingreso por separado, traté de crear una lista de ingreso para poder reutilizar fácilmente el módulo para diferentes aplicaciones.

PFB,

modulo/sg/sg.tf >>

 resource "aws_security_group" "ec2_security_groups" { name = var.name_security_groups vpc_id = var.vpc_id }

módulo/sg/reglas.tf >>

 resource "aws_security_group_rule" "ingress_rules" { count = lenght(var.ingress_rules) type = "ingress" from_port = var.ingress_rules[count.index][0] to_port = var.ingress_rules[count.index][1] protocol = var.ingress_rules[count.index][2] cidr_blocks = var.ingress_rules[count.index][3] description = var.ingress_rules[count.index][4] security_group_id = aws_security_group.ec2_security_groups.id }

módulo/sg/variable.tf >>

 variable "vpc_id" { } variable "name_security_groups" { } variable "ingress_rules" { type = list(string) }

En la carpeta de la aplicación,

aplicación/dev/sg.tf >>

 module "sg_test" { source = "../modules/sg" vpc_id = "vpc-xxxxxxxxx" name_security_groups = "sg_test" ingress_rules = var.sg_ingress_rules }

aplicacion/dev/variable.tf >>

 variable "sg_ingress_rules" { type = list(string) default = { [22, 22, "tcp", "1.2.3.4/32", "test"] [23, 23, "tcp", "1.2.3.4/32", "test"] } }

Error:

 Error: Missing attribute value on test-sgs.tf line 21, in variable "sg_ingress_rules": 20: 21: 22: Expected an attribute value, introduced by an equals sign ("=").

Ayúdenos a corregir esto o si hay algún otro método, sugiéralo.

Saludos,

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Gracias @apparentlymart, que ayudó a resolver esto en la discusión de Terraform

La regla de seguridad:-

 resource "aws_security_group_rule" "ingress_rules" { count = length(var.ingress_rules) type = "ingress" from_port = var.ingress_rules[count.index].from_port to_port = var.ingress_rules[count.index].to_port protocol = var.ingress_rules[count.index].protocol cidr_blocks = [var.ingress_rules[count.index].cidr_block] description = var.ingress_rules[count.index].description security_group_id = aws_security_group.ec2_security_groups.id }

Y la variable:

 variable "sg_ingress_rules" { type = list(object({ from_port = number to_port = number protocol = string cidr_block = string description = string })) default = [ { from_port = 22 to_port = 22 protocol = "tcp" cidr_block = "1.2.3.4/32" description = "test" }, { from_port = 23 to_port = 23 protocol = "tcp" cidr_block = "1.2.3.4/32" description = "test" }, ] }
over 4 years ago · Santiago Trujillo Relatório

0

Si desea que esto funcione literalmente con campos indexados, conviértalo en una lista (lista (cadena)) y cambie la sintaxis oyter predeterminada de llaves (usadas para mapas) a corchetes (usados para listas):

 variable "sg_ingress_rules" { type = list(list(string)) default = [ [22, 22, "tcp", "1.2.3.4/32", "test"] [23, 23, "tcp", "1.2.3.4/32", "test"] ] }

Esa es una estructura de datos confusa y será difícil trabajar con ella, así que recomiendo esto en su lugar:

 variable "sg_ingress_rules" { type = map(map(any)) default = { thing1 = {from=22, to=22, proto="tcp", cidr="1.2.3.4/32", desc=test"] thing2 = {from=23, to=23, proto="tcp", cidr="1.2.3.4/32", desc="test"} } }

Puede usar mejores nombres que los terribles que he elegido y luego referirse a ellos en su recurso:

 resource "aws_security_group_rule" "ingress_rules" { for_each = var.ingress_rules type = "ingress" from_port = each.value.from to_port = each.value.to protocol = each.value.proto cidr_blocks = each.value.cidr description = each.value.desc security_group_id = aws_security_group.ec2_security_groups.id }

Obtendrá varias copias con nombre de aws_security_group_rule, que sobrevive mejor a las inserciones y eliminaciones de la variable ingress_rules y le ahorrará dolores de cabeza. De lo contrario, obtendrá destrucción y creación superfluas de reglas y, a veces, conflictos debido a los recursos indexados que crea un recuento.

Si desea tener mejores medidas de seguridad para las personas que configuran el valor de ingress_rules, puede usar object para requerir y restringir a un conjunto particular de campos con ciertos tipos de la siguiente manera:

 variable "sg_ingress_rules" { type = map(object( { from = number to = number proto = string cidr = string desc = string } )) default = { thing1 = {from=22, to=22, proto="tcp", cidr="1.2.3.4/32", desc=test"] thing2 = {from=23, to=23, proto="tcp", cidr="1.2.3.4/32", desc="test"} } }
over 4 years ago · Santiago Trujillo Relatório

0

Podemos hacer esto de una manera simple: -

 locals { ports_in = [ 443, 80 ] ports_out = [ 0 ] } resource "aws_security_group" "internet_facing_alb" { name = "internetfacing-loadbalancer-sg" description = "Security group attached to internet facing loadbalancer" vpc_id = var.vpc_id dynamic "ingress" { for_each = toset(local.ports_in) content { description = "Web Traffic from internet" from_port = ingress.value to_port = ingress.value protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } } dynamic "egress" { for_each = toset(local.ports_out) content { description = "Web Traffic to internet" from_port = egress.value to_port = egress.value protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } } tags = { Name = "internetfacing-loadbalancer-sg" } }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda