【问题标题】:CloudFormation - Security Group VPC issueCloudFormation - 安全组 VPC 问题
【发布时间】:2016-05-12 23:38:00
【问题描述】:

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

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

如果我从我的安全组中删除 VpcId 属性,它会在我的默认 VPC 中创建它,并且堆栈创建工作。我不明白为什么这可能是因为安全组在指定的入口规则中与 ELB 有关系 -

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

我无法在 ELB 上明确声明 VPC ID,因为它没有此类属性,只有子网或 AZ。

【问题讨论】:

  • 嗨,John,您能多分享一些您的 CF 模板吗?特别是您的 ELB 和您遇到问题的安全组......我在这里有一个工作配置,所以我很乐意提供帮助
  • 我不明白您为什么在 ELB 安全组中使用 SourceSecurityGroupOwnerId 而不是 SourceSecurityGroupIdRef。您是否尝试删除此 IpProtocol 属性并保留 VpcId
  • 我在尝试允许来自不同 VPC 中的安全组的入口时收到此错误 - 对等 VPC 的解决方案:docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…

标签: amazon-web-services amazon-cloudformation


【解决方案1】:

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

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

如果您想在这些安全组的入口和出口规则中交叉引用两个安全组,请使用 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"
      ]
    }
  },

【讨论】:

    猜你喜欢
    • 2015-08-01
    • 2021-01-14
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2021-04-18
    相关资源
    最近更新 更多