연재 시리즈

테라폼 시리즈 17편. security group 생성

악분 2022. 10. 28. 12:30
반응형

목표

테라폼으로 security group을 생성합니다.

 

요구사항

  • security group을 생성에 필요한 vpc는 첫번째 단계(https://malwareanalysis.tistory.com/438)에서 사용한 vpc를 사용합니다.
  • ingress 규칙 1개와와 egress 규칙 1개를 추가합니다.
  • ingress는 80/tcp포트를 어느곳에서 접근하도록 설정합니다.
  • egress는 모든 프로토콜을 어느 곳으로나 나갈 수 있도록 설정합니다.

 

상세내용

security group생성은 aws_security_group으로 간단히 생성할 수 있습니다. 생성하려면 vpc가 필요합니다.

resource "aws_security_group" "example" {
  vpc_id      = aws_vpc.example.id
  name        = "T101 SG"
  description = "T101 Study SG"
}

 

생성한 security group이 동작하려면 규칙을 추가해야합니다. 규칙은 aws_security_group_rule로 생성할 수 있습니다. 규칙의 핵심은 type설정입니다. inbound규칙은 ingress타입, outbound규칙은 egress타입을 설정합니다. 모든 프로토콜은 -1로 설정 할 수 있습니다.

resource "aws_security_group_rule" "mysginbound" {
  type              = "ingress"
  from_port         = 0
  to_port           = 80
  protocol          = "tcp"
  cidr_blocks       = ["0.0.0.0/0"]
  security_group_id = aws_security_group.example.id
}

resource "aws_security_group_rule" "mysgoutbound" {
  type              = "egress"
  from_port         = 0
  to_port           = 0
  protocol          = "-1"
  cidr_blocks       = ["0.0.0.0/0"]
  security_group_id = aws_security_group.example.id
}

 

전체 코드

github 링크: https://github.com/sungwook-practice/terraform-study/tree/main/week2/security_group

코드는 vpc.tf, sg.tf으로 분류했습니다.

cat <<EOT > vpc.tf
provider "aws" {
  region  = "ap-northeast-2"
}

resource "aws_vpc" "akbun-vpc" {
  cidr_block       = "10.10.0.0/16"
  enable_dns_support   = true
  enable_dns_hostnames = true

  tags = {
    Name = "t101-study"
  }
}

resource "aws_subnet" "akbun-subnet1" {
  vpc_id     = aws_vpc.akbun-vpc.id
  cidr_block = "10.10.1.0/24"

  availability_zone = "ap-northeast-2a"

  tags = {
    Name = "t101-subnet1"
  }
}

resource "aws_subnet" "akbun-subnet2" {
  vpc_id     = aws_vpc.akbun-vpc.id
  cidr_block = "10.10.2.0/24"

  availability_zone = "ap-northeast-2c"

  tags = {
    Name = "t101-subnet2"
  }
}


resource "aws_internet_gateway" "akbun-igw" {
  vpc_id = aws_vpc.akbun-vpc.id

  tags = {
    Name = "t101-igw"
  }
}

# route table 생성
resource "aws_route_table" "akbun-rt" {
  vpc_id = aws_vpc.akbun-vpc.id

  tags = {
    Name = "t101-rt"
  }
}

# route table과 subnet 연결
resource "aws_route_table_association" "akubun-rt-association1" {
  subnet_id      = aws_subnet.akbun-subnet1.id
  route_table_id = aws_route_table.akbun-rt.id
}

# route table과 subnet 연결
resource "aws_route_table_association" "akubun-rt-association2" {
  subnet_id      = aws_subnet.akbun-subnet2.id
  route_table_id = aws_route_table.akbun-rt.id
}

# route 규칙 추가
resource "aws_route" "mydefaultroute" {
  route_table_id         = aws_route_table.akbun-rt.id
  destination_cidr_block = "0.0.0.0/0"
  gateway_id             = aws_internet_gateway.akbun-igw.id
}

EOT

 

cat <<EOT > sg.tf
resource "aws_security_group" "akbun-sg" {
  vpc_id      = aws_vpc.akbun-vpc.id
  name        = "T101 SG"
  description = "T101 Study SG"
}

resource "aws_security_group_rule" "akubun-sginbound" {
  type              = "ingress"
  from_port         = 0
  to_port           = 80
  protocol          = "tcp"
  cidr_blocks       = ["0.0.0.0/0"]
  security_group_id = aws_security_group.akbun-mysg.id
}

resource "aws_security_group_rule" "akubun-sgoutbound" {
  type              = "egress"
  from_port         = 0
  to_port           = 0
  protocol          = "-1"
  cidr_blocks       = ["0.0.0.0/0"]
  security_group_id = aws_security_group.akbun-mysg.id
}
EOT

 

terraform apply명령어로 코드를 인프라에 반영합니다.

terrafrom apply

 

security group이 잘 생성되었는지 확인합니다. 그리고 InBound설정이 80번포트 허용으로 되었는지 확인합니다.

 

outBound설정이 모두 허용되었는지 확인합니다.

반응형