【问题标题】:AWS Boto connection only works from Windows Python shellAWS Boto 连接仅适用于 Windows Python shell
【发布时间】:2015-09-13 16:55:45
【问题描述】:

目前,我正在尝试从在 Windows 8 操作系统中运行的 Ubuntu 14 虚拟机连接到 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 的一些细微差别吗?

【问题讨论】:

    标签: python linux windows boto aws-ec2


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      新的约定是使用AWS_ACCESS_KEY_ID 而不是AWS_ACCESS_KEY 可能您的Windows 机器上安装了旧版本的Boto。

      【讨论】:

      • 自 boto 2.35.0 以来,它使用了对时钟偏差更敏感的身份验证方法,因此,如果一个人的时钟与 EC2 的时钟相差超过 5 分钟,则会导致此错误 - github.com/boto/boto/issues/2885
      猜你喜欢
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多