Можно ли использовать временные учетные данные роли IAM в шаблонах cloudformation?

Я создаю стек, которому требуется доступ к частной корзине S3 для загрузки самой последней версии моего приложения. Я использую роли IAM , относительно новую функцию AWS, позволяющую назначать экземплярам EC2 определенные роли, которые затем связываются с политиками IAM. К сожалению, эти роли поставляются с временными учетными данными API, сгенерированными при создании экземпляра. Это не наносит вреда, но заставило меня делать такие вещи, как этот облачный -сценарий инициализации (, упрощенный до соответствующего бита):

#!/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. Есть ли способ получить эти ключи изнутри cfn-initили, возможно, привязать роль IAM к ресурсу аутентификации?

Я полагаю, что одной из альтернатив было бы размещение моего источника за какой-либо другой аутентифицированной службой, но в настоящее время это нежизнеспособный вариант.

Другим многообещающим примером является ресурс AWS, ::IAM, ::AccessKey, , но в документации не говорится, что его можно использовать с ролями. Я все равно попробую.

11
задан Community 23 May 2017 в 12:03
поделиться