Demonstração: Emparelhar com uma VPC em outra Conta da AWS - AWS CloudFormation

Demonstração: Emparelhar com uma VPC em outra Conta da AWS

Você pode parear com uma Virtual Private Cloud (VPC) em outra Conta da AWS usando AWS::EC2::VPCPeeringConnection. Isso cria uma conexão de rede entre duas VPCs que permite rotear o tráfego entre elas, de maneira que elas possam se comunicar como se estivessem na mesma rede. uma conexão de pareamento da VPC pode ajudar a facilitar o acesso e a transferência dos dados.

Para estabelecer uma conexão de emparelhamento de VPCs, você precisa autorizar duas Contas da AWS separadas dentro de uma única pilha do AWS CloudFormation.

Para obter informações sobre o emparelhamento da VPC e as limitações, consulte Visão geral de emparelhamento de VPC no Amazon VPC Peering Guide.

Pré-requisitos

  1. Você precisa de um ID da VPC pareada, um ID de Conta da AWS e uma função de acesso de conta cruzada para a conexão de pareamento.

    nota

    Esta descrição se refere a duas contas: a primeira é uma conta que permite o pareamento de contas cruzadas (a conta de aceitação). A segunda é uma conta que solicita a conexão de pareamento (a conta solicitante).

  2. Para aceitar a conexão de pareamento da VPC, a função de acesso de conta cruzada deve ser assumível por você. O recurso se comporta da mesma maneira que um recurso de conexão de pareamento da VPC na mesma conta.

Etapa 1: Criar uma VPC e uma função de conta cruzada

Criar uma VPC e uma função de acesso de conta cruzada (exemplo)

Nesta etapa, você criará a VPC e a função na conta de aceitação.

  1. No menu AWS Management Console, escolha AWS CloudFormation.

  2. Selecione Criar pilha.

  3. Você tem várias opções. Para usar o AWS CloudFormation Designer com o objetivo de criar um novo modelo em branco, escolha Create template in Designer (Criar modelo no Designer).

    Se estiver criando o modelo em outro editor de texto, escolha Template is ready (O modelo está pronto) e, depois, Amazon S3 URL (URL do Amazon S3) ou Upload a template file (Carregar um arquivo de modelo), conforme adequado.

  4. Use o modelo de exemplo a seguir para criar a VPC e a função de conta cruzada, permitindo que outra conta atinja o pareamento.

    exemplo 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" ] } } } }
    exemplo 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. Escolha Próximo.

  6. Dê um nome à pilha (por exemplo, VPC-owner) e insira o ID da Conta da AWS; da conta solicitante no campo PeerRequesterAccountId.

  7. Aceite os padrões e escolha Próximo.

  8. Escolha I acknowledge that AWS CloudFormation might create IAM resources (Reconheço que o CloudFormation pode criar recursos do IAM) e selecione Create stack (Criar pilha).

Etapa 2: Criar um modelo que inclua AWS::EC2::VPCPeeringConnection

Agora que já criou a VPC e a função de conta cruzada, você pode parear com a VPC usando outra Conta da AWS (a conta solicitante).

Para criar um modelo que inclui o recurso AWS::EC2::VPCPeeringConnection (exemplo)

  1. Volte para a página inicial do console do AWS CloudFormation.

  2. Selecione Criar pilha.

  3. Escolha Create template in Designer (Criar modelo no Designer) para usar o AWS CloudFormation Designer para criar um novo modelo em branco.

    Se estiver criando o modelo em outro editor de texto, escolha Template is ready (O modelo está pronto) e, depois, Amazon S3 URL (URL do Amazon S3) ou Upload a template file (Carregar um arquivo de modelo), conforme adequado.

  4. Use o modelo de exemplo a seguir para criar uma VPC e uma conexão de pareamento da VPC usando a função pareada criada por você na Etapa 1.

    exemplo 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" } } } }
    exemplo 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. Escolha Próximo.

  6. Dê um nome à pilha (por exemplo, VPC-peering-connection).

  7. Aceite os padrões e escolha Próximo.

  8. Escolha I acknowledge that AWS CloudFormation might create IAM resources (Reconheço que o CloudFormation pode criar recursos do IAM) e selecione Create stack (Criar pilha).

Criar um modelo com uma política altamente restritiva

Convém criar uma política de pareamento altamente restritiva para a VPC usando outra Conta da AWS.

O modelo de exemplo a seguir mostra como alterar o modelo do proprietário pareado da VPC (a conta de aceitação criada na Etapa 1 acima), de maneira que ele seja mais restritivo.

exemplo 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" } } } }
exemplo 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

Para acessar o VPC, você pode usar o mesmo modelo solicitante como na Etapa 2 acima.