

# Emparelhar com uma VPC em outra Conta da AWS
<a name="peer-with-vpc-in-another-account"></a>

Você pode emparelhar com uma nuvem privada virtual (VPC) em outra Conta da AWS usando [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-vpcpeeringconnection.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-vpcpeeringconnection.html). 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](https://docs.aws.amazon.com/vpc/latest/peering/). 

## Pré-requisitos
<a name="peer-with-vpc-in-another-account-prerequisites"></a>

1. Você precisa de um ID da VPC pareada, um ID de Conta da AWS e uma [função de acesso de conta cruzada](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html) 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*).

1. 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_permissions-to-switch.html) no *Guia do usuário do IAM*.

## Etapa 1: Criar uma VPC e uma função de conta cruzada
<a name="step-1-create-vpc-and-cross-account-role"></a>

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**

1. Faça login no Console de gerenciamento da AWS e abra o console CloudFormation em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Na página **Pilhas**, escolha **Criar pilha** no canto superior direito e depois **Com novos recursos (padrão)**.

1. Em **Pré-requisito: preparar modelo**, escolha **Escolher um modelo existente** e depois **Carregar um arquivo de modelo**, **Escolher arquivo**.

1. 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.  
**Example 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"
           ]
         }
       }
     }
   }
   ```  
**Example 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
   ```

1. Escolha **Próximo**.

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

1. Aceite os padrões e escolha **Próximo**.

1. Escolha **Reconheço que o CloudFormation pode criar recursos do IAM** e escolha **Criar pilha**.

## Etapa 2: Criar um modelo que inclua `AWS::EC2::VPCPeeringConnection`
<a name="step-2-create-template-for-vpc-peering-connection-owner"></a>

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](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-vpcpeeringconnection.html)**

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

1. Na página **Pilhas**, escolha **Criar pilha** no canto superior direito e depois **Com novos recursos (padrão)**.

1. Em **Pré-requisito: preparar modelo**, escolha **Escolher um modelo existente** e depois **Carregar um arquivo de modelo**, **Escolher arquivo**.

1. 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.  
**Example 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"
         }
       }
     }
   }
   ```  
**Example 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
   ```

1. Escolha **Próximo**.

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

1. Aceite os padrões e escolha **Próximo**.

1. Escolha **Reconheço que o CloudFormation pode criar recursos do IAM** e escolha **Criar pilha**.

## Criar um modelo com uma política altamente restritiva
<a name="create-template-with-highly-restrictive-policy"></a>

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.

**Example 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"
      }
    }
  }
}
```

**Example 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 ](https://docs.aws.amazon.com/vpc/latest/peering/security-iam.html) no *Guia de emparelhamento de Amazon VPC*.