Canvas 1 Layer 1

AWS 멀티 리전 VPC 피어링 기능 추가
2018년 7월부터 서울 리전 지원

멀티 리전 간 VPC 피어링

아마존 웹 서비스에서는 VPCVirtual Private Cloud를 통해 네트워크를 격리하는 기능을 제공하고 있습니다. 사용자는 하나의 계정에서 다수의 VPC를 만들 수 있고 같은 리전 안에서라면 VPC 피어링을 통해 같은 계정이나 다른 계정의 VPC와 연결할 수 있었습니다.* 하지만 리전이 다른 경우 VPC 피어링을 생성할 수 없었습니다. 따라서 퍼블릭 네트워크를 통해서 데이터를 교환하거나 VPN을 직접 구축하는 등 번거로운 작업이 필요했습니다.

* VPC 피어링을 생성하고 VPC 간에 정상적으로 통신이 이루어지면 각 VPC의 CIDR이 충돌해서는 안 됩니다.

2017년 11월 29일 AWS는 re:invent 기간 중에 리전 간 VPC 피어링 지원을 발표합니다. 첫 리전 간 VPC 지원에 포함된 4개의 리전은 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오레곤), EU(아일랜드)입니다. AWS 블로그에서는 리전 간 네트워크에 대해서 다음과 같이 설명합니다.

서로 다른 두 리전의 VPC 간에 전달되는 데이터는 암호화된 형식으로 AWS 글로벌 네트워크를 통해 전송됩니다. 이 데이터는 최신 알고리즘과 AWS에서 제공한 키를 사용하여 AEAD 방식으로 암호화됩니다. 암호화에 사용되는 키는 자동으로 관리되고 순환됩니다. 모든 피어링 연결의 트래픽을 암호화하는 데에도 동일한 키가 사용되므로, 고객에 관계없이 모든 트래픽은 서로 구분되지 않습니다. 이 같은 익명성은 VPC 간 트래픽이 간헐적으로 발생하는 상황에서 보안을 강화해줍니다.

2018년 2월 20일에는 추가적으로 9개 리전의 리전 간 VPC 피어링 지원을 발표합니다. 추가된 리전은 AWS EU(런던), 미국 서부(캘리포니아 북부), EU(파리), 아시아 태평양(뭄바이), 아시아 태평양(시드니), 아시아 태평양(싱가포르), 아시아 태평양(도쿄), 캐나다(중부) 및 남아메리카(상파울루)입니다. 이 때도 서울 리전은 포함되지 않았습니다.

2018년 7월 19일 서울 리전에서도 VPC 피어링을 지원한다고 공지합니다. 이에 따라서 현재는 서울을 포함한 대부분의 리전에서 리전 간 VPC 피어링을 사용할 수 있게 되었습니다.

AWS CLI를 사용해 멀티 리전 간 VPC 피어링 생성

44bits에서는 AWS VPC 피어링:서로 다른 VPC 간에 통신하기에서 VPC 피어링 기능에 대해서 소개한 바 있습니다. 피어링에 대한 기본적인 이해와 사용법이 궁금하시다면 이 글을 참고해주시기 바랍니다. 리전 간 VPC 피어링 기능에 대해서는 AWS 블로그의 AWS 멀티 리전간 VPC 피어링 신규 기능 소개 기사에서 소개하고 있습니다. 여기서는 CLI를 사용해 리전 간 VPC 피어링을 구축하는 방법을 간단히 소개하고자 합니다. AWS CLI 사용방법에 대해서는 AWS 커맨드라인 인터페이스 기초를 참조해주세요.

먼저 각 리전에 VPC를 생성합니다. 명시적으로 명령어 앞에 리전을 붙여두었으며, 출력 결과는 중요한 부분만 남기고 생략하였습니다.

$ AWS_DEFAULT_REGION=ap-northeast-1 aws ec2 create-vpc --cidr-block 10.1.0.0/16
"VpcId": "vpc-00dc6dd8a48620810"

$ AWS_DEFAULT_REGION=ap-northeast-2 aws ec2 create-vpc --cidr-block 10.2.0.0/16
"VpcId": "vpc-0e5019bb52d232b1c"

각 리전의 VPC ID를 확인해둡니다. 같은 계정이므로 피어링 연결이 ap-northeast-1에서 ap-northeast-2 방향이건 그 반대건 큰 상관은 없습니다. 여기서는 ap-northeast-1에서 ap-northeast-2로 피어링 연결을 생성합니다. ap-northeast-1에서 명령어를 실행하며, --peer-region으로 ap-northeast-2를 지정해줍니다.

$ AWS_DEFAULT_REGION=ap-northeast-1 aws ec2 create-vpc-peering-connection \
  --vpc-id vpc-00dc6dd8a48620810 \
  --peer-vpc-id vpc-0e5019bb52d232b1c \
  --peer-region ap-northeast-2
"VpcPeeringConnectionId": "pcx-06230ce416f6fe05a"

VPC 피어링 연결을 요청받은 쪽에서 이를 수락해주어야합니다. ap-northeast-2에서 이 VPC 연결을 수락해줍니다.

$ AWS_DEFAULT_REGION=ap-northeast-2 aws ec2 accept-vpc-peering-connection \
  --vpc-peering-connection-id pcx-06230ce416f6fe05a

마지막으로 VPC 피어링이 정상적으로 작동하고 있는지 describe-vpc-peering-connections 명령어로 확인해봅니다.

$ AWS_DEFAULT_REGION=ap-northeast-1 aws ec2 describe-vpc-peering-connections \
  --filters Name=vpc-peering-connection-id,Values=pcx-06230ce416f6fe05a
{
    "VpcPeeringConnections": [
        {
            "AccepterVpcInfo": {
                "CidrBlock": "10.2.0.0/16",
                "CidrBlockSet": [
                    {
                        "CidrBlock": "10.2.0.0/16"
                    }
                ],
                "OwnerId": "12777216",
                "VpcId": "vpc-0e5019bb52d232b1c",
                "Region": "ap-northeast-2"
            },
            "RequesterVpcInfo": {
                "CidrBlock": "10.1.0.0/16",
                "CidrBlockSet": [
                    {
                        "CidrBlock": "10.1.0.0/16"
                    }
                ],
                "OwnerId": "12666716",
                "VpcId": "vpc-00dc6dd8a48620810",
                "Region": "ap-northeast-1"
            },
            "Status": {
                "Code": "active",
                "Message": "Active"
            },
            "Tags": [],
            "VpcPeeringConnectionId": "pcx-06230ce416f6fe05a"
        }
    ]
}

정상적으로 활성Active 상태인 것을 확인할 수 있습니다. 정말 간단히 서로 다른 리전의 VPC가 연결되었습니다. 🎉

하지만 이 예제에서는 단순히 VPC들을 생성하고 VPC 피어링을 연결했을 뿐입니다. 실제로 사용하기 위해서는 서브셋과 라우트 테이블, 시큐리티 그룹 등 추가적인 설정이 필요합니다. 참고로 같은 리전의 VPC 피어링의 경우 시큐리티 그룹에서 상대 VPC의 시큐리티 그룹을 직접 참조하는 것이 가능하지만, 다른 리전의 VPC 간에는 이 기능을 사용할 수 없습니다.

마지막으로 (더 이상 사용하지 않는다면) 예제를 위해 생성한 VPC와 VPC 피어링을 삭제해줍니다.

$ AWS_DEFAULT_REGION=ap-northeast-1 aws ec2 delete-vpc-peering-connection \
  --vpc-peering-connection-id pcx-06230ce416f6fe05a
$ AWS_DEFAULT_REGION=ap-northeast-1 aws ec2 delete-vpc --vpc-id vpc-00dc6dd8a48620810
$ AWS_DEFAULT_REGION=ap-northeast-2 aws ec2 delete-vpc --vpc-id vpc-0e5019bb52d232b1c