boto выдавать роль IAM

Я пытаюсь использовать недавно объявленные AWS «роли IAM для EC2», что позволяет автоматически вводить учетные данные безопасности в экземпляры EC2. (см. http://aws.amazon.com/about-aws/whats-new/2012/06/11/Announcing-IAM-Roles-for-EC2-instances/ ).

Я установил экземпляр с ролью IAM, как описано. Я также могу получить (по-видимому) правильный ключ доступа / учетные данные с помощью curl.

Однако boto не выполняет простой вызов типа get_all_buckets, хотя я включил ВСЕ разрешения S3 для этой роли.

Ошибка, которую я получаю, – «Идентификатор ключа доступа AWS, который вы предоставили, не существует в наших записях»

Однако ключ доступа, указанный в ошибке, совпадает с ключом доступа, который я получаю от curl.

Вот сценарий сбоя, запускаемый на экземпляре EC2 с присоединенной ролью IAM, которая дает все разрешения S3:

import urllib2 import ast from boto.s3.connection import S3Connection resp=urllib2.urlopen('http://169.254.169.254/latest/meta-data/iam/security-credentials/DatabaseApp').read() resp=ast.literal_eval(resp) print "access:" + resp['AccessKeyId'] print "secret:" + resp['SecretAccessKey'] conn = S3Connection(resp['AccessKeyId'], resp['SecretAccessKey']) rs= conn.get_all_buckets() 

  • Как создать декоратор для ленивой инициализации свойства
  • pytz localize vs datetime replace
  • Любой эффективный способ чтения данных из большого двоичного файла?
  • Проверка расширения файла
  • Можно ли запускать срывное приспособление только после того, как все параметры запущены?
  • Шифрование данных в Python -
  • Определить размер кластера файловой системы в Python
  • Python и urllib
  • 2 Solutions collect form web for “boto выдавать роль IAM”

    Если вы используете boto 2.5.1 или новее, это намного проще, чем это. Boto автоматически найдет учетные данные в метаданных экземпляра для вас и будет использовать их до тех пор, пока в переменных среды или в файле конфигурации boto не будут найдены другие учетные данные. Итак, вы должны просто сделать это на экземпляре EC2:

     >>> import boto >>> c = boto.connect_s3() >>> rs = c.get_all_buckets() 

    Причина, по которой ваш ручной подход терпит неудачу, заключается в том, что учетные данные, связанные с access_key IAM, являются временными учетными данными сеанса и состоят из access_key , secret_key и security_token и вам нужно secret_key все три этих значения в конструктор S3Connection .

    Я не знаю, поможет ли этот ответ кому-либо, но я получал ту же ошибку, мне пришлось решить мою проблему немного по-другому. Во-первых, у моего экземпляра Amazon не было никаких роли IAM. Я думал, что могу просто использовать ключ доступа и секретный ключ, но я продолжал получать эту ошибку только с этими двумя ключами. Я читал, что мне нужен токен безопасности, но у меня его не было, потому что у меня не было никаких роли IAM. Это то, что я сделал, чтобы исправить проблему:

    1. Создайте роль IAM с разрешениями AmazonS3FullAccess.
    2. Запустите новый экземпляр и прикрепите мою вновь созданную роль.
    3. Даже после этого это все еще не сработало. Я должен был также подключиться к правильному региону с помощью кода ниже:

      import boto.s3.connection
      conn = boto.s3.connect_to_region ('ваш-регион')
      conn.get_all_buckets ()

    Python - лучший язык программирования в мире.