如何解决 AWS CloudFormation 中的“VpcPeeringConnection 无法稳定”错误?

2 分钟阅读
0

当我尝试在接受方 VPC 和请求方 VPC 之间创建 Amazon Virtual Private Cloud (Amazon VPC) 对等连接时,AWS CloudFormation 中出现“VpcPeeringConnection 无法稳定”错误。

简短描述

由于以下原因,您可能会收到此错误:

  • 您的 AWS::EC2::VPCPeeringConnection 资源是在接受方账户中创建的。
  • IPv4 CIDR 范围重叠。
  • 当您在不同账户中的 VPC 之间创建 VPC 对等连接时,PeerRoleArn 属性未正确传递。
  • 接受方账户中的 AWS Identity and Access Management (IAM) 角色没有正确的权限。
  • 当您在不同 AWS 区域的 VPC 之间创建 VPC 对等连接时,PeerRegion 属性未正确传递。

解决方法

如果您的 AWS::EC2::VPCPeeringConnection 资源是在接受方账户中创建的

使用请求方账户(而不是接受方账户)中的 AWS::EC2::VPCPeeringConnection 资源创建您的 AWS CloudFormation 堆栈。

如果 IPv4 CIDR 范围重叠

对您的接受方账户和请求方账户中的 VPC 使用不同的 IPv4 CIDR 块。

如果在不同账户中的 VPC 之间创建 VPC 对等连接时未正确传递 PeerRoleArn 属性

如果要在不同账户中的 VPC 之间创建 VPC 对等连接,请使用 PeerRoleArn 属性在 AWS CloudFormation 模板中从您的接受方账户传递您的跨账户 IAM 角色。有关详细信息,请参阅 AWS::EC2::VPCPeeringConnection。请参阅以下 JSON 和 YAML 示例:

JSON:

{
    "myVPCPeeringConnection": {
        "Type": "AWS::EC2::VPCPeeringConnection",
        "Properties": {
            ......
            "PeerRoleArn": "arn:aws:iam::Accepter-Account-ID:role/PeerRole"
        }
    }
}

YAML:

myVPCPeeringConnection:
  Type: 'AWS::EC2::VPCPeeringConnection'
  Properties:
    .......
    PeerRoleArn: 'arn:aws:iam::Accepter-Account-ID:role/PeerRole'

如果接受方账户中的 IAM 角色没有正确的权限

要允许 IAM 角色在接受方账户中接受 VPC 对等连接,请包含以下权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "ec2:AcceptVpcPeeringConnection",
            "Resource": "arn:${Partition}:ec2:${Region}:${Account}:vpc-peering-connection/${VpcPeeringConnectionId}",
            "Effect": "Allow"
        }
    ]
}

要允许请求方账户代入 IAM 角色,请为 IAM 角色配置信任关系。例如:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::Requester-Account-ID:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

如果您在不同 AWS 区域的 VPC 之间创建 VPC 对等连接时 PeerRegion 属性未正确传递

如果 VPC 位于不同的 AWS 区域,则必须在 AWS CloudFormation 模板中包含 PeerRegion。然后,指定您的接受方账户 VPC 所在的 AWS 区域。请参阅以下 JSON 和 YAML 示例:

JSON:

{
    "myVPCPeeringConnection": {
        "Type": "AWS::EC2::VPCPeeringConnection",
        "Properties": {
            ......
            "PeerRegion": Accepter-VPC-Region-Code
        }
    }
}

YAML:

myVPCPeeringConnection:
  Type: 'AWS::EC2::VPCPeeringConnection'
  Properties:
    ......
    PeerRegion: Accepter-VPC-Region-Code

相关信息

演练: 与另一个 AWS 账户中的 Amazon VPC 建立对等关系

创建 VPC 对等连接

AWS 官方
AWS 官方已更新 4 年前