與另一個VPC同行 AWS 帳戶 - AWS CloudFormation

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

與另一個VPC同行 AWS 帳戶

您可以使 AWS 帳戶 用 AWS::EC2::VPCPeeringConnection. VPC 這會在兩者之間建立一個網路連線VPCs,讓您在它們之間路由流量,以便它們可以像在同一個網路中一樣進行通訊。VPC對等連接有助於促進數據訪問和數據傳輸。

要建立VPC對等連接,您需要在單個 CloudFormation 堆棧 AWS 帳戶 中授權兩個單獨的連接。

如需對等VPC互連及其限制的詳細資訊,請參閱 Amazon VPC 對等互連指南。

必要條件

  1. 對等VPC連線需要對等 AWS 帳戶 ID、對等 ID 和跨帳戶存取角色

    注意

    本演練涉及兩個帳戶:第一個是允許跨帳戶對等的帳戶 (「接受者帳戶」)。第二個是請求對等連線的帳戶 (「請求者帳戶」)。

  2. 若要接受VPC對等連線,您必須確定跨帳戶存取角色。資源的行為方式與同一VPC帳號中的對等連線資源相同。如需IAM系統管理員如何授與擔任跨帳戶角色之權限的詳細資訊,請參閱授與使用者切換角色的權限IAM使用者指南

步驟 1:建立VPC跨帳戶角色

建立VPC和跨帳戶存取角色 (範例)

在此步驟中,您將在接受者帳戶中建立VPC和角色。

  1. 在中 AWS Management Console,選擇AWS CloudFormation

  2. 選擇建立堆疊

  3. 您有多種選擇。若要使用 AWS CloudFormation 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. 接受預設值,然後選擇 Next (下一步)

  8. 選擇 [我確認 AWS CloudFormation 可能會建立IAM資源],然後選擇 [建立堆疊]。

步驟 2:建立包含 AWS::EC2::VPCPeeringConnection 的範本

現在,您已經創建了VPC和跨帳戶角色,您可以與VPC使用另一個 AWS 帳戶 (請求者帳戶)進行對等。

若要建立包含AWS::EC2: VPCPeeringConnection 資源的範本 (範例)

  1. 返回 AWS CloudFormation 主控台首頁。

  2. 選擇建立堆疊

  3. 選擇在 Designer 中建立範本,以使用 AWS CloudFormation 設計工具建立新的空白範本。

    如果您要在其他文字編輯器中建立範本,請依需要選擇範本已就緒,然後選擇 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. 接受預設值,然後選擇 Next (下一步)

  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 中相同的請求者範本。