AWS CloudFormation: grup keamanan default VPC

15

Saya punya cfn stack yang (antara lain), membuat VPC, beberapa grup keamanan, dan beberapa instance EC2. Sangat mudah untuk menetapkan grup keamanan yang dibuat di dalam stack ke instance yang juga dibuat oleh stack. Namun, saya tertarik dengan default VPC SG.

Ketika VPC dibuat (apakah secara manual melalui GUI, oleh cloudformation, atau cara lain), AWS membuat grup keamanan default dengan aturan "izinkan semua" untuk setiap instance dalam grup itu.

Apa yang saya coba lakukan adalah menetapkan grup keamanan default ini bersama dengan beberapa SG lain untuk instance yang dibuat oleh stack. Ini terbukti jauh lebih sulit daripada yang saya perkirakan. Berikut beberapa cuplikan yang menunjukkan apa yang telah saya lakukan:

"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"} ]
      }
}

Dalam cuplikan di atas, saya membuat grup keamanan "bolehkan ssh" dan tetapkan itu sebagai contoh. Seperti yang disebutkan, tumpukan saya juga membuat VPC (tempat instance ini diluncurkan), yang pada gilirannya membuat grup keamanan default. Sayangnya, karena grup ini dibuat secara otomatis oleh AWS, ID grupnya tidak tersedia untuk stack, sehingga tidak mungkin untuk referensi dengan ID. Saya awalnya berpikir bahwa SecurityGroupsproperti akan menjadi pilihan, karena itu akan memungkinkan saya untuk referensi SG default dengan namanya default,. Itu tidak berfungsi, karena SecurityGroupsproperti ini hanya untuk Grup Keamanan EC2, bukan Grup Keamanan VPC.

Jadi saya mandek. Saya telah membuka kasing dengan dukungan AWS tentang hal ini, tetapi sejauh ini, mereka belum membantu. Ada ide tentang bagaimana saya bisa mencapai ini?

EEAA
sumber

Jawaban:

18

Referensi grup keamanan default dimungkinkan menggunakan:

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

Di mana "VPC" adalah nama sumber daya VPC Anda.

Dengan AWS::EC2::SecurityGroupIngressdan AWS::EC2::SecurityGroupEgress, Anda dapat menambah izin grup keamanan default ini.

Saya pikir ini yang Anda inginkan:

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

Seperti yang disebutkan oleh @artbristol dan @gabriel, ini memungkinkan aturan Ingress / Egress ditambahkan ke grup keamanan default untuk VPC dalam penyebaran tumpukan tunggal.

Saya cukup yakin bahwa masalah referensi-diri masih berdampak pada setiap upaya mengubah salah satu properti lainnya pada grup keamanan default VPC. Contoh yang baik dari ini adalah menambahkan Tag, atau Deskripsi. Jika Anda ingin mengubah hal-hal ini, Anda harus berurusan dengan kelompok keamanan asing yang bertebaran.

IanBlenke
sumber
6

Nah, ternyata, dukungan AWS menjawab dan memberi tahu saya bahwa mereka mengenali bahwa ini adalah celah fitur di CloudFormation, dan itu telah diajukan ke tim pengembangan sebagai permintaan fitur.

Jadi sampai fitur ini diimplementasikan, solusinya adalah membuat grup keamanan "default" Anda sendiri yang mereplikasi perilaku yang sama dengan standar SG "asli". Sayangnya, karena aspek referensial sendiri dari pengaturan ini, masih tidak mungkin dilakukan dalam satu penyebaran tumpukan tunggal. Alternatifnya adalah dengan menyebarkan stack sekali, tanpa menetapkan grup keamanan default instance Anda. Kemudian setelah tumpukan dibuat (dan Anda memiliki kesempatan untuk melihat apa ID Grup Keamanan untuk default), Anda dapat menambahkan ID SG ke instance Anda.

EEAA
sumber
2
Saya percaya jika Anda mengikuti forum ini.aws.amazon.com/thread.jspa?messageID=466960 dan membuat SecurityGroupIngress, merujuk pada grup keamanan default sintetis Anda, Anda bisa mendapatkan referensi-sendiri yang Anda inginkan, dalam satu penempatan tumpukan
artbristol
Ini benar. Misalnya, jika Anda menjalankan tumpukan CloudFormer pada VPC yang sudah ada yang berisi grup keamanan referensial mandiri, itu akan menghasilkan templat di mana SecurityGroupIngress dipecah sebagai sumber dayanya sendiri dengan keduanya GroupIddan SourceSecurityGroupIddisetel ke{ "Ref": "<SecurityGroupResource>" }
Gabriel
2
Apakah Anda mengetahui jika ini telah diperbarui? Harus menduplikasi grup keamanan default itu menjengkelkan.
Paul MacDougall
FWIW: "Hapus Aturan Default" docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
Jakub M.