반응형
목표
테라폼으로 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설정이 모두 허용되었는지 확인합니다.
반응형
'연재 시리즈' 카테고리의 다른 글
테라폼 시리즈 19편. ALB와 Auto Scaling Group 연동 (0) | 2022.10.29 |
---|---|
테라폼 시리즈 18편. auto scaling group생성 (0) | 2022.10.28 |
테라폼 시리즈 16편. route table 생성 (0) | 2022.10.26 |
테라폼 시리즈 14편. Data block (0) | 2022.10.25 |
테라폼 시리즈 13편. 역할별로 tf파일 분리 (0) | 2022.10.25 |