AWS CloudFormation : VPC 기본 보안 그룹


16

나는 cfn 스택을 가지고 있으며 VPC, 여러 보안 그룹 및 소수의 EC2 인스턴스를 생성합니다. 스택 내에서 생성 된 보안 그룹을 스택으로 생성 된 인스턴스에 할당하는 것은 쉽지 않습니다. 그러나 기본 VPC SG에 관심이 있습니다.

VPC가 생성되면 (GUI를 통해 수동으로, 클라우드 형식 또는 다른 방법으로) AWS는 해당 그룹의 모든 인스턴스에 대해 "모두 허용"규칙을 사용하여 기본 보안 그룹을 생성합니다.

내가하려고하는 것은이 기본 보안 그룹과 다른 여러 SG를 스택에 의해 생성 된 인스턴스에 할당하는 것입니다. 이것은 내가 예상했던 것보다 훨씬 더 어려운 것으로 판명되었습니다. 다음은 내가 진행중인 작업을 보여주는 스 니펫입니다.

"AllowSSHSecGroup":{
      "Type":"AWS::EC2::SecurityGroup",
      "Properties":{
        "GroupDescription":"Allow SSH from anywhere",
        "VpcId":{
          "Ref":"DevVPC"
        },
        "SecurityGroupIngress":[
          {
            "IpProtocol":"tcp",
            "FromPort":"22",
            "ToPort":"22",
            "CidrIp":"0.0.0.0/0"
          }
        ]
      }
},
"Instance001" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "ImageId" : "ami-7eab224e",
        "InstanceType" : "m1.large",
        "AvailabilityZone" : "us-west-2a",
        "PrivateIpAddress" : "10.22.0.110",
        "SecurityGroupIds" : [ {"Ref" : "AllowSSHSecGroup"} ],
        "SubnetId" : { "Ref" : "PublicSubnet" },
        "KeyName" : "erik-key",
        "DisableApiTermination" : "false",
        "Tags" : [ { "Key": "Name", "Value": "Instance001"} ]
      }
}

위의 스 니펫에서 "ssh 허용"보안 그룹을 생성하고이를 인스턴스에 할당합니다. 언급 한 바와 같이, 내 스택은 VPC (이 인스턴스가 시작된)를 생성하여 기본 보안 그룹을 생성합니다. 불행하게도이 그룹은 AWS에 의해 자동으로 생성되므로 그룹 ID를 스택에서 사용할 수 없으므로 ID로 참조 할 수 없습니다. 처음에는 SecurityGroups속성이 옵션 이라고 생각했는데 기본 SG를 이름으로 참조 할 수있게되었습니다 default. SecurityGroups그러나이 속성은 VPC 보안 그룹이 아닌 EC2 보안 그룹 전용 이므로 작동하지 않습니다 .

그래서 나는 붙어 있습니다. 나는 이에 AWS를 지원하는 케이스를 열었지만, 지금까지, 그들은 도움이되지했습니다. 이 작업을 수행하는 방법에 대한 아이디어가 있습니까?

답변:


19

다음을 사용하여 기본 보안 그룹을 참조 할 수 있습니다.

{ "Fn::GetAtt" : ["VPC", "DefaultSecurityGroup"] }

여기서 "VPC"는 VPC 리소스 이름입니다.

AWS::EC2::SecurityGroupIngress하고 AWS::EC2::SecurityGroupEgress,이 기본 보안 그룹의 권한을 확대 할 수 있습니다.

나는 이것이 당신이 원하는 것이라고 생각합니다.

"VPCDefaultSecurityGroupIngress": {
  "Type" : "AWS::EC2::SecurityGroupIngress",
  "Properties" : {
    "GroupId": { "Fn::GetAtt" : ["VPC", "DefaultSecurityGroup"] },
    "IpProtocol":"tcp",
    "FromPort":"22",
    "ToPort":"22",
    "CidrIp":"0.0.0.0/0"
  }
},

@artbristol 및 @gabriel에서 언급했듯이 단일 스택 배포에서 Ingress / Egress 규칙을 VPC의 기본 보안 그룹에 추가 할 수 있습니다.

자체 참조 문제는 여전히 VPC의 기본 보안 그룹에서 다른 속성을 변경하려는 시도에 영향을 미칩니다. 이에 대한 좋은 예는 태그 또는 설명을 추가하는 것입니다. 이러한 사항을 변경하려면 불필요한 보안 그룹을 처리해야합니다.


6

결과적으로 AWS 지원팀은 이것이 CloudFormation의 기능 격차임을 인식하고 기능 요청으로 개발 팀에 제출했다는 사실을 알려주었습니다.

따라서이 기능이 구현 될 때까지 해결 방법은 "실제"기본 SG와 동일한 동작을 복제하는 고유 한 "기본"보안 그룹을 만드는 것입니다. 불행히도이 설정의 자체 참조 측면으로 인해 단일 스택 배포 내에서는 여전히 불가능합니다. 대안은 기본 보안 그룹에 인스턴스를 할당하지 않고 스택을 한 번 배포하는 것입니다. 그런 다음 스택이 생성되면 (기본 보안 그룹 ID가 무엇인지 볼 수있는 기회가 있음) 해당 SG ID를 인스턴스에 추가 할 수 있습니다.


2
이 따른다면 저는 믿습니다 forums.aws.amazon.com/thread.jspa?messageID=466960을 하고를 생성 SecurityGroupIngress하여 합성 기본 보안 그룹을 참조하여, 단일 스택 배포 내에서, 당신이 원하는 것을 자기 참조를 얻을 수 있습니다
artbristol

맞습니다. 예를 들어, 기본 자체 참조 보안 그룹이 포함 된 기존 VPC에서 CloudFormer 스택을 실행하면 SecurityGroupIngress가 자체 리소스로 분리되어 다음 GroupId과 같이 SourceSecurityGroupId설정된 템플릿이 생성 됩니다.{ "Ref": "<SecurityGroupResource>" }
Gabriel

2
이것이 업데이트되었는지 알고 있습니까? 기본 보안 그룹을 복제하는 것은 성가신 일입니다.
Paul MacDougall

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.