Você pode emparelhar com uma nuvem privada virtual (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 da VPC, você precisa autorizar duas Contas da AWS separadas dentro de uma única pilha do CloudFormation.
Consulte mais informações sobre o emparelhamento de VPCs e suas limitações no Guia de emparelhamento da Amazon VPC.
Pré-requisitos
-
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).
-
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. Para obter mais informações sobre como um administrador do IAM concede aos usuários permissões para assumir o perfil entre contas, consulte Conceder permissões a um usuário para alternar perfis no Guia do usuário do IAM.
Etapa 1: Criar uma VPC e uma função de conta cruzada
Nesta etapa, você criará a VPC e a função na conta de aceitação.
Para criar uma VPC e um perfil de acesso entre contas
Faça login no AWS Management Console e abra o console AWS CloudFormation em https://console.aws.amazon.com/cloudformation
. -
Na página Pilhas, escolha Criar pilha no canto superior direito e depois Com novos recursos (padrão).
-
Em Pré-requisito: preparar modelo, escolha Escolher um modelo existente e depois Carregar um arquivo de modelo, Escolher arquivo.
-
Abra um editor de texto na máquina local e adicione um dos modelos a seguir. Salve o arquivo e volte ao console para selecioná-lo como o arquivo de modelo.
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
-
Escolha Próximo.
-
Dê um nome à pilha (por exemplo,
VPC-owner
) e insira o ID da Conta da AWS; da conta solicitante no campo PeerRequesterAccountId. -
Aceite os padrões e escolha Próximo.
-
Escolha Reconheço que o AWS CloudFormation pode criar recursos do IAM e escolha 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 inclua o recurso AWS::EC2::VPCPeeringConnection
-
Volte para a página inicial do console do AWS CloudFormation.
-
Na página Pilhas, escolha Criar pilha no canto superior direito e depois Com novos recursos (padrão).
-
Em Pré-requisito: preparar modelo, escolha Escolher um modelo existente e depois Carregar um arquivo de modelo, Escolher arquivo.
-
Abra um editor de texto na máquina local e adicione um dos modelos a seguir. Salve o arquivo e volte ao console para selecioná-lo como o arquivo de modelo.
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
-
Escolha Próximo.
-
Dê um nome à pilha (por exemplo,
VPC-peering-connection
). -
Aceite os padrões e escolha Próximo.
-
Escolha Reconheço que o AWS CloudFormation pode criar recursos do IAM e escolha 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":{
"Type":"AWS::IAM::Role",
"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"
}
]
}
},
"vpc":{
"Type":"AWS::EC2::VPC",
"Properties":{
"CidrBlock":"10.1.0.0/16",
"EnableDnsHostnames":false,
"EnableDnsSupport":false,
"InstanceTenancy":"default"
}
}
},
"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:
Type: AWS::IAM::Role
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
vpc:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.1.0.0/16
EnableDnsHostnames: false
EnableDnsSupport: false
InstanceTenancy: default
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.
Para obter mais informações, consulte Identity and Access Management para emparelhamento de VPC no Guia de emparelhamento de Amazon VPC.