代码之家  ›  专栏  ›  技术社区  ›  Tiago

如何允许从一个安全组到另一个组的所有流量?

  •  0
  • Tiago  · 技术社区  · 9 月前

    你好吗?我遇到了一个问题。看看下面的代码。我创建了两个安全组:

    resource "aws_security_group" "ec2_sg" {
      name        = "${var.project_name}-${var.environment}-ec2-sg"
      vpc_id      = var.vpc_id
      description = "Security Group for EC2 instance"
    
      ingress {
        from_port   = 0
        to_port     = 0
        protocol    = "-1"
        cidr_blocks = ["172.15.0.0/16", "172.18.0.0/16", "172.19.0.0/16"]
      }
    
      tags = {
        Name         = "${var.project_name}-${var.environment}-ec2-sg"
        Environment  = var.environment
        Project      = var.project_name
        ResourceType = "security-group"
      }
    }
    
    resource "aws_security_group" "rds_sg" {
      name        = "${var.project_name}-${var.environment}-rds-sg"
      vpc_id      = var.vpc_id
      description = "Security Group for RDS"
    
      ingress {
        from_port   = 0
        to_port     = 0
        protocol    = "-1"
        cidr_blocks = ["172.15.0.0/16", "172.18.0.0/16", "172.19.0.0/16"]
      }
    
      egress {
        from_port   = 0
        to_port     = 0
        protocol    = "-1"
        cidr_blocks = ["0.0.0.0/0"]
      }
    
      tags = {
        Name         = "${var.project_name}-${var.environment}-rds-sg"
        Environment  = var.environment
        Project      = var.project_name
        ResourceType = "security-group"
      }
    }
    

    之后,我创建了两条允许它们之间交叉流量的规则:

    resource "aws_security_group_rule" "ec2_rule" {
      depends_on               = [aws_security_group.ec2_sg, aws_security_group.rds_sg]
      type                     = "ingress"
      from_port                = 0
      to_port                  = 0
      protocol                 = "-1"
      source_security_group_id = aws_security_group.rds_sg.id
      security_group_id        = aws_security_group.ec2_sg.id
    
    }
    
    resource "aws_security_group_rule" "rds_rule" {
      depends_on               = [aws_security_group.ec2_sg, aws_security_group.rds_sg]
      type                     = "ingress"
      from_port                = 0
      to_port                  = 0
      protocol                 = "-1"
      source_security_group_id = aws_security_group.ec2_sg.id
      security_group_id        = aws_security_group.rds_sg.id
    
    }
    

    到目前为止一切都很好;我应用了代码,它奏效了。然而,我注意到,每次我对Terraform进行更改时,即使是对其他资源,无论它们是什么,这些允许交叉流量的规则只会消失。

    我必须注释掉代码的这一特定部分并应用它;地形图显示规则将被删除(即使它们在SG中不可见)。然后,我取消对规则的注释,并再次应用它们。

    目前还可以,但在生产中会出现问题。知道为什么会发生这种情况以及如何解决吗?

    1 回复  |  直到 9 月前
        1
  •  0
  •   Med Agou    9 月前

    如果定义规则,这是一个常见问题 里面 外部 你的sg,这是有记录的 here :

    enter image description here

    在您的情况下,定义sgs之外的所有规则,并在其中引用应该按预期工作的sgs的id。