无法使用临时凭证从EC2连接到SQS

时间:2015-01-19 20:48:31

标签: python amazon-web-services boto amazon-sqs

我目前正在尝试从同一个VPC和安全组中的EC2实例连接到SQS,如下所示。 " DEV-盒"是我的IAM角色名称。

连接到SQS队列

    response = requests.get('http://169.254.169.254/latest/meta-data/iam/security-credentials/dev-box')
    data = response.json()
    secret_key = data['AccessKeyId']
    access_key = data['SecretAccessKey']
    token = data['Token']

    sqs_conn = boto.connect_sqs(access_key, secret_key, security_token=token)
    q = sqs_conn.get_queue('test_queue')

get_queue方法抛出一个" Forbidden"异常,表示" InvalidClientTokenId。"对于为什么会这样,我感到很困惑。我已经多次检查过我的价值,但没有成功。

我应该能够在没有参数的情况下调用boto.connect_sqs(),因为我是从EC2实例运行的,但是它也不起作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的SQS代码通常是正确的。请注意,如果您在已分配角色的Amazon EC2实例上运行代码,则AWS SDK将自动从元数据服务检索凭据。

这里有一些代码可以从EC2实例中为我工作。请注意,我正在连接悉尼地区:

Python 2.6.9 (unknown, Sep 13 2014, 00:25:11) 
>>> import boto, boto.sqs
>>> q_conn = boto.sqs.connect_to_region("ap-southeast-2")
>>> q = q_conn.get_queue('cheese-queue')
>>> q
Queue(https://ap-southeast-2.queue.amazonaws.com/123412341234/cheese-queue)