Emparejamiento con una VPC en otra Cuenta de AWS - AWS CloudFormation

Emparejamiento con una VPC en otra Cuenta de AWS

Puede emparejar con una nube privada virtual (VPC) en otra Cuenta de AWS mediante el uso de AWS::EC2::VPCPeeringConnection. Esto crea una conexión de red entre dos VPC que permite dirigir el tráfico entre ellas, para que puedan comunicarse como si estuviesen en la misma red. Una interconexión de VPC puede ayudar a facilitar el acceso a los datos y la transferencia de datos.

Para establecer una conexión de emparejamiento de VPC, tendrá que autorizar dos Cuentas de AWS distintas en una sola pila de CloudFormation.

Para obtener más información sobre el emparejamiento de VPC y sus limitaciones, consulte la Guía de emparejamiento de VPC de Amazon.

Requisitos previos

  1. Necesita un ID de VPC del mismo nivel, un ID de Cuenta de AWS del mismo nivel y un rol de acceso entre cuentas para la conexión de emparejamiento.

    nota

    Este tutorial hace referencia a dos cuentas: en primer lugar una cuenta que permite interconexiones entre cuentas (la cuenta del aceptador). En segundo lugar una cuenta que solicite la interconexión (la cuenta del solicitante).

  2. Para aceptar la interconexión de VPC, la función de acceso entre cuentas debe ser asumible por usted. El recurso se comporta de la misma forma que el recurso de una interconexión de VPC en la misma cuenta. Para obtener más información sobre cómo un administrador de IAM concede permisos para asumir el rol entre cuentas, consulte Conceder permisos de usuario para cambiar de rol en la Guía del usuario de IAM.

Paso 1: Cree una VPC y un rol entre cuentas

Creación de una VPC y rol de acceso entre cuentas (ejemplo)

En este paso, creará la VPC y el rol en la cuenta del aceptador.

  1. En la AWS Management Console, elija AWS CloudFormation.

  2. Seleccione Crear pila.

  3. Dispone de varias opciones para hacerlo. Para utilizar AWS CloudFormation Designer para crear una nueva plantilla en blanco, elija Create template in Designer (Crear plantilla en Designer).

    Si crea la plantilla en otro editor de texto, elija La plantilla está lista y, a continuación, URL de Amazon S3 o Cargar un archivo de plantilla, según corresponda.

  4. Utilice la siguiente plantilla de ejemplo para crear la VPC y el rol entre cuentas que permite otra cuenta para conseguir interconexiones.

    ejemplo 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" ] } } } }
    ejemplo 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. Elija Siguiente.

  6. Asigne a la pila un nombre (por ejemplo, VPC-owner) y luego escriba el ID de la Cuenta de AWS de la cuenta del solicitante en el campo PeerRequesterAccountId.

  7. Acepte los valores predeterminados y, a continuación, elija Next (Siguiente).

  8. Elija Acepto que AWS CloudFormation pueda crear recursos de IAM y, a continuación, elija Crear pila.

Paso 2: creación de una plantilla que incluya AWS::EC2::VPCPeeringConnection

Ahora que ha creado la VPC y un rol entre cuentas, puede interconectar con la VPC a través de otra Cuenta de AWS (la cuenta de solicitante).

Para crear una plantilla que incluya el recurso AWS::EC2::VPCPeeringConnection (ejemplo)

  1. Vuelva a la página de inicio de la consola AWS CloudFormation.

  2. Seleccione Crear pila.

  3. Elija Create template in Designer (Crear plantilla en Designer) para usar AWS CloudFormation Designer al crear una nueva plantilla en blanco.

    Si crea la plantilla en otro editor de texto, elija La plantilla está lista y, a continuación, URL de Amazon S3 o Cargar un archivo de plantilla, según corresponda.

  4. Utilice la siguiente plantilla de ejemplo para crear una VPC y una interconexión de VPC mediante el rol de mismo nivel que ha creado en el paso 1.

    ejemplo 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" } } } }
    ejemplo 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. Elija Siguiente.

  6. Dé un nombre a la pila (por ejemplo, VPC-peering-connection).

  7. Acepte los valores predeterminados y, a continuación, elija Next (Siguiente).

  8. Elija Acepto que AWS CloudFormation pueda crear recursos de IAM y, a continuación, elija Crear pila.

Creación de una plantilla con una política muy restrictiva

Es posible que le interese crear una política muy restrictiva para las interconexiones de la VPC con otra Cuenta de AWS.

El siguiente ejemplo de plantilla muestra cómo cambiar la plantilla de propietario de mismo nivel de VPC (la cuenta del aceptador creada en el paso 1 anterior) para que sea más restrictiva.

ejemplo 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" } } } }
ejemplo 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 acceder a la VPC, puede utilizar la misma plantilla de solicitante como en el paso 2 anterior.