우당탕탕 개발일지
테라폼 3-Tier 아키텍처 구축(1) - 보안그룹 본문
3-Tier 아키텍처란?
어떠한 플랫폼이나 애플리케이션을 3계층으로 나누어 별도의 논리적/물리적인 장치에 구축 및 운영하는 형태이다. 통 프레젠테이션 계층, 어플리케이션 계층, 데이터 계층으로 나눈다.
- 프젠테이션 계층
- 사용자가 애플리케이션과 상호작용하는 인터페이스
- 일반적으로 HTML, JS, CSS 등이 이 계층에 포함되며, 프론트엔드라고 불린다. - 애플리케이션 계층
- 요청되는 정보를 어떠한 규칙에 따라 처리하고 가공한다.
- 백엔드로 불린다. - 데이터 계층
- 데이터 베이스와 데이터 베이스에 접근하여 데이터를 CRUD 한다.
폴더 구조
- dev/ : Terraform 구성이 정의된 파일
- modules/ : 리소스 집합
3-Tier 아키텍처 구현
[ sg ] 보안 그룹
* Source: 출발지, cidr_blocks 또는 Security Group
* Port: Source에서 들어오는 Port Number
- vpc-security-group
VPC SG | Type | Protocol | Port | Source |
INGRESS | SSH | TCP | 22 | 내 IP |
HTTP | TCP | 80 | 내 IP | |
ICMP | ICMP | -1 | 내 IP |
- web-security-group
WEB SG | Type | Protocol | Port | Source |
INGRESS | SSH | TCP | 22 | VPC SG |
HTTP | TCP | 80 | 0.0.0.0/0 |
- was-security-group
WEB SG | Type | Protocol | Port | Source |
INGRESS | SSH | TCP | 22 | VPC SG |
Custom TCP | TCP | 8080 | 10.0.11.0/24 10.0.12.0/24 |
- rds-security-group
RDS SG | Type | Protocol | Port | Source |
INGRESS | MYSQL | TCP | 3306 | WAS SG |
Custom TCP | TCP | 8080 | LB SG |
####################################
# VPC Security Group
####################################
resource "aws_security_group" "vpc_security_group" {
name = "vpc_security_group"
description = "Allow SSH/HTTP/ICMP inbound traffic"
vpc_id = var.vpc-id
ingress {
description = "Allow SSH from VPC"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
description = "Allow HTTP from VPC"
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
description = "Allow ICMP from VPC"
from_port = -1
to_port = -1
protocol = "icmp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "vpc_security_group"
}
}
####################################
# WEB Security Group
####################################
resource "aws_security_group" "web_security_group" {
name = "web_security_group"
description = "Allow SSH/HTTP inbound traffic"
vpc_id = var.vpc-id
ingress {
description = "Allow SSH from VPC"
from_port = 22
to_port = 22
protocol = "tcp"
security_groups = [var.vpc-sg-id]
}
ingress {
description = "Allow HTTP from VPC"
from_port = 80
to_port = 80
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"]
}
tags = {
Name = "web_security_group"
}
}
####################################
# WAS Security Group
####################################
resource "aws_security_group" "was_security_group" {
name = "was_security_group"
description = "Allow SSH inbound traffic"
vpc_id = var.vpc-id
ingress {
description = "Allow SSH from VPC"
from_port = 22
to_port = 22
protocol = "tcp"
security_groups = [var.vpc-sg-id]
}
ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
cidr_blocks = ["10.0.11.0/24", "10.0.12.0/24"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "was_security_group"
}
}
####################################
# RDS Security Group
####################################
resource "aws_security_group" "rds_security_group" {
name = "rds_security_group"
description = "RDS Security Group"
vpc_id = var.vpc-id
ingress {
from_port = 3306
to_port = 3306
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"]
}
tags = {
Name = "rds_security_group"
}
}
- variable.tf
variable "vpc-id" {
description = "VPC ID"
type = string
}
variable "vpc-sg-id" {
description = "VPC Security Group ID"
type = string
}
- outputs.tf
output "vpc_security_group_id" {
description = "VPC Security Group ID"
value = aws_security_group.vpc_security_group.id
}
output "web_security_group_id" {
description = "WEB Security Group ID"
value = aws_security_group.web_security_group.id
}
output "was_security_group_id" {
description = "WAS Security Group ID"
value = aws_security_group.was_security_group.id
}
output "rds_security_group_id" {
description = "RDS Security Group ID"
value = aws_security_group.rds_security_group.id
}
728x90
'Cloud' 카테고리의 다른 글
모니터링 구축 (2) | 2024.01.05 |
---|---|
Linux Git (0) | 2023.12.12 |
테라폼 3-Tier 아키텍처 구축(2) - VPC, EC2 (1) | 2023.11.26 |
테라폼 개발 환경 준비 (1) | 2023.11.26 |
CI/CD 파이프라인 - GCP를 통한 Jenkins CI 구축 (0) | 2023.10.30 |