AWS CloudFormation: VPC डिफ़ॉल्ट सुरक्षा समूह


16

मेरे पास एक cfn स्टैक है (अन्य चीजों के अलावा), एक VPC, कई सुरक्षा समूह और EC2 उदाहरणों का एक मुट्ठी भर बनाता है। यह सुरक्षा समूहों को आवंटित करने के लिए तुच्छ है जो स्टैक के भीतर बनाए गए उदाहरणों के लिए बनाए जाते हैं जो स्टैक द्वारा भी बनाए जाते हैं। हालाँकि, मुझे डिफ़ॉल्ट VPC SG में दिलचस्पी है।

जब VPC क्रिएट हो जाती है (चाहे मैन्युअल रूप से GUI, क्लाउडफॉर्म या किसी अन्य माध्यम से), तो AWS उस समूह में किसी भी उदाहरण के लिए "सभी की अनुमति दें" नियम के साथ एक डिफ़ॉल्ट सुरक्षा समूह बनाता है।

मैं जो करने की कोशिश कर रहा हूं वह इस डिफ़ॉल्ट सुरक्षा समूह को कई अन्य एसजीओं के साथ-साथ स्टैक द्वारा बनाए गए उदाहरणों में असाइन करना है। यह मेरे अनुमान से कहीं अधिक कठिन साबित हो रहा है। यहाँ कुछ स्निपेट दिखाए जा रहे हैं जो मेरे पास चल रहे हैं:

"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 स्टैक के लिए उपलब्ध नहीं है, जिससे आईडी द्वारा इसे संदर्भित करना असंभव है। मैंने शुरू में सोचा था कि SecurityGroupsसंपत्ति एक विकल्प होगा, क्योंकि यह मुझे डिफ़ॉल्ट एसजी को उसके नाम से संदर्भित करने की अनुमति देगा default,। हालांकि, यह काम नहीं करता है, क्योंकि SecurityGroupsसंपत्ति केवल ईसी 2 सुरक्षा समूहों के लिए है, न कि वीपीसी सुरक्षा समूहों के लिए।

इसलिए मैं फंस गया हूं। मैं है इस पर एडब्ल्यूएस समर्थन के साथ एक मामला खोल दिया है, लेकिन अब तक, वे उपयोगी नहीं किया गया है। इस पर कोई विचार कि मैं इसे कैसे पूरा कर सकता हूं?

जवाबों:


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 द्वारा उल्लेख किया गया है, यह एक एकल स्टैक परिनियोजन में VPC के लिए डिफ़ॉल्ट सुरक्षा समूह में Ingress / Egress नियमों को जोड़ने की अनुमति देता है।

मुझे पूरा यकीन है कि स्व-रेफरेंशियल समस्या अभी भी वीपीसी के डिफ़ॉल्ट सुरक्षा समूह पर किसी भी अन्य गुण को बदलने के किसी भी प्रयास को प्रभावित करती है। इसका एक अच्छा उदाहरण टैग, या एक विवरण जोड़ना होगा। यदि आप इन चीजों को बदलना चाहते हैं, तो आपको बाहरी सुरक्षा समूहों के साथ व्यवहार करना होगा।


6

खैर, जैसा कि यह पता चला है, एडब्ल्यूएस समर्थन ने जवाब दिया और मुझे सूचित किया कि वे पहचानते हैं कि यह क्लाउडफ़ॉर्मेशन में एक फीचर गैप है, और इसे विकास टीम को फीचर अनुरोध के रूप में प्रस्तुत किया गया है।

इसलिए जब तक इस सुविधा को लागू नहीं किया जाता है, वर्कअराउंड अपना "डिफ़ॉल्ट" सुरक्षा समूह बनाना है जो समान व्यवहार को "वास्तविक" डिफ़ॉल्ट एसजी के रूप में दोहराता है। दुर्भाग्य से, इस सेटअप के आत्म-संदर्भित पहलू के कारण, यह अभी भी एक सिंगल स्टैक परिनियोजन के भीतर करना संभव नहीं है। वैकल्पिक रूप से एक बार स्टैक को तैनात करना है, डिफ़ॉल्ट सुरक्षा समूह को आपके उदाहरणों को निर्दिष्ट किए बिना। फिर एक बार स्टैक बनने के बाद (और आपको डिफ़ॉल्ट के लिए सुरक्षा समूह आईडी क्या है यह देखने का मौका मिला है), आप उस एसजी आईडी को अपने उदाहरणों में जोड़ सकते हैं।


2
मेरा मानना है कि यदि आप इस का पालन forums.aws.amazon.com/thread.jspa?messageID=466960 और एक बनाने के SecurityGroupIngressअपने सिंथेटिक डिफ़ॉल्ट सुरक्षा समूह की चर्चा करते हुए,, आप एक ही ढेर तैनाती के भीतर, स्वयं संदर्भ जो आप चाहते प्राप्त कर सकते हैं
Artbristol

यह सही है। उदाहरण के लिए, यदि आप एक मौजूदा VPC पर CloudFormer स्टैक चलाते हैं, जिसमें डिफ़ॉल्ट, स्व-संदर्भ-योग्य सुरक्षा समूह होते हैं, तो यह एक टेम्पलेट उत्पन्न करेगा जहाँ SecurityGroupIngress को दोनों के साथ अपने स्वयं के संसाधन के रूप में तोड़ दिया जाता है GroupIdऔर SourceSecurityGroupIdसेट किया जाता है{ "Ref": "<SecurityGroupResource>" }
Gabriel

2
क्या आपको पता है कि क्या यह अपडेट किया गया है? डिफ़ॉल्ट सुरक्षा समूह को डुप्लिकेट करने से गुस्सा आ रहा है।
पॉल मैकडोगल

FWIW: "निकालें डिफ़ॉल्ट नियम" docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/...
जेकब एम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.