terraform으로 네트워크 ACL, 보안 그룹 만들기

마지막까지의 개요



terraform으로 VPC, 서브넷 만들기
htps : // 이 m/사시_이/있어 ms/f4f65에 18923d856베 256

terraform으로 인터넷 게이트웨이, 루트 테이블 만들기
htps : // 이 m / 빨리_있어 / 있어 ms / 5 에다 b 또는 4f 바아 7d4 아 833

환경



macOS Mojave 10.14.5
MacBook Pro, 13-inch, Early 2015
terraform v0.12.0
direnv 2.20.1

목표 아티팩트





github 저장 위치



이번에 추가한 프로그램



네트워크 ACL

/envs/modules/vpc/main.tf
resource "aws_default_network_acl" "qiita_default_acl" {
  default_network_acl_id = "${aws_vpc.qiita_vpc.default_network_acl_id}"

  egress {
    protocol   = "all"
    rule_no    = 100
    action     = "allow"
    cidr_block = "0.0.0.0/0"
    from_port  = 0
    to_port    = 0
  }

  egress {
    protocol   = "all"
    rule_no    = 101
    action     = "allow"
    ipv6_cidr_block = "::/0"
    from_port  = 0
    to_port    = 0
  }

  ingress {
    protocol   = "all"
    rule_no    = 100
    action     = "allow"
    cidr_block = "0.0.0.0/0"
    from_port  = 0
    to_port    = 0
  }

  ingress {
    protocol   = "all"
    rule_no    = 101
    action     = "allow"
    ipv6_cidr_block = "::/0"
    from_port  = 0
    to_port    = 0
  }

  tags = {
    Name = "qiita_acl"
  }
}

보안 그룹

/envs/modules/vpc/main.tf
resource "aws_security_group" "alb" {
  name        = "qiita-${var.stage}-alb"
  description = "security group for ALB"
  vpc_id      = "${aws_vpc.qiita_vpc.id}"
  tags        = { 
    Name = "qiita-${var.stage}-alb" 
  }
}

resource "aws_security_group_rule" "alb-ingress-ipv4" {
  security_group_id = aws_security_group.alb.id
  type              = "ingress"
  cidr_blocks       = ["0.0.0.0/0"]
  from_port         = 443
  to_port           = 443
  protocol          = "tcp"
}

resource "aws_security_group_rule" "alb-ingress-ipv6" {
  security_group_id = aws_security_group.alb.id
  type              = "ingress"
  ipv6_cidr_blocks  = ["::/0"]
  from_port         = 443
  to_port           = 443
  protocol          = "tcp"
}

resource "aws_security_group_rule" "alb-egress-ipv4" {
  security_group_id = aws_security_group.alb.id
  type              = "egress"
  cidr_blocks       = ["0.0.0.0/0"]
  from_port         = 0
  to_port           = 0
  protocol          = "all"
}

resource "aws_security_group_rule" "alb-egress-ipv6" {
  security_group_id = aws_security_group.alb.id
  type              = "egress"
  ipv6_cidr_blocks  = ["::/0"]
  from_port         = 0
  to_port           = 0
  protocol          = "all"
}


resource "aws_security_group" "ec2" {
  name        = "qiita-${var.stage}-ec2"
  description = "security group for EC2"
  vpc_id      = "${aws_vpc.qiita_vpc.id}"
  tags        = { 
    Name = "qiita-${var.stage}-ec2" 
  }
}

resource "aws_security_group_rule" "ec2-ingress" {
  security_group_id        = aws_security_group.ec2.id
  type                     = "ingress"
  source_security_group_id = aws_security_group.alb.id
  from_port                = 0
  to_port                  = 0
  protocol                 = "all"
}

resource "aws_security_group_rule" "ec2-egress_ipv4" {
  security_group_id = aws_security_group.ec2.id
  type              = "egress"
  cidr_blocks       = ["0.0.0.0/0"]
  from_port         = 0
  to_port           = 0
  protocol          = "all"
}

resource "aws_security_group_rule" "ec2-egress_ipv6" {
  security_group_id = aws_security_group.ec2.id
  type              = "egress"
  ipv6_cidr_blocks  = ["::/0"]
  from_port         = 0
  to_port           = 0
  protocol          = "all"
}

resource "aws_security_group" "rds" {
  name        = "qiita-${var.stage}-rds"
  description = "security group for RDS"
  vpc_id      = "${aws_vpc.qiita_vpc.id}"
  tags        = { 
    Name = "qiita-${var.stage}-rds" 
  }
}

resource "aws_security_group_rule" "rds-ingress" {
  security_group_id        = aws_security_group.rds.id
  type                     = "ingress"
  source_security_group_id = aws_security_group.ec2.id
  from_port                = 3306
  to_port                  = 3306
  protocol                 = "tcp"
}

resource "aws_security_group_rule" "rds-egress_ipv4" {
  security_group_id = aws_security_group.rds.id
  type              = "egress"
  cidr_blocks       = ["0.0.0.0/0"]
  from_port         = 0
  to_port           = 0
  protocol          = "all"
}

resource "aws_security_group_rule" "rds-egress_ipv6" {
  security_group_id = aws_security_group.rds.id
  type              = "egress"
  ipv6_cidr_blocks  = ["::/0"]
  from_port         = 0
  to_port           = 0
  protocol          = "all"
}

프로그램 해설



네트워크 ACL



네트워크 ACL은 서브넷 단위로 들어오는 통신과 나가는 통신을 제한할 수 있는 보안 계층입니다.

나중에 설명하는 보안 그룹은 EC2나 RDS와 같은 인스턴스 단위로 보안을 설정할 수 있는 반면 서브넷 단위로 설정할 수 있다는 점이 다릅니다.

이번에는 aws_default_network_acl 라고 기재하고 있으므로, 디폴트 네트워크 ACL로서 대상 VPC에 속하고 있는 서브넷 모두에 적용됩니다.

보안 그룹



인스턴스별로 보안을 설정할 수 있습니다.
이번에는 ALB, EC2, RDS에 대해 설정하고 있습니다.

EC2의 인바운드는 ALB에서만 들어오길 원하기 때문에 source_security_group_id에서 ALB 보안 그룹의 id를 지정합니다.

마찬가지로 RDS는 EC2에서만 통신하고 싶기 때문에 source_security_group_id는 EC2 보안 그룹의 id를 지정합니다.

이상으로 네트워크 주위의 구현은 완료입니다.
다음 번부터 EC2, RDS의 구현으로 옮겨가고 싶습니다.

관련 기사



tfenv를 이용한 terraform 설치 방법
htps : // 이 m/사시_이/있어 ms/b5117d51후 d800후6b09

direnv를 사용하여 terraform에서 여러 AWS 계정을 구분하는 방법
htps : // 이 m / 사시_이 /있어 ms / 609044 아 106cdcb43 아 89

좋은 웹페이지 즐겨찾기