Подтвердить что ты не робот

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.

Вот провал script, запускаемый в экземпляре 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()
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

    import boto.s3.connection
    conn = boto.s3.connect_to_region ('your-region')
    conn.get_all_buckets()