Назад | Перейти на главную страницу

вызов из экземпляра ec2 на номер 169.254.169.254 для учетных данных безопасности возвращает недопустимые учетные данные

Итак, теоретически, если человеку нужны действительные учетные данные для сервера 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.