안녕하세요. Terraform 시리즈의 2번째 Security Group(보안 그룹) 만들기입니다.
VPC를 만들었으니, 이제 보안 그룹을 만들어서 앞으로 만들 EC2나 RDS 등에게 적용할 준비를 해야 합니다.
구성은 단순하며, 이번엔 기본 구성 방법과 Module을 이용한 방법에 대해 소개합니다.
#기본 생성 방식
resource "aws_security_group" "web" {
vpc_id = "${module.vpc.vpc_id}" #생성할 위치의 VPC ID
name = "WEB" #그룹 이름
description = "Terraform WEB SG" #설명
ingress {
from_port = 22 #인바운드 시작 포트
to_port = 22 #인바운드 끝나는 포트
protocol = "tcp" #사용할 프로토콜
cidr_blocks = ["0.0.0.0/0"] #허용할 IP 범위
}
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
#모듈을 이용한 방식
module "security-group" {
source = "terraform-aws-modules/security-group/aws" #사용할 모듈 소스
version = "3.1.0" #모듈 버전
name = "Web" #그룹이름
description = "Web" #설명
vpc_id = "${module.vpc.vpc_id}" #생성할 위치의 VPC ID
use_name_prefix = "false" #해당 옵션을 false 시키지 않을 경우, 그룹이름 뒤에 고유 넘버링이 부착되어 생성됨
ingress_with_cidr_blocks = [
{
from_port = 443 #인바운드 시작 포트
to_port = 443 #인바운드 끝나는 포트
protocol = "tcp" #사용할 프로토콜
description = "https" #설명
cidr_blocks = "0.0.0.0/0" #허용할 IP 범위
},
{
from_port = 80
to_port = 80
protocol = "tcp"
description = "http"
cidr_blocks = "0.0.0.0/0"
},
{
from_port = 22
to_port = 22
protocol = "tcp"
description = "ssh"
cidr_blocks = "0.0.0.0/0"
}
]
egress_with_cidr_blocks = [
{
from_port = 0 #아웃바운드 시작 포트
to_port = 0 #아웃바운드 끝나는 포트
protocol = "-1" #사용할 프로토콜
description = "all" #설명
cidr_blocks = "0.0.0.0/0" #허용할 IP 범위
}
]
}
모듈을 사용하더라도 VPC처럼 여러 옵션들이 들어가는 게 아니기 때문에 코드가 절약되고 하지는 않습니다.
문법이 약간 다르기 때문에 편리한 방법을 선택하여 사용하시면 됩니다.
이렇게 보면서 궁금하실 만한 점은 WEB서버용은 추가했는데, RDS용은 어떻게 추가하느냐가 될 것 같은데요.
기본 방식으로는 resource "aws_security_group" "web"를 resource "aws_security_group" "rds"라는 식으로 리소스를 추가하여 생성하시면 되고,
모듈 또한 module "security-group"에서 module "security-group 2"식으로 리소스를 추가하여 생성하시면 됩니다.
어때요? 단순하죠?
코드 기반이라는 선입견 때문에 어렵다고 느껴지실 수 있지만 자세히 보다 보면 일정한 문법이 있기 때문에 그리 어렵지만은 않습니다.
한번 따라 해 보시고 익숙해져 보세요.
이만 줄이고 다음 포스팅에서 뵙겠습니다. :)