메뉴

문서정보

목차

VPC Peering

AWS 상에서 서비스를 구성하다보면, 여러 개의 VPC로 나뉘는 경우가 있다. 그러다 보면 같은 계정의 같은 리전에 있는 다른 VPC 혹은 다른 리전에 있는 VPC와 통신해야 하는 경우가 생긴다. 아예 다른 계정의 VPC와 통신을 해야 할 수도 있다. IGW(인터넷게이트웨이)를 통해서 통신을 할 수 있겠으나 인터넷에 자원이 노출된다는 단점이 있다.

통신해야 할 자원이 프라이빗 서브넷(Private subnet)에 있다면, 통신하기가 더 힘들어진다. VPN을 사용하는 방법도 있기는 하지만 번거로울 뿐더러 추가적인 비용이 들어간다.

AWS VPC Peering를 이용하면 퍼블릭네트워크나 VPN을 이용하지 않고 VPC끼리 직접 트래픽을 라우팅 할 수 있다. 예컨데 아래와 같은 구성이 가능하다.

 VPC Peering

데이터베이스를 이용하는 인터넷 애플리케이션이다. 데이터베이스의 경우 프라이빗 서브넷에 구성을 해야 할테고, 하나의 VPC에 데이터베이스만을 위한 프라이빗 서브넷을 구성할 수 있을 것이다.

반면, 데이터베이스를 전개할 VPC를 아예 분리해버리는 방법도 있다. 요즘에 내가 사용하는 방법이다. 이렇게 하면 데이터베이스를 위한 독립된 (보안을 포함한)인프라 정책을 수립할 수 있다.

다른 조직에서 데이터베이스에 접근해야 할 경우 아래와 같이 구성 할 수도 있다.

 VPC Peering 구성 중앙 집중

MySQL 데이터베이스를 위한 별도의 DB VPC를 구성했다. DB VPC는 프라이빗 서브넷으로만 구성해서, 인터넷으로 부터 완전히 격리된다. 애플리케이션과는 vpc peering으로 연결해서 사용하게 한다.

그리고 데이터분석 팀에서 BI(Business Intelligence) 솔류션 개발을 위해서 MySQL 데이터베이스에 접근해야 겠다는 요구사항이 전달된다. 데이터분석팀은 자신들을 위한 별도의 VPC를 이미가지고 있다. vpc peering으로 두개를 연결하면, 네트워크 구성변경없이 라우팅 설정만하는 것으로 MySQL에 접근 할 수 있다.

VPC Peering 시나리오

ClassicLink를 사용해서 VPC에 연결된 EC2-Classic 인스턴스가 있다고 가정해보자. VPC 피어링을 이용해서 이 VPC에 연결해서 EC2-Classic 인스턴스에 접근 할 수 있다. 이렇게 하면, ClassicLink의 Private IP를 이용해서 EC2-Classic 인스턴스와 통신 할 수 있다.

 EC2-Classic ClassicLink와 VPC Peering 연결

VPC Peering 테스트

테스트 환경

지금 10.20.0.0/16, 10.1.0.0/16 두 개의 VPC를 가지고 있다. 각 VPC에는 EC2 인스턴스가 있다. 이들 인스턴스를 VPC Peering를 통해서 연결하려 한다. 테스트 환경은 아래와 같다.

동일한 계정의 같은 리전에 있는 VPC 끼리 테스트를 진행한다.

 VPC peering 테스트를 위한 VPC 구성

2개의 VPC를 만들고 EC2 인스턴스를 실행했다. EC2 인스턴스의 정보는 아래와 같다. VPC의 라우팅 테이블은 아래와 같다.

VPC-A의 Subnet
Destination Target
10.1.0.0/16 local
0.0.0.0/0 igw-xxxxx
VPC-B의 Subnet
Destination Target
10.2.0.0/16 local
0.0.0.0/0 igw-xxxxx

VPC Peering 연결 수명 주기

VPC Peering는 요청자(Requester)와 수락자(Accepter)가 참여한다.
요청자가 수락자에게 VPC 요청을 보내고, 수락자가 허가하면 연결이 마무리된다. 연결요청과 수락에 사용하는 키는 VPC ARN이다.

연결의 요청에서 부터 연결삭제까지의 수명주기는 아래와 같다.

 VPC Peering 수명 주기

VPC Peering 요청 보내기

AWS 웹 콘솔에서 VPC Peering 요청을 보낼 수 있다. VPC-A(10.1.0.0/16)에서 VPC-B(10.2.0.0/16)으로 VPC peering 연결 요청을 전송하기로 했다.

 Create Peering Connection

 Create Peering Connection

VPC Dashboard > Peering Connections 에서 Create Peering Connection를 선택한다.

 VPC Peering 설정

 VPC Peering 설정
위 내용을 기입하고 Create Peering Connection을 클릭하면 Peering 연결 요청이 만들어진다.

 VPC Peering 상태

 VPC Peering 상태

Pending Acceptance인 것을 확인 할 수 있다. aws cli 툴로 자세히 살표보자
# aws ec2 describe-vpc-peering-connections
{
    "VpcPeeringConnections": [
        {
            "AccepterVpcInfo": {
                "OwnerId": "522373083963",
                "VpcId": "vpc-07d753c8aa4f6f51a",
                "Region": "ap-northeast-1"
            },
            "ExpirationTime": "2019-06-22T08:55:29.000Z",
            "RequesterVpcInfo": {
                "CidrBlock": "10.1.0.0/16",
                "CidrBlockSet": [
                    {
                        "CidrBlock": "10.1.0.0/16"
                    }
                ],
                "OwnerId": "522373083963",
                "PeeringOptions": {
                    "AllowDnsResolutionFromRemoteVpc": false,
                    "AllowEgressFromLocalClassicLinkToRemoteVpc": false,
                    "AllowEgressFromLocalVpcToRemoteClassicLink": false
                },
                "VpcId": "vpc-0612ac63",
                "Region": "ap-northeast-1"
            },
            "Status": {
                "Code": "pending-acceptance",
                "Message": "Pending Acceptance by 522373083963"
            },
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "joinc-test"
                }
            ],
            "VpcPeeringConnectionId": "pcx-01bfaf57ab86dad52"
        }
    ]
}

 Accept Request

 Accept Request

Accept Request를 수행하면, VPC peering 연결이 만들어진다.

라우팅 설정

Vpc peering 연결이 만들어졌다. 이제 라우팅 테이블을 수정해서, Vpc peering connection(pcx-01bfaf57ab86dad52)으로 트래픽이 흐르도록 해야 한다.

VPC-A의 라우팅 테이블을 아래와 같이 수정한다.
Destination Target
10.1.0.0/16 local
0.0.0.0/0 igw-xxxxx
10.2.0.0/16 pcx-01bfaf57ab86dad52
VPC-B(10.2.0.0/16)로 향하는 패킷은 vpc peering 연결로 흐르도록한다.

VPC-B의 라우팅 테이블을 아래와 같이 수정한다.
Destination Target
10.2.0.0/16 local
0.0.0.0/0 igw-xxxxx
10.1.0.0/16 pcx-01bfaf57ab86dad52
VPC-A(10.1.0.0/16)로 향하는 패킷은 vpc peering 연결로 흐르도록한다.

연결 테스트

VPC-A와 VPC-B에 있는 EC2 인스턴스에서 연결 테스트를 했다.

 연결 테스트

 연결 테스트

사설 IP로 연결되는게 확인되면 성공이다. 만약 연결이 안된다면 security group을 확인해보자.

VPC Peering 제약

일치하거나 중첩되는 IPv4 CIDR 블록에 대해서는 VPC peering 연결을 만들 수 없다.

 중첩 CIDR

VPC에 여러 개의 IPv5 CIDR 블럭이 있는 경우, 중첩되는 CIDR 블록이 있으면 VPC peering를 만들 수 없다.

 중첩 Subnet CIDR

IPv6를 통한 리전간 VPC peering는 지원하지 않는다.

 IPv6 지원하지 않는다.

전이적 피어링은 지원하지 않는다.

 전이적 피어링

VPC Peering의 기타 특징 정리

참고하면 좋을 것들