VPN
가상 사설 네트워크(VPN)
- 고객 게이트웨이
- 가상 프라이빗 게이트웨이
- Site-to-Site VPN 연결
- Client VPN 엔드포인트
AWS가 확인한 액세스
- 확인된 액세스 인스턴스
- 확인된 액세스 신뢰 공급자
- 확인된 액세스 그룹
- 확인된 액세스 엔드포인트
1. 고객 게이트웨이 (Customer Gateway)
필수 항목:
- bgp_asn: BGP ASN 번호 (필수)
- ip_address: 고객 게이트웨이의 IP 주소 (필수)
선택 항목:
- tags: 태그 (선택적)
리소스 이름: aws_customer_gateway
resource "aws_customer_gateway" "main_customer_gateway" {
bgp_asn = 65000 # 필수: BGP ASN
ip_address = "203.0.113.12" # 필수: 고객 게이트웨이 IP 주소
type = "ipsec.1" # 필수: 고객 게이트웨이 타입 (ipsec.1)
tags = {
Name = "MainCustomerGateway" # 옵션: 태그
}
}
2. 가상 프라이빗 게이트웨이 (Virtual Private Gateway)
필수 항목:
- vpc_id: VPC ID (필수)
선택 항목:
- amazon_side_asn: Amazon의 BGP ASN (선택적)
- tags: 태그 (선택적)
리소스 이름: aws_vpn_gateway
resource "aws_vpn_gateway" "main_vpg" {
vpc_id = aws_vpc.main_vpc.id # 필수: 연결할 VPC ID
# 옵션: Amazon 쪽 ASN 값
amazon_side_asn = 64512
tags = {
Name = "MainVPNGateway" # 옵션: 태그
}
}
3. Site-to-Site VPN 연결 (Site-to-Site VPN Connection)
필수 항목:
- customer_gateway_id: 고객 게이트웨이 ID (필수)
- vpn_gateway_id: VPN 게이트웨이 ID (필수)
선택 항목:
- static_routes_only: 정적 라우트만 사용할지 여부 (선택적)
- tunnel_options: VPN 터널 옵션 (선택적)
리소스 이름: aws_vpn_connection
resource "aws_vpn_connection" "main_vpn_connection" {
customer_gateway_id = aws_customer_gateway.main_customer_gateway.id # 필수: 고객 게이트웨이 ID
vpn_gateway_id = aws_vpn_gateway.main_vpg.id # 필수: VPN 게이트웨이 ID
type = "ipsec.1" # 필수: 타입
static_routes_only = false # 옵션: 정적 라우트만 사용 여부
# 옵션: 터널 옵션 설정
tunnel1_preshared_key = "somepresharedkey1"
tunnel2_preshared_key = "somepresharedkey2"
tags = {
Name = "MainVPNConnection" # 옵션: 태그
}
}
4. Client VPN 엔드포인트 (Client VPN Endpoint)
필수 항목:
- server_certificate_arn: VPN 서버에 사용할 인증서 ARN (필수)
- authentication_options: 인증 옵션 (필수)
- connection_log_options: 연결 로그 옵션 (필수)
선택 항목:
- split_tunnel: 스플릿 터널 사용 여부 (선택적)
- tags: 태그 (선택적)
리소스 이름: aws_ec2_client_vpn_endpoint
resource "aws_ec2_client_vpn_endpoint" "main_client_vpn" {
description = "Client VPN for corporate use" # 옵션: 설명
server_certificate_arn = "arn:aws:acm:region:account-id:certificate/id" # 필수: 인증서 ARN
# 필수: 인증 옵션 설정
authentication_options {
type = "certificate-authentication"
root_certificate_chain_arn = "arn:aws:acm:region:account-id:certificate/root-cert-id"
}
# 필수: 연결 로그 옵션 설정
connection_log_options {
cloudwatch_log_group = "ClientVPNLogs"
cloudwatch_log_stream = "Stream1"
enabled = true
}
# 옵션: 스플릿 터널 여부
split_tunnel = false
tags = {
Name = "MainClientVPN" # 옵션: 태그
}
}
5. 확인된 액세스 인스턴스 (Verified Access Instance)
필수 항목:
- verified_access_trust_provider_ids: 신뢰 공급자 ID 목록 (필수)
- verified_access_instance_id: 액세스 인스턴스 ID (필수)
리소스 이름: aws_verified_access_instance
resource "aws_verified_access_instance" "main_verified_access_instance" {
description = "Main Verified Access Instance" # 옵션: 설명
# 필수: 신뢰 공급자 ID 목록
verified_access_trust_provider_ids = [
aws_verified_access_trust_provider.main_trust_provider.id
]
tags = {
Name = "MainVerifiedAccessInstance" # 옵션: 태그
}
}
6. 확인된 액세스 신뢰 공급자 (Verified Access Trust Provider)
필수 항목:
- type: 신뢰 공급자 타입 (필수)
- verified_access_trust_provider_id: 공급자 ID (필수)
리소스 이름: aws_verified_access_trust_provider
resource "aws_verified_access_trust_provider" "main_trust_provider" {
type = "oidc" # 필수: 신뢰 공급자 타입 (OIDC)
oidc_options {
issuer = "https://example.com" # 필수: OIDC 공급자 주소
client_id = "client123" # 필수: 클라이언트 ID
}
tags = {
Name = "MainTrustProvider" # 옵션: 태그
}
}
7. 확인된 액세스 그룹 (Verified Access Group)
필수 항목:
- verified_access_instance_id: 액세스 인스턴스 ID (필수)
리소스 이름: aws_verified_access_group
resource "aws_verified_access_group" "main_access_group" {
verified_access_instance_id = aws_verified_access_instance.main_verified_access_instance.id # 필수: 액세스 인스턴스 ID
tags = {
Name = "MainVerifiedAccessGroup" # 옵션: 태그
}
}
8. 확인된 액세스 엔드포인트 (Verified Access Endpoint)
필수 항목:
- verified_access_group_id: 액세스 그룹 ID (필수)
- load_balancer_options: 로드 밸런서 옵션 (필수)
리소스 이름: aws_verified_access_endpoint
resource "aws_verified_access_endpoint" "main_verified_access_endpoint" {
verified_access_group_id = aws_verified_access_group.main_access_group.id # 필수: 액세스 그룹 ID
# 필수: 로드 밸런서 옵션 설정
load_balancer_options {
protocol = "https"
port = 443
}
tags = {
Name = "MainVerifiedAccessEndpoint" # 옵션: 태그
}
}
각 리소스는 AWS의 네트워크 보안 및 VPN 기능을 관리하는 데 중요한 역할을 한다. Terraform을 사용해 각 리소스를 정의할 때, 필수 및 선택 입력 파라미터를 신중히 선택해야 하며, 각 리소스는 특정 시나리오에 맞게 조정될 수 있다.
'AWS' 카테고리의 다른 글
S3에서 IaC로 폴더 만들기 (0) | 2024.10.22 |
---|---|
AWS VPC Transit G/W, 트래픽 미러링, VPC 래티스 리소스 (0) | 2024.10.22 |
AWS VPC 보안, DNS 방화벽, 네트워크 방화벽 리소스 (0) | 2024.10.22 |
AWS VPC 리소스 (0) | 2024.10.22 |
AWS S3 리소스 (0) | 2024.10.22 |