내 응용 프로그램의 최신 버전을 다운로드하기 위해 전용 S3 버킷에 액세스해야하는 스택을 구축 중입니다. EC2 인스턴스에 특정 역할을 할당 할 수있게 해주는 상대적으로 새로운 AWS 기능인 IAM roles을 사용하고 있으며이 기능을 IAM 정책과 결합합니다. 불행히도 이러한 역할에는 인스턴스 생성시 임시 API 자격 증명이 생성됩니다. 그것은 타격은 아니지만, (단지 관련 비트 간체)이 클라우드 init 스크립트와 같은 일을 나에게 강요 것 : 가장 중요한IAM 역할 임시 자격 증명을 구름 형성 템플릿에 사용할 수 있습니까?
#!/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
처음이자 :이 작동하고 꽤 잘 작동합니다. 마찬가지로, CloudFormation의 기존 소스 액세스 지원을 사용하고 싶습니다. 특히 cfn-init
은 S3 버킷을 포함하여 보호 된 데이터를 가져 오는 authentication resources의 사용을 지원합니다. 어쨌든 cfn-init
에서이 키들을 가져 오거나 IAM 역할을 인증 리소스에 묶는가?
다른 대안으로 인증 된 서비스 뒤에 내 원본을 넣을 수있는 대안이 있다고 생각하지만, 현재로서는이 옵션을 사용할 수 없습니다.
또 다른 유망 리드는 AWS::IAM::AccessKey resource,이지만 문서에서는 역할과 함께 사용할 수 있다고 제안하지 않습니다. 어쨌든 그것을 시도 할 것입니다.
[BOTO] (http://boto.readthedocs.org/en/과 테스트 최신 /), 인기있는 파이썬 AWS 라이브러리, 이것을 우아하게 처리합니다. 자세한 내용은 [이 대답] (http://stackoverflow.com/a/11130701/877115)을 참조하십시오. – Christopher