AWS Boto连接仅适用于Windows Python shell

时间:2015-06-26 16:44:02

标签: python linux windows boto aws-ec2

目前,我正在尝试从运行在Windows 8操作系统内的Ubuntu 14 VM连接到AWS。在Ubuntu shell中,我运行:

$AWS_ACCESS_KEY=my_access_key
$AWS_SECRET_ACCESS_KEY=my_secret_key
$python
$export AWS_ACCESS_KEY
$export AWS_SECRET_ACCESS_KEY
$python
>>>import os
>>>from boto import ec2
>>>auth = {"aws_access_key_id":os.environ.get("AWS_ACCESS_KEY"),
>>>"aws_secret_access_key":os.environ.get("AWS_SECRET_ACCESS_KEY")}
>>>conn = ec2.connect_to_region("us-east-1", **auth)
>>>conn.get_all_instances()

我收到的错误消息是

boto.exception.EC2ResponseError: EC2ResponseError: 401 Unauthorized
AuthFailure
AWS was not able to validate the provided access credentials

起初我以为我的凭据没有正确提供。但是,在Windows中:

C:\>SET AWS_ACCESS_KEY=my_access_key
C:\>SET AWS_SECRET_ACCESS_KEY=my_secret_key
C:\>python
>>>import os
>>>from boto import ec2
>>>auth = {"aws_access_key_id":os.environ.get("AWS_ACCESS_KEY"),
>>>"aws_secret_access_key":os.environ.get("AWS_SECRET_ACCESS_KEY")}
>>>conn = ec2.connect_to_region("us-east-1", **auth)
>>>conn.get_all_instances()

按预期返回所有预留。我比较了两个Python shell中auth的值,它们是相同的。 Python和boto版本看起来是一样的。我没有尝试使用boto配置文件,但我不愿意,因为这是一个脚本的组件,应该可由我组织中的多个用户部署。

有更好的方法来通过我的身份验证吗?我缺少Linux / Windows的细微差别吗?

2 个答案:

答案 0 :(得分:2)

我遇到了这个问题,实际上这是一个我什至没有想到的非常简单的问题。如果系统缺少.aws目录中的配置文件,则AWS将给出凭据问题(即使存储桶是公共访问权限)。我使用WinSCP将.aws文件从Windows上的主目录传输到linux系统上的主目录,并且运行正常。

答案 1 :(得分:1)

新惯例是使用AWS_ACCESS_KEY_ID而不是AWS_ACCESS_KEY,可能是您的Windows机器上有旧版本的Boto。