Итак, теоретически, если человеку нужны действительные учетные данные для сервера Amazon, вместо жесткого кодирования ключа / пароля доступа можно позвонить по номеру 169.254.169.254 для получения учетных данных для доступа к определенным ресурсам, например:
js = ''
open('http://169.254.169.254/latest/meta-data/iam/security-credentials/<role>') { |f|
f.each_line {|line| js += line}
}
credentials = JSON.load(js)
ndnode[:s3_access_key_id] = credentials['AccessKeyId']
ndnode[:s3_secret_access_key] = credentials['SecretAccessKey']
а затем используя здесь доступ:
conn = AWS::EC2::Base.new(:access_key_id => ndnode[:s3_access_key_id],
:secret_access_key => ndnode[:s3_secret_access_key])
# THIS ALWAYS FAILS
result = conn.describe_instances(:instance_id => instance_id)
Мне не нравится идея жесткого кодирования моего ключа доступа и пароля в исходном коде, и я хотел бы найти обходной путь.
1) Правильно ли я и мой босс, что это способ решения этой проблемы? 2) Если да, то как правильно это сделать? Если нет - 1, есть ли способ избежать проверки учетных данных в источнике (здесь или в файле конфигурации) и что это такое? 3) В ответ на ответ @dwin, где в API гема AWS я должен поместить токен безопасности? Сообщается, что Boto позволяет мне подключаться к предоставленным мне учетным данным, что означает разветвление процесса и установку некоторых переменных среды, чтобы Ruby мог использовать соединение Boto, запрашивающее информацию.
Многие из пакетов SDK AWS имеют встроенную поддержку ролей IAM в профилях EC2. В .Net для их использования можно использовать конструктор без параметров. Убедитесь, что вы используете последнюю версию SDK.
Вот Страница Amazon о том, как использовать Ruby SDK с ролями IAM.