如何解决 CloudFormation 中的“VpcPeeringConnection failed to stabilize”错误?

2 分钟阅读
0

当我尝试创建 Amazon Virtual Private Cloud (Amazon VPC) 对等连接时,AWS CloudFormation 中出现“VpcPeeringConnection failed to stabilize”错误。

简短描述

由于以下原因,您可能会收到“VpcPeeringConnection failed to stabilize”错误:

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

解决方法

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

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

IPv4 CIDR 范围重叠

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

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

如果您在不同账户中的 VPC 之间创建 VPC 对等连接,请使用 PeerRoleArn 属性。此属性从您的 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"
    }
  ]
}

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

如果 VPC 位于不同的区域,则必须在 CloudFormation 模板中包含 PeerRegion。然后,指定您的接受方账户 VPC 所在的区域。

请参阅以下 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 账户中的 VPC 建立对等关系

创建 VPC 对等连接

AWS 官方
AWS 官方已更新 10 个月前