AWS CloudFormation:VPCのデフォルトセキュリティグループ


14

(とりわけ)VPC、いくつかのセキュリティグループ、および少数のEC2インスタンスを作成するcfnスタックがあります。スタック内で作成されたセキュリティグループを、スタックによって作成されたインスタンスに割り当てることは簡単です。ただし、デフォルトのVPC SGに興味があります。

VPCが作成されると(GUIを介して手動で、cloudformation、またはその他の方法で)、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"} ]
      }
}

上記のスニペットでは、「allow ssh」セキュリティグループを作成し、それをインスタンスに割り当てています。前述のように、私のスタックはVPC(このインスタンスが起動される)も作成し、これがデフォルトのセキュリティグループを作成します。残念ながら、このグループはAWSによって自動的に作成されるため、そのグループIDはスタックで使用できず、IDで参照することはできません。当初、SecurityGroupsプロパティはオプションであると考えていましたdefault。これにより、デフォルトのSGをその名前で参照できるようになります。ただし、このSecurityGroupsプロパティはEC2セキュリティグループ専用であり、VPCセキュリティグループ用ではないため、機能しません。

だから私は立ち往生しています。私がしているこの上のAWSをサポートしたケースを開け、これまでのところ、彼らは参考にされていませんでした。これを達成する方法についてのアイデアはありますか?

回答:


18

次を使用して、デフォルトのセキュリティグループを参照できます。

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

「VPC」はVPCリソース名です。

ではAWS::EC2::SecurityGroupIngressAWS::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で述べたように、これにより、シングルスタック展開で、VPCのデフォルトセキュリティグループにIngress / Egressルールを追加できます。

自己参照の問題は、VPCのデフォルトのセキュリティグループにある他のプロパティを変更しようとする試みにも影響を与えると確信しています。この良い例は、タグまたは説明を追加することです。これらのことを変更したい場合は、周りにある無関係のセキュリティグループに対処する必要があります。


5

結局のところ、AWSサポートは、これがCloudFormationの機能ギャップであることを認識しており、機能リクエストとして開発チームに提出されたと回答しました。

そのため、この機能が実装されるまで、回避策は「実際の」デフォルトSGと同じ動作を複製する独自の「デフォルト」セキュリティグループを作成することです。残念ながら、このセットアップの自己参照的な側面のため、単一のスタック展開内で実行することはまだできません。別の方法は、デフォルトのセキュリティグループをインスタンスに割り当てずに、スタックを1回展開することです。次に、スタックが作成されたら(そしてデフォルトのセキュリティグループIDを確認する機会がありました)、そのSG IDをインスタンスに追加できます。


2
あなたはこの従うならば、私は信じていforums.aws.amazon.com/thread.jspa?messageID=466960をして作成しSecurityGroupIngress、あなたの合成、デフォルトのセキュリティグループを参照して、あなたは、単一のスタックの展開の中、あなたがしたいことを、自己参照を取得することができ、
artbristol

正解です。デフォルト、自己参照のセキュリティグループを含む既存のVPC上CloudFormerスタックを実行する場合、それはSecurityGroupIngressが、両方を持つ独自のリソースとして出て壊れているテンプレートが生成されますGroupIdSourceSecurityGroupIdのセット{ "Ref": "<SecurityGroupResource>" }
ガブリエル

2
これが更新されたかどうかを知りますか?デフォルトのセキュリティグループを複製するのは面倒です。
ポールマクドゥーガル14

FWIW:「削除デフォルトのルール」docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/...
ヤクブM.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.