Tôi đang xây dựng một ngăn xếp cần truy cập vào thùng S3 riêng để tải xuống phiên bản mới nhất của ứng dụng của tôi. Tôi đang sử dụng IAM roles, một tính năng AWS tương đối mới cho phép các cá thể EC2 được gán vai trò cụ thể, sau đó được kết hợp với các chính sách IAM. Thật không may, những vai trò này đi kèm với thông tin đăng nhập API tạm thời được tạo lúc khởi tạo. Nó không làm tê liệt, nhưng nó buộc tôi phải làm những việc như kịch bản đám mây-init này (đơn giản hóa để chỉ các bit có liên quan):IAM có thể sử dụng thông tin đăng nhập tạm thời trong các mẫu hình đám mây không?
#!/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
Đầu tiên và quan trọng nhất: Công trình này, và hoạt động khá tốt. Tôi cũng thích sử dụng hỗ trợ hiện tại của CloudFormation để truy cập nguồn. Cụ thể, cfn-init
hỗ trợ việc sử dụng authentication resources để nhận dữ liệu được bảo vệ, bao gồm cả nhóm S3. Có anyway để có được tại các phím này từ bên trong cfn-init
, hoặc có lẽ buộc vai trò IAM vào một nguồn tài nguyên xác thực?
Tôi giả sử một giải pháp thay thế sẽ đặt nguồn của tôi phía sau một số dịch vụ được chứng thực khác, nhưng đó không phải là một lựa chọn khả thi tại thời điểm này.
Một khách hàng tiềm năng đầy hứa hẹn khác là AWS::IAM::AccessKey resource, nhưng các tài liệu không đề xuất rằng nó có thể được sử dụng với vai trò. Tôi sẽ thử nó.
[boto] (http://boto.readthedocs.org/en/ mới nhất /), một thư viện AWS python phổ biến, xử lý thanh lịch này. Xem [câu trả lời này] (http://stackoverflow.com/a/11130701/877115) để biết thêm chi tiết. – Christopher