【问题标题】:Using cloudformation, I want to give default security group and SSH security group as the security group of the instance使用cloudformation,我想给默认安全组和SSH安全组作为实例的安全组
【发布时间】:2022-01-22 00:49:49
【问题描述】:

我正在使用 cloudformation 来构建基础架构。

我想给默认安全组和SSH安全组作为实例的安全组。

有 Network.yaml、Security.yaml、Application.yaml 文件。

这是 Network.yaml 的一部分。

SampleVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: sample-vpc

这是 Security.yaml 的一部分。

Resources:
 BastionSecurityGroup:
  Type: AWS::EC2::SecurityGroup
  Properties:
   GroupName: sample-sg-bastion
   GroupDescription: for bastion
   VpcId: !ImportValue vpc-id
   SecurityGroupIngress:
   - CidrIp: 10.10.10.10/32
     FromPort: 22
     IpProtocol: tcp
     ToPort: 22
   Tags:
    - Key: Name
      Value: sample-sg-bastion
Outputs:
  BastionSecurityGroup:
    Description: The Security Group for bastion instance
    Value: !Ref BastionSecurityGroup
    Export:
      Name: Bastion-sg-id

这是 Application.yaml 的一部分。

Resources:
  BastionEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      KeyName: !Ref KeyName
      #DisableApiTermination: 
      ImageId: !FindInMap [AWSRegionAMI, !Ref 'AWS::Region', HVM64]
      InstanceType: t2.micro
      #Monitoring: true|false
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          SubnetId: !ImportValue pubsubnet-01a-id
          DeviceIndex: 0
          GroupSet:
           - !ImportValue Bastion-sg-id
           - ###I want to set DefaultSecurityGroup###
      UserData: !Base64 |
        #!/bin/bash -ex
        # put your script here
      Tags:
        - Key: Name
          Value: sample-ec2-bastion

如果我想将默认安全组附加到实例,我应该怎么做?

##########修改#############

效果很好!!感谢艾伦的支持。

我将此代码添加到 Network.yaml。

DefaultNetworkSG:
    Value:
     !GetAtt SampleVPC.DefaultSecurityGroup
    Export:
      Name: default-sg-id

我将此代码添加到 Application.yaml。

  NetworkInterfaces:
    - AssociatePublicIpAddress: true
      SubnetId: !ImportValue pubsubnet-01a-id
      DeviceIndex: 0
      GroupSet:
       - !ImportValue Bastion-sg-id
       - !ImportValue default-sg-id

【问题讨论】:

  • 谢谢。但是我已经写了输出部分。
  • 你指的是VPC的默认安全组吗? @Yan 我已经更新了答案以引用网络的默认 SG。

标签: amazon-web-services amazon-ec2 amazon-cloudformation amazon-vpc


【解决方案1】:

您只需在EC2定义的附加SG列表中添加安全组的ID,您可以通过从security.yaml导出安全组的ID并从application.yaml导入它来做到这一点

Network.yaml

  SampleVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: sample-vpc
Outputs:
  DefaultNetworkSG:
    Value:
     !GetAtt SampleVPC.DefaultSecurityGroup
  

Security.yaml

Outputs:
  BastionSecurityGroupID:
    Value:
      Ref: BastionSecurityGroup

Application.yaml

  BastionEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      SecurityGroupIds:
      - !ImportValue: BastionSecurityGroupID
      - !ImportValue: DefaultNetworkSG

【讨论】:

  • 非常有帮助!!它适用于您的代码。谢谢你。当我使用 cloudformation 时,我想我想用架构进行设计。如果可能的话,我想在 Security.yaml 而不是 Network.yaml 中控制 DefaultSecurityGroup。如果你愿意,你有什么好主意吗?
  • 它的工作原理是任何 CloudFormation 资源都在配置后导出了一组值。如果 VPC 是在 Network.yaml 中配置的,那么它就不可能存在于 Security.Yaml 中,因为它是 Network.yaml 中 VPC 的默认和有界成员
  • 感谢您告诉我它是如何工作的。我可以理解 Cloudformation 中 VPC 的成员(子网、DefaultSecurityGroup 等)。
猜你喜欢
  • 2017-08-15
  • 2016-10-31
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 2021-04-18
  • 2023-03-12
  • 2014-03-09
相关资源
最近更新 更多