Uygulamamın en güncel sürümünü indirmek için özel bir S3 paketine erişmesi gereken bir yığın yapıyorum. EC2 örneklerine belirli roller atanmasına izin veren, daha sonra IAM ilkeleriyle birleştirilen nispeten yeni bir AWS özelliği olan IAM roles kullanıyorum. Ne yazık ki, bu roller örnekleme sırasında oluşturulan geçici API kimlik bilgileriyle birlikte gelir. Bu sarsılan değil, ama (sadece konuyla ilgili bit basitleştirilmiş) Bu bulut init betiği gibi şeyler yapmamı zorlamayla: baştaCan IAM rolü, bulut şablonlarında geçici kimlik bilgileri kullanılabilir mi?
#!/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
Birinci ve: Bu çalışır ve oldukça iyi çalışıyor. Aynı şekilde, CloudFormation'un kaynak erişimi için mevcut desteğini kullanmayı çok isterim. Spesifik olarak, cfn-init
, S3 kovaları dahil olmak üzere korumalı verilere ulaşmak için authentication resources kullanımını desteklemektedir. Bu anahtarlara cfn-init
içinden erişmek veya belki de IAM rolünü bir kimlik doğrulama kaynağına bağlamak var mı?
Bir alternatifin, kaynağımın kimliği doğrulanmış başka bir hizmetin arkasına konacağını sanıyorum, ancak bu şu anda geçerli bir seçenek değil.
Bir başka umut vaat eden yol, AWS::IAM::AccessKey resource, ancak dokümanlar, rollerle birlikte kullanılabileceğini önermiyor. Yine de deneyeceğim.
[boto] (http://boto.readthedocs.org/en/ ile test edilmiştir En son /), popüler bir Python AWS kütüphanesi, bunu zarif bir şekilde ele alır. Daha fazla bilgi için [bu cevap] bölümüne bakın (http://stackoverflow.com/a/11130701/877115). – Christopher