14

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

मेरा विचार एक निजी एस 3 बाल्टी और क्लाउडिनिट का उपयोग करना था, लेकिन मैं आईएएम क्रेडेंशियल्स के साथ क्या करना है, इस बारे में थोड़ा सा स्टंप हूं। मैं उन्हें टेम्पलेट के उपयोगकर्ता डेटा में डाल सकता हूं, लेकिन मैं ऐसा करने के लिए नाराज हूं, खासकर क्योंकि मैं उस फ़ाइल को नियंत्रित करने वाला संस्करण हूं। एकमात्र विकल्प मैं सोच सकता हूं कि एएमआई में पर्यावरण चर का उपयोग करना है। उन्हें सादे टेक्स्ट होना होगा, लेकिन ... एह, अगर आप मेरे उदाहरण में तोड़ सकते हैं, तो आप ज़िप और मेरे पूरे वेबसर्वर को डाउनलोड कर सकते हैं। जब तक आईएएम उपयोगकर्ता को किसी और चीज के लिए पुन: उपयोग नहीं किया जाता है और नियमित रूप से घुमाया जाता है, तो यह समस्या को हल करने के लिए एक उचित तरीका लगता है। क्या मुझे कुछ याद आ रही है? क्लाउडिनिट का उपयोग करके मैं सुरक्षित रूप से एक निजी एस 3 संपत्ति कैसे डाउनलोड कर सकता हूं?

उत्तर

15

अमेज़ॅन ने हाल ही में एक नई सुविधा की घोषणा की जहां आप अपने ईसी 2 उदाहरणों में "आईएएम भूमिकाएं" दे सकते हैं। यह विशिष्ट उदाहरणों को विशिष्ट S3 संसाधनों को पढ़ने की अनुमति देने की अनुमति देना काफी आसान बनाता है।

:

http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/UsingIAM.html#UsingIAMrolesWithAmazonEC2Instances

यहाँ IAM दस्तावेज में खंड है:

http://aws.typepad.com/aws/2012/06/iam-roles-for-ec2-instances-simplified-secure-access-to-aws-service-apis-from-ec2.html

यहाँ EC2 दस्तावेज में खंड है:

यहाँ अपने ब्लॉग पोस्ट नई सुविधा की घोषणा है

http://docs.amazonwebservices.com/IAM/latest/UserGuide/WorkingWithRoles.html

आईएएम भूमिकाएं HTTP के माध्यम से उदाहरण के लिए प्रमाण-पत्र उपलब्ध कराती हैं, इसलिए उदाहरण पर चल रहे किसी भी उपयोगकर्ता या प्रक्रिया उन्हें देख सकती हैं।

+0

वहाँ किसी भी पूरा से-शुरुआत-हैं- है एडब्ल्यूएस सीएलआई उदाहरण या ट्यूटोरियल अंत में आईएएम तंत्र को सेटअप और उपयोग करने का तरीका दिखाता है? कमांड-बाय-कमांड के बाद यह संदर्भ बहुत जटिल और पूर्ण उदाहरण दिखते हैं। – pt12lol

5

आईएएम भूमिका के साथ एक उदाहरण में अस्थायी सुरक्षा प्रमाण-पत्र हैं जो स्वचालित रूप से घुमाए जाते हैं। वे http://169.254.169.254/latest/meta-data/iam/security-credentials/RoleName पर http के माध्यम से उपलब्ध हैं, जहां रोलनाम वह है जिसे आपने अपनी भूमिका कहा है। तो वे आपके उदाहरण से प्राप्त करना आसान है, लेकिन वे नियमित रूप से समाप्त हो जाते हैं।

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

python -c "import boto;boto.connect_s3().get_bucket('b').get_key('k').get_contents_to_filename('f')" 

Boto पाता है और आप के लिए भूमिका की अस्थायी क्रेडेंशियल का उपयोग करता , जो इसे उपयोग करना वास्तव में आसान बनाता है।

IAM भूमिकाओं के साथ, नए AWS command-line client इन परिसंपत्तियों तुच्छ प्राप्त करने में कठिनाई है साथ:

+0

"कुंजी के" क्या है? क्या यह अस्थायी प्रमाण-पत्र वाली फाइल है? – doNotCheckMyBlog

+1

भविष्य के उपयोगकर्ताओं के लिए, कुंजी के वह फ़ाइल नाम है जिसे आप S3 से चाहते हैं। यदि आपके पास फ़ोल्डर संरचना है तो कुंजी होगी, फ़ोल्डर नाम/file.sh – doNotCheckMyBlog

14

थोड़ा इस प्रश्न के उत्तरों को अपडेट करें। यह स्वचालित रूप से पर्यावरण से आईएएम के माध्यम से दिए गए एडब्ल्यूएस प्रमाण-पत्रों को खींच देगा और उन प्रमाण-पत्रों के ताज़ा करने को संभालेगा।

# Install the AWS command-line tools 
pip install awscli 

# Fetch the asset 
aws s3 cp --region us-east-1 s3://my-private-bucket/a-folder/an-asset.zip /some/destination 

कि के रूप में सरल:

यहाँ एक उपयोगकर्ता के डेटा लिपि में एक सुरक्षित S3 बाल्टी से एक भी संपत्ति प्राप्त करने में कठिनाई का एक उदाहरण है। आप एस 3 और संपूर्ण अपलोड आदि से पूरी निर्देशिका सामग्री भी कॉपी कर सकते हैं। अधिक जानकारी और विकल्पों के लिए the reference material देखें।

+0

हाँ नया क्ली उपकरण 'बॉटोकोर' पर आधारित है, जो 'बोटो' v3 ​​के लिए आधारभूत प्रतीत होता है। कुल मिलाकर [botocore] (https://github.com/boto/botocore) एक महान इंटरफ़ेस है यदि आप एडब्ल्यूएस एपीआई की संरचना जानते हैं। – Christopher

+0

उत्कृष्ट, संक्षिप्त उत्तर @ जेम्स वैन डाइक। लेकिन मुझे अभी भी संदेह है कि यह कितना सुरक्षित है, यहां मेरे समान प्रश्न में दिखाया गया है: http://stackoverflow.com/questions/29932355/is-it-secure-to-store-ec2-user-data-shell-scripts- में एक निजी S3-बाल्टी – AJB

3

सुरक्षित रूप से एक नया EC2 उदाहरण पर एक निजी S3 संपत्ति डाउनलोड करने के लिए आपको IAM Roles for EC2 का उपयोग करना चाहिए अपने EC2 उदाहरण के लिए आवश्यक S3 अनुमति देने का है, तो अपने उदाहरण की परिसंपत्ति UserDatacloudinit script डाउनलोड करने के लिए में aws s3 cp कहते हैं।

सेट करने के लिए एक CloudFormation टेम्पलेट से EC2 के लिए एक IAM भूमिका, AWS::IAM::InstanceProfile संसाधन का उपयोग करें, एक AssumeRolePolicyDocumentec2.amazonaws.com के लिए उपयोग सौंपने के साथ एक AWS::IAM::Role संसाधन संदर्भित, (इस मामले में grant least privilege के लिए बनाया गया एक नीति के साथ, केवल विशिष्ट के लिए अनुमति देता है 's3:GetObject' एस 3 संपत्ति डाउनलोड की जा रही है)।

यहाँ एक पूर्ण उदाहरण टेम्पलेट कि cloudinit का उपयोग कर, एक Stack Output के रूप में इसकी सामग्री लौटने एक नया EC2 उदाहरण पर एक S3 संपत्ति डाउनलोड है:

Launch Stack

Description: (securely) download a private S3 asset onto a new EC2 instance with cloudinit 
Parameters: 
    S3Bucket: 
    Description: S3 bucket name 
    Type: String 
    S3Key: 
    Description: S3 object key 
    Type: String 
Mappings: 
    # amzn-ami-hvm-2016.09.1.20161221-x86_64-gp2 
    RegionMap: 
    us-east-1: 
     "64": "ami-9be6f38c" 
Resources: 
    EC2Role: 
    Type: AWS::IAM::Role 
    Properties: 
     AssumeRolePolicyDocument: 
     Version: 2012-10-17 
     Statement: 
     - Effect: Allow 
      Principal: {Service: [ ec2.amazonaws.com ]} 
      Action: ["sts:AssumeRole"] 
     Path:/
     Policies: 
     - PolicyName: EC2Policy 
     PolicyDocument: 
      Version: 2012-10-17 
      Statement: 
      - Effect: Allow 
      Action: ['s3:GetObject'] 
      Resource: !Sub 'arn:aws:s3:::${S3Bucket}/${S3Key}' 
    RootInstanceProfile: 
    Type: AWS::IAM::InstanceProfile 
    Properties: 
     Path:/
     Roles: [ !Ref EC2Role ] 
    WebServer: 
    Type: AWS::EC2::Instance 
    Properties: 
     ImageId: !FindInMap [ RegionMap, !Ref "AWS::Region", 64 ] 
     InstanceType: m3.medium 
     IamInstanceProfile: !Ref RootInstanceProfile 
     UserData: 
     "Fn::Base64": 
      !Sub | 
      #!/bin/bash 
      DATA=$(aws s3 cp s3://${S3Bucket}/${S3Key} -) 
      /opt/aws/bin/cfn-signal \ 
       -e $? \ 
       -d "$DATA" \ 
       '${Handle}' 
    Handle: 
    Type: AWS::CloudFormation::WaitConditionHandle 
    Wait: 
    Type: AWS::CloudFormation::WaitCondition 
    Properties: 
     Handle: !Ref Handle 
     Timeout: 300 
Outputs: 
    Result: 
    Value: !GetAtt Wait.Data 
संबंधित मुद्दे