일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- api gateway
- Await
- DynamoDB
- elasticsearch
- Proxy Resource
- 비구조화 할당
- AWS
- cognito
- 단축 평가
- null 병합 연산자
- docker
- 구조분해 할당
- 옵셔널 체이닝
- VPC
- CloudFormation
- transit gateway
- Service
- On-Premise
- JavaScript
- Custom Resource
- vgw
- Endpoints
- grafana
- 온프레미스
- optional chaining
- prometheus
- Kubernetes
- Site-to-Site VPN
- 자바스크립트
- docker swarm
- Today
- Total
만자의 개발일지
[AWS] VPC Peering 이란 본문
VPC Peering
VPC Peering 이란 다른 VPC간에 Private IP로 통신가능하도록 연결하는 것을 말합니다. 보통의 VPC 간 통신은 Public IP를 통해 이루어집니다. Public IP를 통해 통신을 할 경우 데이터의 안전성에 대한 문제가 발생할 수 있습니다.
VPC Peering을 사용하면 다른 VPC간에 Private IP로 통신하기 때문에 데이터의 안전성을 보장받을 수 있습니다.
VPC Peering 특징
- 1 대 1 VPC 연결만 지원합니다.
- 다른 리전의 VPC 및 다른 AWS계정의 VPC와도 연결이 가능합니다.
- 연결된 VPC는 CIDR가 겹치면 안됩니다.
VPC Peering은 단방향 통신과 양방향 통신 모두 지원합니다. 라우팅 테이블을 한쪽만 정의한 경우 단방향 통신을 지원하고 양쪽다 정의할 경우 양방향 통신을 지원합니다.
VPC Peering Connection 생성
VPC Peering을 실습하기 위해서는 우선 서로다른 CIDR 대역을 가진 VPC가 두개 이상 있어야합니다.
필자는 다음과 같이 서로 다른 CIDR 대역을 지닌 VPC를 두개 만들어 주었습니다.
서브넷은 뒤에서 EC2를 생성해 테스트 해볼 것이므로 인터넷 게이트웨이가 달린 퍼블릭 서브넷을 각각의 VPC에 한개 이상 생성해두면 되겠습니다. 서브넷 생성은 생략하도록 하겠습니다.
VPC Peering을 이용하기 위해서는 Peering Connection을 생성해주어야 합니다. 오른쪽 상단에 Create peering connection 버튼을 눌러 Peering Connection을 생성해줍니다.
설정을 보시면 이름과 Account(동일 계정 혹은 다른 계정), 리전(동일 리전 혹은 다른 리전) 그리고 요청자(Requester) VPC와 수락자(Accepter) VPC를 지정해 줄 수 있습니다.
요청자 VPC와 수락자 VPC의 경우 같은 계정 내에서는 별로 크게 의미가 없습니다. (내가 요청하고 내가 수락받기 때문)
모든 설정을 마치셨다면 하단에 Create peering connection 버튼을 눌러 Peering Connection을 생성해줍니다.
생성이 되었다면 수락자 VPC에서 요청을 수락해야 합니다. 필자는 같은 계정에서 진행하고 있기에 바로 Actions -> Accept request 버튼을 눌러 수락해주도록 하겠습니다.
Accept request 버튼을 눌러 요청을 수락해줍니다.
이제 Peering을 허용하기 위해서 라우팅 테이블에서 Peering을 정의해줘야 합니다. 양방향 통신을 구현하기 위해 양쪽 라우팅 테이블을 모두 정의해주도록 하겠습니다.
필자는 퍼블릭 라우팅 테이블에 인터넷 게이트웨이와 서브넷을 각각 두개씩 연결해주었습니다.
라우팅 테이블은 선택한 후 Edit routes 버튼을 눌러 라우팅 테이블을 편집해줍니다.
요청자 VPC의 라우팅 테이블입니다. VPC 대역은 수락자 VPC에대한 Peering Connection을 통해 허용할 것이기 때문에 수락자 VPC의 CIDR 대역으로 지정해줍니다. 반대도 마찬가지입니다.
Peering을 위한 준비는 모두 마쳤으니 이제 각 VPC에 EC2를 생성하여 Peering이 되는지 확인해 보도록 하겠습니다.
필자는 다음과 같이 EC2를 두개 생성해주었습니다. 각각 Public IP를 할당해주었고 보안그룹은 SSH 접속에 대한 모든 트래픽을 허용해 주었습니다.
Peering이 되는지 확인하기 위해 Requester-ec2에 접속하여 Accepter-ec2로 ssh접속을 시도해 주었습니다.
$ ssh ec2-user@ec2-dns
접속은 잘 되는것을 보실 수 있습니다. 하지만 이는 사실 Peering을 이용한것이 아닙니다.
nslookup 명령어를 통해 Accepter-ec2의 dns가 가르키고 있는 IP를 확인해보면 Private IP가 아닌 Public IP가 뜨는 것을 보실 수 있습니다.
Peering은 Public IP가 아닌 Private IP로 통신합니다. 때문에 dns가 가르키는 주소를 Private IP로 설정하기 위해서는 Peering Connection에서 다음과 같이 설정해 주어야 합니다.
Peering Connection 콘솔로 들어가 하단에 DNS를 선택한 후 Edit DNS settings 버튼을 눌러줍니다.
Requester DNS resolution, Accepter DNS resolution 둘다 허용해주도록합니다.
Save changes 버튼을 눌러 변경된 내용을 저장해줍니다. 적용되기까지 약간의 시간이 소모됩니다.
DNS resolution이 적용되었습니다. 이제 VPC Peering을 사용할 준비를 마쳤습니다.
Requester-ec2 에서 Accepter-ec2로 ssh를 통해 접속해보았습니다. 잘 Peering Connection을 통해 잘 접속되는 것을 보실 수 있습니다.
반대로 Accepter-ec2에서 Requester-ec2로 접속해보았습니다. 역시 Peering Connection을 통해 잘 접속되는 것을 보실 수 있습니다.
이처럼 VPC Peering을 사용하면 인터넷 연결(Public IP)없이도 서로 다른 VPC 끼리 안전하게 데이터를 주고 받을 수 있습니다. 물론 사용하기 위해서는 라우팅 테이블 뿐만 아니라 NACL이나 Security Group 같은 방화벽 단에서도 상대방의 VPC 대역을 허용해 줘야 합니다.
'AWS' 카테고리의 다른 글
[AWS] VGW와 CGW를 사용하여 Site-to-Site VPN 구성하기 (0) | 2022.05.13 |
---|---|
[AWS] Transit Gateway란 (1) | 2022.05.12 |
[AWS] AWS Fargate for ECS 시작하기 (0) | 2022.02.24 |
[AWS] AWS ECS란 (0) | 2022.02.23 |
[AWS] API Gateway란 (0) | 2022.02.21 |