연습: 다른 AWS 계정의 VPC와 피어링 - AWS CloudFormation

연습: 다른 AWS 계정의 VPC와 피어링

AWS::EC2::VPCPeeringConnection을 사용하여 다른 AWS 계정의 Virtual Private Cloud(VPC)와 피어링할 수 있습니다. 이렇게 하면 두 VPC 간에 네트워킹 연결이 생성되어 두 VPC 간에 트래픽을 라우팅할 수 있습니다. 따라서 두 VPC가 마치 동일한 네트워크 내에 있는 것처럼 통신할 수 있습니다. VPC 피어링 연결을 사용하면 데이터 액세스 및 데이터 전송을 원활하게 실행할 수 있습니다.

VPC 피어링 연결을 설정하려면 단일 AWS CloudFormation 스택 내에서 개별 AWS 계정 2개를 승인해야 합니다.

VPC 피어링 및 제한에 대한 자세한 내용을 알아보려면 Amazon VPC 피어링 설명서VPC 피어링이란?을 참조하세요.

필수 조건

  1. 피어링 연결에는 피어 VPC ID, 피어 AWS 계정 ID 및 크로스 계정 액세스 역할이 필요합니다.

    참고

    이 연습에서는 두 가지 계정을 참조합니다. 첫 번째는 교차 계정 피어링을 허용하는 계정이고(수락자 계정), 두 번째는 피어링 연결을 요청하는 계정입니다(요청자 계정).

  2. VPC 피어링 연결을 수락하려면 교차 계정 액세스 역할을 맡을 수 있어야 합니다. 이 리소스는 동일한 계정의 VPC 피어링 연결 리소스와 동일한 방식으로 동작합니다.

1단계: VPC 및 교차 계정 역할 생성

VPC 및 교차 계정 액세스 역할 생성(예제)

이 단계에서는 수락자 계정에서 VPC 및 역할을 생성합니다.

  1. AWS Management Console에서 AWS CloudFormation을 선택합니다.

  2. 스택 생성을 선택합니다.

  3. 여러 가지 옵션이 있습니다. AWS CloudFormation Designer를 사용하여 비어 있는 새 템플릿을 생성하려면 Create template in Designer(Designer에서 템플릿 생성)를 선택합니다.

    다른 텍스트 편집기에서 템플릿을 생성하는 경우 템플릿 준비가 완료되었습니다를 선택한 후 필요에 따라 Amazon S3 URL 또는 템플릿 파일 업로드를 선택합니다.

  4. 다음 예제 템플릿을 사용해 VPC 및 교차 계정 역할을 생성해 다른 계정에서 피어링이 가능하도록 허용합니다.

    예 JSON
    { "AWSTemplateFormatVersion": "2010-09-09", "Description": "Create a VPC and an assumable role for cross account VPC peering.", "Parameters": { "PeerRequesterAccountId": { "Type": "String" } }, "Resources": { "vpc": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": "10.1.0.0/16", "EnableDnsSupport": false, "EnableDnsHostnames": false, "InstanceTenancy": "default" } }, "peerRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Principal": { "AWS": { "Ref": "PeerRequesterAccountId" } }, "Action": [ "sts:AssumeRole" ], "Effect": "Allow" } ] }, "Path": "/", "Policies": [ { "PolicyName": "root", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:AcceptVpcPeeringConnection", "Resource": "*" } ] } } ] } } }, "Outputs": { "VPCId": { "Value": { "Ref": "vpc" } }, "RoleARN": { "Value": { "Fn::GetAtt": [ "peerRole", "Arn" ] } } } }
    예 YAML
    AWSTemplateFormatVersion: 2010-09-09 Description: Create a VPC and an assumable role for cross account VPC peering. Parameters: PeerRequesterAccountId: Type: String Resources: vpc: Type: 'AWS::EC2::VPC' Properties: CidrBlock: 10.1.0.0/16 EnableDnsSupport: false EnableDnsHostnames: false InstanceTenancy: default peerRole: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Statement: - Principal: AWS: !Ref PeerRequesterAccountId Action: - 'sts:AssumeRole' Effect: Allow Path: / Policies: - PolicyName: root PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: 'ec2:AcceptVpcPeeringConnection' Resource: '*' Outputs: VPCId: Value: !Ref vpc RoleARN: Value: !GetAtt - peerRole - Arn
  5. 다음을 선택합니다.

  6. 스택에 이름(예: VPC-owner)을 지정한 다음 PeerRequesterAccountId 필드에 요청자 계정의 AWS 계정 ID를 입력합니다.

  7. 기본값을 수락하고 다음을 선택합니다.

  8. AWS CloudFormation에서 IAM 리소스를 생성할 수 있음을 승인합니다.를 선택한 다음 스택 생성을 선택합니다.

2단계: AWS::EC2::VPCPeeringConnection을 포함하는 템플릿 생성

이제 VPC 및 크로스 계정 역할을 생성했으므로 다른 AWS 계정(요청자 계정)을 사용하여 VPC와 피어링할 수 있습니다.

AWS::EC2::VPCPeeringConnection 리소스가 포함된 템플릿을 생성하려면(예제)

  1. AWS CloudFormation 콘솔 홈페이지로 되돌아 갑니다.

  2. 스택 생성을 선택합니다.

  3. AWS CloudFormation Designer를 사용하여 비어 있는 새 템플릿을 생성하려면 Create template in Designer(Designer에서 템플릿 생성)을 선택합니다.

    다른 텍스트 편집기에서 템플릿을 생성하는 경우 템플릿 준비가 완료되었습니다를 선택한 후 필요에 따라 Amazon S3 URL 또는 템플릿 파일 업로드를 선택합니다.

  4. 1단계에서 생성한 피어 역할을 사용하여 다음 예제 템플릿에 따라 VPC와 VPC 피어링 연결을 생성합니다.

    예 JSON
    { "AWSTemplateFormatVersion": "2010-09-09", "Description": "Create a VPC and a VPC Peering connection using the PeerRole to accept.", "Parameters": { "PeerVPCAccountId": { "Type": "String" }, "PeerVPCId": { "Type": "String" }, "PeerRoleArn": { "Type": "String" } }, "Resources": { "vpc": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": "10.2.0.0/16", "EnableDnsSupport": false, "EnableDnsHostnames": false, "InstanceTenancy": "default" } }, "vpcPeeringConnection": { "Type": "AWS::EC2::VPCPeeringConnection", "Properties": { "VpcId": { "Ref": "vpc" }, "PeerVpcId": { "Ref": "PeerVPCId" }, "PeerOwnerId": { "Ref": "PeerVPCAccountId" }, "PeerRoleArn": { "Ref": "PeerRoleArn" } } } }, "Outputs": { "VPCId": { "Value": { "Ref": "vpc" } }, "VPCPeeringConnectionId": { "Value": { "Ref": "vpcPeeringConnection" } } } }
    예 YAML
    AWSTemplateFormatVersion: 2010-09-09 Description: Create a VPC and a VPC Peering connection using the PeerRole to accept. Parameters: PeerVPCAccountId: Type: String PeerVPCId: Type: String PeerRoleArn: Type: String Resources: vpc: Type: 'AWS::EC2::VPC' Properties: CidrBlock: 10.2.0.0/16 EnableDnsSupport: false EnableDnsHostnames: false InstanceTenancy: default vpcPeeringConnection: Type: 'AWS::EC2::VPCPeeringConnection' Properties: VpcId: !Ref vpc PeerVpcId: !Ref PeerVPCId PeerOwnerId: !Ref PeerVPCAccountId PeerRoleArn: !Ref PeerRoleArn Outputs: VPCId: Value: !Ref vpc VPCPeeringConnectionId: Value: !Ref vpcPeeringConnection
  5. 다음을 선택합니다.

  6. 스택에 이름을 제공합니다(예: VPC-peering-connection).

  7. 기본값을 수락하고 다음을 선택합니다.

  8. AWS CloudFormation에서 IAM 리소스를 생성할 수 있음을 승인합니다.를 선택한 다음 스택 생성을 선택합니다.

아주 제한적인 정책으로 템플릿 생성

VPC를 다른 AWS 계정과 피어링하는 데 아주 제한적인 정책을 생성하고자 할 수 있습니다.

다음 예제 템플릿은 더욱 제한적이 되도록 VPC 피어 소유자 템플릿(위의 1단계에서 생성한 수락자 계정)을 변경하는 방법을 보여줍니다.

예 JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Create a VPC and an assumable role for cross account VPC peering.", "Parameters": { "PeerRequesterAccountId": { "Type": "String" } }, "Resources": { "peerRole": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": [ "sts:AssumeRole" ], "Effect": "Allow", "Principal": { "AWS": { "Ref": "PeerRequesterAccountId" } } } ] }, "Path": "/", "Policies": [ { "PolicyDocument": { "Statement": [ { "Action": "ec2:acceptVpcPeeringConnection", "Effect": "Allow", "Resource": { "Fn::Sub": "arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}" } }, { "Action": "ec2:acceptVpcPeeringConnection", "Condition": { "StringEquals": { "ec2:AccepterVpc": { "Fn::Sub": "arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}" } } }, "Effect": "Allow", "Resource": { "Fn::Sub": "arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc-peering-connection/*" } } ], "Version": "2012-10-17" }, "PolicyName": "root" } ] }, "Type": "AWS::IAM::Role" }, "vpc": { "Properties": { "CidrBlock": "10.1.0.0/16", "EnableDnsHostnames": false, "EnableDnsSupport": false, "InstanceTenancy": "default" }, "Type": "AWS::EC2::VPC" } }, "Outputs": { "RoleARN": { "Value": { "Fn::GetAtt": [ "peerRole", "Arn" ] } }, "VPCId": { "Value": { "Ref": "vpc" } } } }
예 YAML
AWSTemplateFormatVersion: 2010-09-09 Description: Create a VPC and an assumable role for cross account VPC peering. Parameters: PeerRequesterAccountId: Type: String Resources: peerRole: Properties: AssumeRolePolicyDocument: Statement: - Action: - 'sts:AssumeRole' Effect: Allow Principal: AWS: Ref: PeerRequesterAccountId Path: / Policies: - PolicyDocument: Statement: - Action: 'ec2:acceptVpcPeeringConnection' Effect: Allow Resource: 'Fn::Sub': 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}' - Action: 'ec2:acceptVpcPeeringConnection' Condition: StringEquals: 'ec2:AccepterVpc': 'Fn::Sub': 'arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc/${vpc}' Effect: Allow Resource: 'Fn::Sub': >- arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:vpc-peering-connection/* Version: 2012-10-17 PolicyName: root Type: 'AWS::IAM::Role' vpc: Properties: CidrBlock: 10.1.0.0/16 EnableDnsHostnames: false EnableDnsSupport: false InstanceTenancy: default Type: 'AWS::EC2::VPC' Outputs: RoleARN: Value: 'Fn::GetAtt': - peerRole - Arn VPCId: Value: Ref: vpc

VPC에 액세스하려면 위의 2단계와 동일한 요청자 템플릿을 사용할 수 있습니다.