AWS Boto 连接仅适用于 Windows Python shell

AWS Boto connection only works from Windows Python shell

目前,我正在尝试从 Windows 8 OS 中的 Ubuntu 14 VM 运行ning 连接到 AWS。在Ubuntushell,我运行:

$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()

Returns 所有预订均符合预期。我比较了 Python shell 的 auth 值,它们是相同的。 Python 和 boto 版本似乎相同。我没有尝试使用 boto 配置文件,但我不想这样做,因为这是脚本的一个组件,应该由我组织中的多个用户部署。

有没有更好的方法通过我的身份验证? Linux/Windows 有什么我遗漏的细微差别吗?

新约定是使用 AWS_ACCESS_KEY_ID 而不是 AWS_ACCESS_KEY 可能你的 Windows 机器上有旧版本的 Boto。

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