카테고리 없음
AWS VPC설정
codingmonsters
2022. 8. 1. 11:03
네트워크 액세스 (NACL) / 보안그룹 (Security Group)
- NACL
- 서브넷 레벨에서 운영
- 허용/거부 규칙 지원
- 연결된 서브넷의 모든 인스턴스에 자동 적용
- Security Group
- 인스턴스 레벨에서 운영
- 허용 규칙만 지원 (어떤 ip 대역을 허용할지)
- 인스턴스 시작시 지정하거나 보안그룹을 나중에 인스턴스와 연결해야 적용됨
상단 네모칸은 네트워크 ACL 설정입니다. 이 Rule을 보니 172.31.1.2/32 라는 특정 ip만 제외하고 다른 모든 트래픽은 막아놓았습니다. 즉 저 서브넷은 한 ip만이 접근가능합니다. 아웃바운드 규칙도 보니 그 ip를 제외하고는 트래픽이 나갈수조차 없습니다. 이에 반해 인스턴스의 보안그룹 규칙 (하단 네모칸)을 보면 SSH 연결은 그 ip가 허용이 되어있고 모든 트래픽이 허용이 되어있네요. 즉 저 서브넷 안에서 누구와도 통신이 가능한것으로 보이네요. 다시말해 서브넷 내부와 자유롭게 통신을 할 수 있고 외부는 원천차단하는(한 ip제외) 그림입니다.
1) VPC만들기
# default resion : us-east-2 / ap-northeast-2
aws ec2 describe-vpcs
# 10.1.0.0/16 (10.1.255.255) 범위의 VPC 생성
export VPC_ID=$(aws ec2 create-vpc \
--cidr-block 10.1.0.0/16 \
--output text \
--query 'Vpc.VpcId')
# 생성한 VPC에 "sodaflow-k8s" 이름 태크 생성
echo ${VPC_ID}
aws ec2 create-tags \
--resource ${VPC_ID} \
--tags Key=Name,Value=sodaflow-k8s
2) Public DNS 호스트 이름 활성화
aws ec2 modify-vpc-attribute \
--vpc-id ${VPC_ID} \
--enable-dns-hostnames '{"Value": true}'
3) Subnet 생성하기
VPC만으로는 할 수 있는게 없고 서브넷(Subnet)을 만들어야 한다. 즉 CIDR 블록을 가지는 단위로 VPC를 잘게 쪼개서 사용하는 것이다. 서브넷은 실제로 리소스가 생성되는 물리적인 공간인 가용존과 연결된다.
# 10.1.1.0/24 (10.1.1.255) 대역대로 생성
export SUBNET_ID=$(aws ec2 create-subnet \
--vpc-id ${VPC_ID} \
--availability-zone us-east-2b \
--cidr-block 10.1.1.0/24 \
--output text --query 'Subnet.SubnetId')
echo ${SUBNET_ID}
aws ec2 create-tags \
--resources ${SUBNET_ID} \
--tags Key=Name,Value=sodaflow-k8s-sub1
4) 인터넷 연결을 위한 인터넷 게이트웨이 설정
VPC는 기본적으로 격리된 네트워크라서 인터넷에 연결되지 않는다. 인터넷에 연결하기 위해 “인터넷 게이트웨이“를 사용하면 되는데 인터넷 게이트웨이는 서브넷에 연결된 라우팅 테이블의 규칙으로서 추가된다.
export INTERNET_GATEWAY_ID=$(aws ec2 create-internet-gateway \
--output text \
--query 'InternetGateway.InternetGatewayId')
echo ${INTERNET_GATEWAY_ID}
aws ec2 create-tags \
--resources ${INTERNET_GATEWAY_ID} \
--tags Key=Name,Value=sodaflow-k8s-igw
# VPC에 인터넷 게이트웨이를 연결
aws ec2 attach-internet-gateway \
--internet-gateway-id ${INTERNET_GATEWAY_ID} \
--vpc-id ${VPC_ID}
# VPC 생성시 같이 생성된 라우팅 테이블에 이름을 붙인다
export ROUTE_TABLE_ID=$(aws ec2 describe-route-tables \
--filters Name=vpc-id,Values=${VPC_ID} \
--output text \
--query 'RouteTables[0].RouteTableId')
aws ec2 create-tags --resources ${ROUTE_TABLE_ID} --tags Key=Name,Value=sodaflow-k8s
# 라우팅 테이블을 서브넷에 연결
aws ec2 associate-route-table \
--route-table-id ${ROUTE_TABLE_ID} \
--subnet-id ${SUBNET_ID}
# 인터넷 게이트웨이를 이 라우팅 테이블의 규칙으로 추가
aws ec2 create-route \
--route-table-id ${ROUTE_TABLE_ID} \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id ${INTERNET_GATEWAY_ID}
5) 보안그룹 설정
# VPC 생성시 자동 생성된 보안 그룹을 조회하여 이름을 지정
export SECURITY_GROUP_ID=$(aws ec2 describe-security-groups \
--filters Name=vpc-id,Values=${VPC_ID} \
--output text \
--query 'SecurityGroups[0].GroupId')
echo ${SECURITY_GROUP_ID}
aws ec2 create-tags \
--resources ${SECURITY_GROUP_ID} \
--tags Key=Name,Value=sodaflow-k8s
# 규칙 적용 (회사내부 모든 트래픽 허용)
aws ec2 authorize-security-group-ingress \
--group-id ${SECURITY_GROUP_ID} \
--protocol tcp \
--port 0-65535 \
--cidr 121.134.174.0/24