AWS CloudFormation: กลุ่มความปลอดภัยเริ่มต้นของ VPC


16

ฉันมี cfn stack ที่ (เหนือสิ่งอื่นใด) สร้าง VPC กลุ่มความปลอดภัยหลายกลุ่มและอินสแตนซ์ EC2 จำนวนหนึ่ง เป็นเรื่องเล็กน้อยที่จะกำหนดกลุ่มความปลอดภัยที่สร้างขึ้นภายในสแต็กให้กับอินสแตนซ์ที่สร้างโดยสแต็กด้วย อย่างไรก็ตามฉันสนใจ VPC SG ที่เป็นค่าเริ่มต้น

เมื่อ VPC ถูกสร้างขึ้น (ไม่ว่าจะด้วยตนเองแม้ว่า GUI โดยการคลาวด์หรือวิธีการอื่น ๆ ) AWS จะสร้างกลุ่มความปลอดภัยเริ่มต้นด้วยกฎ "อนุญาตทั้งหมด" สำหรับอินสแตนซ์ใด ๆ ในกลุ่มนั้น

สิ่งที่ฉันพยายามทำคือกำหนดกลุ่มความปลอดภัยเริ่มต้นนี้พร้อมกับ SGs อื่น ๆ ให้กับอินสแตนซ์ที่สร้างโดยสแต็ก นี่เป็นการพิสูจน์ว่ายากกว่าที่ฉันคาดไว้มาก นี่คือตัวอย่างบางส่วนที่แสดงสิ่งที่ฉันเกิดขึ้น:

"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คุณสมบัติที่จะเป็นตัวเลือกที่เป็นที่จะให้ฉันไปอ้างอิง SG defaultเริ่มต้นโดยชื่อของมัน ไม่สามารถใช้งานได้เนื่องจากSecurityGroupsคุณสมบัตินี้มีไว้สำหรับ EC2 Security Groups เท่านั้นไม่ใช่ VPC Security Groups

ดังนั้นฉันติดอยู่ ฉันได้เปิดกรณีด้วยการสนับสนุน 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
ฉันเชื่อว่าถ้าคุณทำตามฟอรัมนี้aws.amazon.com/thread.jspa?messageID=466960และสร้างกลุ่มSecurityGroupIngressอ้างอิงความปลอดภัยเริ่มต้นสังเคราะห์ของคุณคุณจะได้รับการอ้างอิงตนเองที่คุณต้องการภายในการปรับใช้สแต็กเดียว
artbristol

สิ่งนี้ถูกต้อง ตัวอย่างเช่นหากคุณเรียกใช้สแต็ค CloudFormer บน VPC ที่มีอยู่ซึ่งมีกลุ่มความปลอดภัยอ้างอิงตนเองจะสร้างเทมเพลตที่ SecurityGroupIngress แตกออกเป็นทรัพยากรของตัวเองด้วยทั้งคู่GroupIdและSourceSecurityGroupIdตั้งเป็น{ "Ref": "<SecurityGroupResource>" }
Gabriel

2
คุณรู้หรือไม่ว่าสิ่งนี้ได้รับการปรับปรุงแล้ว? การทำซ้ำกลุ่มความปลอดภัยเริ่มต้นนั้นน่ารำคาญ
Paul MacDougall

FWIW: "ลบกฎเริ่มต้น" docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
Jakub M.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.