मैं एक स्टैक बना रहा हूं जिसके लिए मेरे आवेदन के सबसे वर्तमान संस्करण को डाउनलोड करने के लिए एक निजी एस 3 बाल्टी तक पहुंच की आवश्यकता है। मैं IAM roles का उपयोग कर रहा हूं, जो अपेक्षाकृत नई एडब्लूएस सुविधा है जो ईसी 2 उदाहरणों को विशिष्ट भूमिका नियुक्त करने की अनुमति देता है, जो तब आईएएम नीतियों के साथ मिलकर बनती हैं। दुर्भाग्यवश, ये भूमिकाएं अस्थायी रूप से उत्पन्न अस्थायी API प्रमाण-पत्रों के साथ आती हैं। यह गंभीर नहीं है, लेकिन यह मुझे इस क्लाउड-init स्क्रिप्ट (सिर्फ प्रासंगिक बिट करने के लिए सरल) जैसे कार्य करने के लिए मजबूर कर रहा है:क्या क्लाउड टेम्पलेट्स में आईएएम भूमिका अस्थायी प्रमाण-पत्रों का उपयोग किया जा सकता है?
#!/bin/sh
# Grab our credentials from the meta-data and parse the response
CREDENTIALS=$(curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access)
S3_ACCESS_KEY=$(echo $CREDENTIALS | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['AccessKeyId'];")
S3_SECRET_KEY=$(echo $CREDENTIALS | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['SecretAccessKey'];")
S3_TOKEN=$(echo $CREDENTIALS | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['Token'];")
# Create an executable script to pull the file
cat <<EOF> /tmp/pullS3.rb
require 'rubygems'
require 'aws-sdk'
AWS.config(
:access_key_id => "$S3_ACCESS_KEY",
:secret_access_key => "$S3_SECRET_KEY",
:session_token => "$S3_TOKEN")
s3 = AWS::S3.new()
myfile = s3.buckets['mybucket'].objects["path/to/my/file"]
File.open("/path/to/save/myfile", "w") do |f|
f.write(myfile.read)
end
EOF
# Downloading the file
ruby /tmp/pullS3.rb
सबसे पहले: यह काम करता है, और बहुत अच्छी तरह से काम करता है। वैसे ही, मुझे क्लाउडफॉर्मेशन के स्रोत पहुंच के लिए मौजूदा समर्थन का उपयोग करना अच्छा लगेगा। विशेष रूप से, cfn-init
एस 3 बाल्टी समेत संरक्षित डेटा प्राप्त करने के लिए authentication resources के उपयोग का समर्थन करता है। क्या cfn-init
के भीतर से इन चाबियाँ प्राप्त करने के लिए वैसे भी है, या शायद आईएएम भूमिका को प्रमाणीकरण संसाधन से जोड़ना है?
मुझे लगता है कि एक विकल्प मेरे स्रोत को किसी अन्य प्रमाणीकृत सेवा के पीछे रखेगा, लेकिन यह इस समय एक व्यवहार्य विकल्प नहीं है।
एक और आशाजनक लीड AWS::IAM::AccessKey resource, है लेकिन दस्तावेज़ों का सुझाव नहीं है कि इसका उपयोग भूमिकाओं के साथ किया जा सकता है। मैं वैसे भी कोशिश करने जा रहा हूँ।
[Boto] (http://boto.readthedocs.org/en/ परीक्षण किया नवीनतम /), एक लोकप्रिय पायथन एडब्ल्यूएस लाइब्रेरी, यह सुंदर ढंग से संभालती है। अधिक जानकारी के लिए [यह उत्तर] देखें (http://stackoverflow.com/a/11130701/877115)। – Christopher