상세 컨텐츠

본문 제목

Terraform으로 EC2에 백엔드 서버 배포 (with ECR) 4장 Security Group 모듈

DevOps/Terraform

by rakyun 2025. 8. 23. 20:05

본문

Security Group

이 코드는 EC2의 보안 그룹(Security Group)이라는 가상 방화벽을 생성하고 설정하는 스크립트. 이 코드의 주요 역할은 EC2 인스턴스(서버)에 대한 네트워크 트래픽을 제어하여, 허용된 연결만 주고받을 수 있도록 보안을 강화하는 것.
# 백엔드를 위한 보안 그룹 (방화벽 규칙)
# 보안 그룹은 EC2 인스턴스에 대한 인바운드/아웃바운드 트래픽을 제어합니다

resource "aws_security_group" "backend_sg" {
  # 보안 그룹 이름 - 프로젝트명-환경-sg 형식
  name        = "${var.project_name}-${var.environment}-sg"
  
  # 보안 그룹 설명
  description = "Security group for ${var.project_name} ${var.environment} environment"
  
  # 이 보안 그룹이 속할 VPC ID
  vpc_id      = var.vpc_id

  # ===== 인바운드 규칙 (외부 → EC2) =====
  
  # SSH 접속 규칙 (포트 22)
  # 주의: 프로덕션에서는 특정 IP만 허용하도록 설정 필요
  ingress {
    description = "SSH from allowed IPs"
    from_port   = 22        # 시작 포트
    to_port     = 22        # 종료 포트 (22-22 = 포트 22만)
    protocol    = "tcp"     # TCP 프로토콜
    cidr_blocks = var.ssh_allowed_ips  # 허용할 IP 주소 목록
  }

  # HTTP 접속 규칙 (포트 80)
  # 모든 IP에서 접속 가능 (웹 서비스)
  ingress {
    description = "HTTP from anywhere"
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]  # 모든 IP 허용
  }

  # HTTPS 접속 규칙 (포트 443)
  # SSL/TLS 암호화된 웹 트래픽
  ingress {
    description = "HTTPS from anywhere"
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]  # 모든 IP 허용
  }

  # ===== 아웃바운드 규칙 (EC2 → 외부) =====
  
  # 모든 아웃바운드 트래픽 허용
  # EC2가 외부 인터넷에 접속할 수 있도록 허용 (apt update, docker pull 등)
  egress {
    description = "Allow all outbound traffic"
    from_port   = 0         # 모든 포트
    to_port     = 0         # 모든 포트
    protocol    = "-1"      # 모든 프로토콜
    cidr_blocks = ["0.0.0.0/0"]  # 모든 IP로
  }

  # 리소스 태그
  tags = {
    Name        = "${var.project_name}-${var.environment}-sg"  # 리소스 이름
    Environment = var.environment    # 환경 구분
    Project     = var.project_name   # 프로젝트명
    ManagedBy   = "Terraform"       # Terraform으로 관리됨
  }
}
  • ec2의 인바운드, 아웃바운드 규칙을 정의한다.
    • 인바운드, 아웃바운드 규칙은 각각 서버로 들어오는 규칙, 서버에서 나가는 규칙을 정의한다.
  • 위 코드에서는 ssh 접속을 위한 22번 포트의 허용 IP는 var에 정의되어 있다.
    • 보통 ssh 접속은 내 로컬에서 하기에 내 로컬 ip만 열어두는 식으로 인바운드 규칙을 정할 수 있다.
  • 아웃바운드에서는 모든 포트가 열려있는데, 보통은 백엔드 서버가 통신하는 api만 열어 놓는 식으로 해야 한다.

관련글 더보기