如何添加引用另一个安全组的 cloudformation 安全组入口规则?

How do I add a cloudformation security group ingress rule that refers to another security group?

我在 yaml 模板中有以下安全组。我想让 "SecurityGroupApplication" 安全组允许来自 "SecurityGroupBastion" 的传入连接。但是,aws 客户端的验证模板功能告诉我无用的信息,例如 "unsupported structure"。好的,但是结构有什么问题?想法?

Resources:
  SecurityGroupBastion:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Bastion security group
      SecurityGroupIngress:
        - CidrIp: 0.0.0.0/0
          IpProtocol: tcp
          FromPort: 22
          ToPort: 22
      VpcId: !Ref vpcId
  SecurityGroupApplication:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Application security group
      SecurityGroupIngress:
        - SourceSecurityGroupId: !Ref SecurityGroupBastion
          IpProtocol: tcp

如果您希望 SecurityGroupApplication 成为一个安全组,那么您应该使用 Type: AWS::EC2::SecurityGroup 而不是 Type: AWS::EC2::SecurityGroupIngress。这可能是您看到的 "unsupported structure" 错误的原因。

你的模板非常适合我,除了我必须为应用程序安全组指定端口:

Resources:
  SecurityGroupBastion:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Bastion security group
      SecurityGroupIngress:
        - CidrIp: 0.0.0.0/0
          IpProtocol: tcp
          FromPort: 22
          ToPort: 22
      VpcId: vpc-abcd1234
  SecurityGroupApplication:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Application security group
      SecurityGroupIngress:
        - SourceSecurityGroupId: !Ref SecurityGroupBastion
          IpProtocol: tcp
          FromPort: 22
          ToPort: 22

只是如果有人陷入这个老问题,现在,有一种方法可以在 cloudformation 中引用跨账户 SG,所以如果你想添加一个指向另一个 AWS 账户的 SG 入口规则,只需添加密钥 SourceSecurityGroupOwnerIdaccount ID.

AWSTemplateFormatVersion: 2010-09-09
Resources:
  TargetSG:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      VpcId: vpc-1a2b3c4d
      GroupDescription: Security group allowing ingress for security scanners
  InboundRule:
    Type: 'AWS::EC2::SecurityGroupIngress'
    Properties:
      GroupId: !GetAtt TargetSG.GroupId
      IpProtocol: tcp
      FromPort: 80
      ToPort: 80
      SourceSecurityGroupId: sg-12345678 # SG in the other AWS account
      SourceSecurityGroupOwnerId: '123456789012' # Account ID