CloudFormation - 安全组 VPC 问题

2024-01-11

我有一个模板,用于创建 ELB 并附加 VPC 内的现有子网。这创建得很好,但是当我更新堆栈并添加一个具有 VpcId 属性的安全组(其值等于我附加的子网所属的现有 VPC ID)时,堆栈失败并出现以下错误:

“您指定了属于不同网络的两个资源”

如果我从安全组中删除 VpcId 属性,它会在我的默认 VPC 中创建该属性,并且堆栈创建工作正常。我无法理解为什么会出现这种情况,因为安全组与指定入口规则中的 ELB 存在关系 -

"IpProtocol": "tcp",
            "FromPort": "8000",
            "ToPort": "8010",
            "SourceSecurityGroupOwnerId": {
              "Fn::GetAtt": [
                "ElasticLoadBalancer",
                "SourceSecurityGroup.OwnerAlias"
              ]
            },

我无法明确说明 ELB 上的 VPC ID,因为它没有此类属性,只有子网或可用区。


谢谢你们的帮助。我发现了问题并解决了问题。

问题是我试图在安全组定义内的安全组入口定义中引用一个安全组。正如文档所说:

如果您想要在这些安全组的入口和出口规则中交叉引用两个安全组,请使用 AWS::EC2::SecurityGroupEgress 和 AWS::EC2::SecurityGroupIngress 资源来定义您的规则。不要使用 AWS::EC2::SecurityGroup 中嵌入的入口和出口规则。如果这样做,则会导致循环依赖,这是 AWS CloudFormation 不允许的。

因此,我指定了两个安全组,然后在单独的资源中指定了 SecurityGroupIngress。必须手动将其输入到模板中,因为左侧菜单中没有该资源的 CloudFormation 图标。我花了一段时间才弄清楚,因为我创建堆栈时生成的错误消息并不明显。

"InstanceIngress": {
  "Type": "AWS::EC2::SecurityGroupIngress",
  "Properties": {
    "GroupId": {
      "Fn::GetAtt": [
        "InstanceSecurityGroup",
        "GroupId"
      ]
    },
    "IpProtocol": "tcp",
    "FromPort": "7997",
    "ToPort": "8100",
    "SourceSecurityGroupId": {
      "Fn::GetAtt": [
        "ELBSecurityGroup",
        "GroupId"
      ]
    }
  },
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CloudFormation - 安全组 VPC 问题 的相关文章

随机推荐