1

目前,我正在尝试从在 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 的一些细微差别吗?

4

2 回答 2

2

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

于 2020-07-23T20:07:41.903 回答
1

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

于 2015-06-26T18:15:00.563 回答