AWS CLI를 사용하여 Amazon VPC 시작하기
이 튜토리얼에서는 AWS Command Line Interface(AWS Command Line Interface(AWS CLI)AWS AWS CLI)를 사용하여 가상 프라이빗 클라우드(VPC)를 생성하는 방법을 안내합니다. 퍼블릭 및 프라이빗 서브넷이 포함된 VPC를 설정하고, 인터넷 연결을 구성하고, EC2 인스턴스를 배포하여 일반적인 웹 애플리케이션 아키텍처를 시연하는 방법을 알아봅니다.
사전 조건
이 튜토리얼을 시작하기 전에 다음 사항을 확인해야 합니다.
-
AWS CLI. 설치해야 하는 경우 AWS CLI 설치 안내서를 따르세요.
-
적절한 자격 증명으로 AWS CLI 구성. 자격 증명을 아직 설정하지 않은 경우
aws configure
를 실행합니다. -
네트워킹 개념에 대한 기본적인 이해.
-
AWS 계정에서 VPC 리소스를 생성하고 관리하는 Amazon VPC용 자격 증명 및 액세스 관리.
비용 고려 사항
이 튜토리얼에서는 계정에 비용이 발생할 수 있는 AWS 리소스를 생성합니다. 기본 비용은 NAT 게이트웨이(시간당 0.045 USD + 데이터 처리 비용) 및 EC2 인스턴스(t2.micro, 시간당 약 0.0116 USD)에서 발생합니다. 이 튜토리얼을 1시간 안에 완료하고 모든 리소스를 정리하면 총 비용은 약 0.07 USD가 됩니다. 개발 환경에서 비용을 최적화하려면 NAT 게이트웨이 대신 NAT 인스턴스를 사용하는 것이 좋으며, 비용을 크게 줄일 수 있습니다.
계속하기 전에 AWS CLI가 올바르게 구성되었는지 확인해 보겠습니다.
aws configure list
AWS 액세스 키, 비밀 키 및 기본 리전이 표시되어야 합니다. 또한 VPC 리소스를 생성하는 데 필요한 권한이 있는지 확인합니다.
aws sts get-caller-identity
이 명령을 실행하면 AWS 계정 ID, 사용자 ID 및 ARN이 표시되어 자격 증명이 유효한지 확인합니다.
VPC 생성
가상 프라이빗 클라우드(VPC)는 AWS 계정 전용 가상 네트워크입니다. 이 섹션에서는 최대 65,536개의 IP 주소를 제공하는 CIDR 블록이 10.0.0.0/16인 VPC를 생성합니다.
VPC 생성
다음 명령을 실행하면 새 VPC를 생성되고 이름 태그가 할당됩니다.
aws ec2 create-vpc --cidr-block 10.0.0.0/16 --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=MyVPC}]'
출력에서 VPC ID를 확인합니다. 후속 명령에 필요합니다. 이 튜토리얼에서는 "vpc-0123456789abcdef0"을 VPC ID 예시로 사용합니다. 모든 명령에서 이를 실제 VPC ID로 바꾸세요.
DNS 지원 및 호스트 이름 활성화
기본적으로 DNS 확인 및 DNS 호스트 이름은 새 VPC에서 비활성화됩니다. 이러한 기능을 활성화하면 VPC의 인스턴스가 도메인 이름을 확인할 수 있습니다.
aws ec2 modify-vpc-attribute --vpc-id vpc-0123456789abcdef0 --enable-dns-support aws ec2 modify-vpc-attribute --vpc-id vpc-0123456789abcdef0 --enable-dns-hostnames
이러한 명령은 성공 시 출력을 생성하지 않습니다. 이제 VPC에 DNS 지원 및 호스트 이름 확인이 활성화됩니다.
서브넷 생성
서브넷은 격리된 리소스 그룹을 배치할 수 있는 VPC IP 주소 범위의 세그먼트입니다. 이 섹션에서는 고가용성을 위해 2개의 가용 영역에 퍼블릭 및 프라이빗 서브넷을 생성합니다.
사용 가능한 가용 영역 가져오기
먼저 해당 리전에서 사용 가능한 가용 영역을 검색합니다.
aws ec2 describe-availability-zones
이 튜토리얼에서는 처음 2개의 가용 영역을 사용합니다. 출력에서 이름을 기록합니다(예: "us-east-1a" 및 "us-east-1b").
퍼블릭 서브넷 생성
퍼블릭 서브넷은 웹 서버와 같이 인터넷에서 액세스해야 하는 리소스에 사용됩니다.
aws ec2 create-subnet \ --vpc-id vpc-0123456789abcdef0 \ --cidr-block 10.0.0.0/24 \ --availability-zone us-east-1a \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=Public-Subnet-AZ1}]'
출력에서 서브넷 ID를 기록합니다. 이 튜토리얼에서는 "subnet-0123456789abcdef0"을 첫 번째 퍼블릭 서브넷의 예시로 사용합니다.
aws ec2 create-subnet \ --vpc-id vpc-0123456789abcdef0 \ --cidr-block 10.0.1.0/24 \ --availability-zone us-east-1b \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=Public-Subnet-AZ2}]'
출력에서 서브넷 ID를 기록합니다. 이 튜토리얼에서는 "subnet-0123456789abcdef1"을 두 번째 퍼블릭 서브넷의 예시로 사용합니다.
프라이빗 서브넷 만들기
프라이빗 서브넷은 데이터베이스와 같이 인터넷에서 직접 액세스할 수 없어야 하는 리소스에 사용됩니다.
aws ec2 create-subnet \ --vpc-id vpc-0123456789abcdef0 \ --cidr-block 10.0.2.0/24 \ --availability-zone us-east-1a \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=Private-Subnet-AZ1}]'
출력에서 서브넷 ID를 기록합니다. 이 튜토리얼에서는 "subnet-0123456789abcdef2"를 첫 번째 프라이빗 서브넷의 예시로 사용합니다.
aws ec2 create-subnet \ --vpc-id vpc-0123456789abcdef0 \ --cidr-block 10.0.3.0/24 \ --availability-zone us-east-1b \ --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=Private-Subnet-AZ2}]'
출력에서 서브넷 ID를 기록합니다. 이 튜토리얼에서는 "subnet-0123456789abcdef3"을 두 번째 프라이빗 서브넷의 예시로 사용합니다.
이제 2개의 가용 영역에 분산된 2개의 퍼블릭 서브넷과 2개의 프라이빗 서브넷, 총 4개의 서브넷이 있습니다.
팁: CIDR 블록을 계획할 때 기존 네트워크와 겹치지 않도록 하세요. 프로덕션 환경의 경우 향후 증가에 대비해 충분한 IP 주소를 할당하는 동시에 보안 및 관리를 위해 서브넷 크기를 적절하게 유지하세요.
인터넷 연결 구성
VPC의 리소스가 인터넷과 통신하도록 허용하려면 인터넷 게이트웨이를 생성하고 연결해야 합니다. 이 섹션에서는 VPC의 인터넷 연결을 설정합니다.
인터넷 게이트웨이 생성
인터넷 게이트웨이를 통해 VPC와 인터넷 간의 통신이 가능합니다.
aws ec2 create-internet-gateway \ --tag-specifications 'ResourceType=internet-gateway,Tags=[{Key=Name,Value=MyIGW}]'
출력에서 인터넷 게이트웨이 ID를 기록합니다. 이 튜토리얼에서는 "igw-0123456789abcdef0"을 예시로 사용하겠습니다.
인터넷 게이트웨이를 VPC에 연결
인터넷 게이트웨이를 생성한 후, VPC에 연결합니다.
aws ec2 attach-internet-gateway --internet-gateway-id igw-0123456789abcdef0 --vpc-id vpc-0123456789abcdef0
라우팅 테이블 생성 및 구성
라우팅 테이블에는 네트워크 트래픽이 전달되는 위치를 결정하는 규칙(라우팅)이 있습니다. 먼저 퍼블릭 서브넷의 라우팅 테이블을 생성합니다.
aws ec2 create-route-table \ --vpc-id vpc-0123456789abcdef0 \ --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=Public-RT}]'
출력에서 라우팅 테이블 ID를 기록합니다. 이 튜토리얼에서는 "rtb-0123456789abcdef0"을 퍼블릭 라우팅 테이블의 예시로 사용합니다.
퍼블릭 라우팅 테이블에서 인터넷 게이트웨이 경로를 추가합니다.
aws ec2 create-route --route-table-id rtb-0123456789abcdef0 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-0123456789abcdef0
퍼블릭 서브넷과 퍼블릭 라우팅 테이블을 연결합니다.
aws ec2 associate-route-table --route-table-id rtb-0123456789abcdef0 --subnet-id subnet-0123456789abcdef0 aws ec2 associate-route-table --route-table-id rtb-0123456789abcdef0 --subnet-id subnet-0123456789abcdef1
이제 프라이빗 서브넷용 라우팅 테이블을 생성합니다.
aws ec2 create-route-table \ --vpc-id vpc-0123456789abcdef0 \ --tag-specifications 'ResourceType=route-table,Tags=[{Key=Name,Value=Private-RT}]'
출력에서 라우팅 테이블 ID를 기록합니다. 이 튜토리얼에서는 "rtb-0123456789abcdef1"을 프라이빗 라우팅 테이블의 예시로 사용합니다.
프라이빗 서브넷과 프라이빗 라우팅 테이블을 연결합니다.
aws ec2 associate-route-table --route-table-id rtb-0123456789abcdef1 --subnet-id subnet-0123456789abcdef2 aws ec2 associate-route-table --route-table-id rtb-0123456789abcdef1 --subnet-id subnet-0123456789abcdef3
NAT 게이트웨이 생성
NAT 게이트웨이를 사용하면 프라이빗 서브넷의 인스턴스가 인터넷으로의 아웃바운드 트래픽을 시작하는 동시에 인터넷에서의 인바운드 트래픽을 방지할 수 있습니다. 업데이트를 다운로드하거나 외부 서비스에 액세스해야 하는 인스턴스에 있어 필수적입니다.
탄력적 IP 할당
먼저 NAT 게이트웨이의 탄력적 IP 주소를 할당합니다.
aws ec2 allocate-address --domain vpc
출력에서 할당 ID를 기록합니다. 이 튜토리얼에서는 "eipalloc-0123456789abcdef0"을 예시로 사용하겠습니다.
NAT 게이트웨이 생성
할당된 탄력적 IP를 사용하여 퍼블릭 서브넷 중 하나에 NAT 게이트웨이를 생성합니다.
aws ec2 create-nat-gateway \ --subnet-id subnet-0123456789abcdef0 \ --allocation-id eipalloc-0123456789abcdef0 \ --tag-specifications 'ResourceType=natgateway,Tags=[{Key=Name,Value=MyNATGateway}]'
출력에서 NAT 게이트웨이 ID를 기록합니다. 이 튜토리얼에서는 "nat-0123456789abcdef0"을 예시로 사용하겠습니다.
NAT 게이트웨이를 사용할 수 있을 때까지 기다린 다음 계속합니다.
aws ec2 wait nat-gateway-available --nat-gateway-ids nat-0123456789abcdef0
NAT 게이트웨이에 경로 추가
프라이빗 서브넷의 인스턴스가 인터넷에 액세스할 수 있도록 프라이빗 라우팅 테이블의 NAT 게이트웨이에 라우팅을 추가합니다.
aws ec2 create-route --route-table-id rtb-0123456789abcdef1 --destination-cidr-block 0.0.0.0/0 --nat-gateway-id nat-0123456789abcdef0
참고: 프로덕션 환경의 경우 단일 장애 지점을 제거하기 위해 프라이빗 서브넷이 있는 각 가용 영역에 NAT 게이트웨이를 생성하는 것이 좋습니다.
서브넷 설정 구성
시작된 인스턴스에 퍼블릭 IP 주소를 자동으로 할당하도록 퍼블릭 서브넷을 구성합니다.
aws ec2 modify-subnet-attribute --subnet-id subnet-0123456789abcdef0 --map-public-ip-on-launch aws ec2 modify-subnet-attribute --subnet-id subnet-0123456789abcdef1 --map-public-ip-on-launch
이렇게 하면 퍼블릭 서브넷에서 시작된 인스턴스가 기본적으로 퍼블릭 IP 주소를 수신하므로 인터넷에서 액세스할 수 있습니다.
보안 그룹 생성
보안 그룹은 인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 합니다. 이 섹션에서는 웹 서버 및 데이터베이스 서버용 보안 그룹을 생성합니다.
웹 서버용 보안 그룹 생성
aws ec2 create-security-group \ --group-name WebServerSG \ --description "Security group for web servers" \ --vpc-id vpc-0123456789abcdef0
출력에서 보안 그룹 ID를 기록합니다. 이 튜토리얼에서는 "sg-0123456789abcdef0"을 웹 서버 보안 그룹의 예시로 사용합니다.
웹 서버로의 HTTP 및 HTTPS 트래픽을 허용합니다.
aws ec2 authorize-security-group-ingress --group-id sg-0123456789abcdef0 --protocol tcp --port 80 --cidr 0.0.0.0/0 aws ec2 authorize-security-group-ingress --group-id sg-0123456789abcdef0 --protocol tcp --port 443 --cidr 0.0.0.0/0
참고: 프로덕션 환경의 경우 0.0.0.0/0(모든 IP 주소)에서의 트래픽을 허용하는 대신 인바운드 트래픽을 특정 IP 범위로 제한합니다.
데이터베이스 서버용 보안 그룹 생성
aws ec2 create-security-group \ --group-name DBServerSG \ --description "Security group for database servers" \ --vpc-id vpc-0123456789abcdef0
출력에서 보안 그룹 ID를 기록합니다. 이 튜토리얼에서는 "sg-0123456789abcdef1"을 데이터베이스 서버 보안 그룹의 예시로 사용합니다.
웹 서버에서의 MySQL/Aurora 트래픽만 허용합니다.
aws ec2 authorize-security-group-ingress --group-id sg-0123456789abcdef1 --protocol tcp --port 3306 --source-group sg-0123456789abcdef0
이 구성을 통해 최소 권한 원칙에 따라 웹 서버 보안 그룹의 인스턴스만 포트 3306의 데이터베이스 서버에 연결할 수 있습니다.
VPC 구성 확인
필요한 구성 요소를 모두 생성한 후 VPC 구성을 확인하여 모든 구성 요소가 올바르게 설정되었는지 확인합니다.
VPC 확인
aws ec2 describe-vpcs --vpc-id vpc-0123456789abcdef0
서브넷 확인
aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-0123456789abcdef0"
라우팅 테이블 확인
aws ec2 describe-route-tables --filters "Name=vpc-id,Values=vpc-0123456789abcdef0"
인터넷 게이트웨이 확인
aws ec2 describe-internet-gateways --filters "Name=attachment.vpc-id,Values=vpc-0123456789abcdef0"
NAT 게이트웨이 확인
aws ec2 describe-nat-gateways --filter "Name=vpc-id,Values=vpc-0123456789abcdef0"
보안 그룹 확인
aws ec2 describe-security-groups --filters "Name=vpc-id,Values=vpc-0123456789abcdef0"
이러한 명령을 실행하면 VPC의 각 구성 요소에 대한 자세한 정보가 제공되므로 모든 것이 올바르게 구성되었는지 확인할 수 있습니다.
EC2 인스턴스 배포
이제 VPC 인프라를 생성했으므로 EC2 인스턴스를 배포하여 아키텍처의 작동 방식을 시연할 수 있습니다. 퍼블릭 서브넷에서 웹 서버를 시작하고 프라이빗 서브넷에서 데이터베이스 서버를 시작합니다.
SSH 액세스를 위한 키 페어 생성
먼저 인스턴스에 안전하게 연결하도록 키 페어를 생성합니다.
aws ec2 create-key-pair --key-name vpc-tutorial-key --query 'KeyMaterial' --output text > vpc-tutorial-key.pem chmod 400 vpc-tutorial-key.pem
이 명령을 실행하면 새 키 페어가 생성되고 권한이 제한된 파일에 프라이빗 키가 저장됩니다.
최신 Amazon Linux 2 AMI 찾기
인스턴스에 사용할 최신 Amazon Linux 2 AMI를 찾습니다.
aws ec2 describe-images --owners amazon \ --filters "Name=name,Values=amzn2-ami-hvm-*-x86_64-gp2" "Name=state,Values=available" \ --query "sort_by(Images, &CreationDate)[-1].ImageId" --output text
출력에서 AMI ID를 기록합니다. 이 튜토리얼에서는 "ami-0123456789abcdef0"을 예시로 사용하겠습니다.
퍼블릭 서브넷에서 웹 서버 시작
이제 퍼블릭 서브넷에서 웹 서버 역할을 할 EC2 인스턴스를 시작합니다.
aws ec2 run-instances \ --image-id ami-0123456789abcdef0 \ --count 1 \ --instance-type t2.micro \ --key-name vpc-tutorial-key \ --security-group-ids sg-0123456789abcdef0 \ --subnet-id subnet-0123456789abcdef0 \ --associate-public-ip-address \ --user-data '#!/bin/bash yum update -y yum install -y httpd systemctl start httpd systemctl enable httpd echo "<h1>Hello from $(hostname -f)</h1>" > /var/www/html/index.html' \ --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=WebServer}]'
출력에서 인스턴스 ID를 기록합니다. 이 튜토리얼에서는 "i-0123456789abcdef0"을 웹 서버 인스턴스의 예시로 사용합니다.
프라이빗 서브넷에서 데이터베이스 서버 시작
다음으로 프라이빗 서브넷에서 데이터베이스 서버 역할을 할 EC2 인스턴스를 시작합니다.
aws ec2 run-instances \ --image-id ami-0123456789abcdef0 \ --count 1 \ --instance-type t2.micro \ --key-name vpc-tutorial-key \ --security-group-ids sg-0123456789abcdef1 \ --subnet-id subnet-0123456789abcdef2 \ --user-data '#!/bin/bash yum update -y yum install -y mariadb-server systemctl start mariadb systemctl enable mariadb' \ --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=DBServer}]'
출력에서 인스턴스 ID를 기록합니다. 이 튜토리얼에서는 "i-0123456789abcdef1"을 데이터베이스 서버 인스턴스의 예시로 사용합니다.
웹 서버 액세스
웹 서버 인스턴스가 실행 중이면 퍼블릭 IP 주소를 사용하여 액세스할 수 있습니다.
aws ec2 describe-instances \ --instance-ids i-0123456789abcdef0 \ --query 'Reservations[0].Instances[0].PublicIpAddress' \ --output text
이 명령을 실행하면 웹 서버의 퍼블릭 IP 주소가 출력됩니다. 이 튜토리얼에서는 "203.0.113.10"을 예시로 사용하겠습니다.
이제 웹 브라우저에서 http://203.0.113.10 URL을 열 수 있습니다.
SSH를 통해 인스턴스에 연결
웹 서버에 연결:
ssh -i vpc-tutorial-key.pem ec2-user@203.0.113.10
데이터베이스 서버에 연결하려면 먼저 웹 서버에 SSH를 연결하고, 데이터베이스 서버에 SSH를 연결해야 합니다.
# Get the private IP of the database server aws ec2 describe-instances \ --instance-ids i-0123456789abcdef1 \ --query 'Reservations[0].Instances[0].PrivateIpAddress' \ --output text
이 명령을 실행하면 데이터베이스 서버의 프라이빗 IP 주소가 출력됩니다. 이 튜토리얼에서는 "10.0.2.10"을 예시로 사용하겠습니다.
# First SSH to web server, then to database server ssh -i vpc-tutorial-key.pem -A ec2-user@203.0.113.10 ssh ec2-user@10.0.2.10
다음은 생성한 네트워크 아키텍처입니다. 웹 서버는 공개적으로 액세스할 수 있는 반면 데이터베이스 서버는 VPC 내에서만 액세스할 수 있습니다.
문제 해결
다음은 VPC 생성 시 발생할 수 있는 몇 가지 일반적인 문제와 이를 해결하는 방법입니다.
CIDR 블록 겹침
CIDR 블록 겹침 관련 오류가 발생하는 경우 VPC 및 서브넷의 CIDR 블록이 계정의 기존 VPC 또는 서브넷과 겹치지 않아야 합니다.
권한 오류
권한 오류가 발생하면 IAM 사용자 또는 역할에 VPC 리소스를 생성 및 관리하는 데 필요한 권한이 있는지 확인합니다. AmazonVPCFullAccess
정책을 연결하거나 필요한 권한이 포함된 사용자 지정 정책을 생성해야 할 수 있습니다.
리소스 제한
AWS 계정에는 생성할 수 있는 VPC, 서브넷 및 기타 리소스의 수에 대한 기본 제한이 있습니다. 이러한 제한에 도달하면 AWS 지원 센터를 통해 증가를 요청할 수 있습니다.
정리 중 종속성 오류
리소스를 정리할 때 잘못된 순서로 리소스를 삭제하려고 하면 종속성 오류가 발생할 수 있습니다. 항상 최하위로 종속된 리소스부터 시작하여 생성 순서의 역순으로 리소스를 삭제하세요.
리소스 정리
VPC 사용이 끝나면 요금이 발생하지 않도록 리소스를 정리할 수 있습니다. 종속성을 올바르게 처리하려면 생성 순서의 역순으로 리소스를 삭제하세요.
EC2 인스턴스 종료
aws ec2 terminate-instances --instance-ids i-0123456789abcdef0 i-0123456789abcdef1 aws ec2 wait instance-terminated --instance-ids i-0123456789abcdef0 i-0123456789abcdef1
키 페어 삭제
aws ec2 delete-key-pair --key-name vpc-tutorial-key rm vpc-tutorial-key.pem
NAT 게이트웨이 삭제
aws ec2 delete-nat-gateway --nat-gateway-id nat-0123456789abcdef0 aws ec2 wait nat-gateway-deleted --nat-gateway-ids nat-0123456789abcdef0
탄력적 IP 릴리스
aws ec2 release-address --allocation-id eipalloc-0123456789abcdef0
보안 그룹 삭제
aws ec2 delete-security-group --group-id sg-0123456789abcdef1 aws ec2 delete-security-group --group-id sg-0123456789abcdef0
라우팅 테이블 삭제
먼저 라우팅 테이블 연결 ID를 찾습니다.
aws ec2 describe-route-tables --route-table-id rtb-0123456789abcdef0 aws ec2 describe-route-tables --route-table-id rtb-0123456789abcdef1
다음으로 서브넷에서 라우팅 테이블의 연결을 해제합니다(연결 ID를 출력의 연결 ID로 바꾸기).
aws ec2 disassociate-route-table --association-id rtbassoc-0123456789abcdef0 aws ec2 disassociate-route-table --association-id rtbassoc-0123456789abcdef1 aws ec2 disassociate-route-table --association-id rtbassoc-0123456789abcdef2 aws ec2 disassociate-route-table --association-id rtbassoc-0123456789abcdef3
그런 다음 라우팅 테이블을 삭제합니다.
aws ec2 delete-route-table --route-table-id rtb-0123456789abcdef1 aws ec2 delete-route-table --route-table-id rtb-0123456789abcdef0
인터넷 게이트웨이를 분리 및 삭제
aws ec2 detach-internet-gateway --internet-gateway-id igw-0123456789abcdef0 --vpc-id vpc-0123456789abcdef0 aws ec2 delete-internet-gateway --internet-gateway-id igw-0123456789abcdef0
서브넷 삭제
aws ec2 delete-subnet --subnet-id subnet-0123456789abcdef0 aws ec2 delete-subnet --subnet-id subnet-0123456789abcdef1 aws ec2 delete-subnet --subnet-id subnet-0123456789abcdef2 aws ec2 delete-subnet --subnet-id subnet-0123456789abcdef3
VPC 삭제
aws ec2 delete-vpc --vpc-id vpc-0123456789abcdef0
프로덕션으로 이동
이 튜토리얼은 AWS CLI를 사용하여 VPC를 생성하는 방법을 알아보는 데 도움이 되도록 설계되었습니다. 프로덕션 환경의 경우 다음 보안 및 아키텍처 모범 사례를 고려하세요.
-
보안 그룹 규칙: 0.0.0.0/0에서의 트래픽을 허용하는 대신 인바운드 트래픽을 특정 IP 범위로 제한합니다.
-
고가용성: 프라이빗 서브넷이 있는 각 가용 영역에 NAT 게이트웨이를 배포하여 단일 장애 지점을 없앱니다.
-
네트워크 ACL: 네트워크 ACL을 보안 그룹 이외의 추가 보안 계층으로 구현합니다.
-
VPC 흐름 로그: VPC 흐름 로그를 활성화하여 네트워크 트래픽 패턴을 모니터링 및 분석합니다.
-
리소스 태그 지정: 효과적인 리소스 관리를 위해 포괄적인 태그 지정 전략을 구현합니다.
프로덕션에서 바로 사용할 수 있는 아키텍처 구축에 대한 자세한 내용은 AWS Well-Architected Framework 및 AWS 보안 모범 사례
다음 단계
이제 퍼블릭 및 프라이빗 서브넷이 포함된 VPC를 생성했으므로 다음 작업이 가능합니다.
-
퍼블릭 또는 프라이빗 서브넷에서EC2 인스턴스를 시작합니다.
-
로드 밸런서를 배포하여 여러 인스턴스에 걸쳐 트래픽을 분산합니다.
-
고가용성 및 확장성을 위해 Auto Scaling 그룹을 설정합니다.
-
프라이빗 서브넷에서 RDS 데이터베이스를 구성합니다.
-
VPC 피어링을 구현하여 다른 VPC와 연결합니다.
-
VPC를 온프레미스 네트워크에 연결하도록 VPN 연결을 설정합니다.