更新于 2015 年 2 月 6 日,在 2015 年 3 月 19 日通过以下顶部部分更正
boto 和 AWSCLI 凭证的新标准化共享 (boto>==2.29.0)
从 boto 2.29 开始,有一种新的简单方法可以共享 BOTO 和 AWS CLI 凭证,如 Mike Garnaat 在A New and Standardized Way to Manage Credentials in the AWS SDKs 中所述
目的是:
- 允许通过 boto、AWSCLI 和可能的其他 SDK 共享凭证
- 将所有配置保存在单个文件中,位于用户配置文件目录中
- 允许使用命名配置文件
- 尽可能简单(例如防止与其他方法发生冲突)
创建凭据文件
创建文件~/.aws/credentials
(Mac/Linux) 或%USERPROFILE%\.aws\credentials
(Windwos),如下所示:
[default]
aws_access_key_id = AxxxA
aws_secret_access_key = Zxxxr
region = eu-west-1
[jekyl]
aws_access_key_id = AxxxA
aws_secret_access_key = Zxxxr
region = eu-west-1
[hyde]
aws_access_key_id = AxxxZ
aws_secret_access_key = CxxxZ
region = eu-west-1
从现在开始,您可以使用如下代码:
使用默认配置文件
import boto
con = boto.connect_s3()
使用AWS_PROFILE
env 设置的显式配置文件。变量
(这是我最喜欢的选项,将配置文件名称保留在代码之外,并且仍然让我的应用程序的部署者有机会选择特定的配置文件)
$ export AWS_PROFILE=jekyl
并使您的代码像以前一样简单:
import boto
con = boto.connect_s3()
在代码中指定显式配置文件
import boto
con = boto.connect_s3(profile_name="jekyl")
这就是您通常需要做的所有事情
boto issue #2292中描述了选择正确凭据的逻辑,如下所示:
加载顺序从高到低优先级:
1.直接从代码传递
密钥/秘密的环境变量
配置文件的环境变量
共享凭证文件显式配置文件
共享凭证文件默认配置文件
配置文件显式配置文件
配置文件凭据部分
从代码传递的配置文件会覆盖环境变量中的任何集合。
为了使事情保持干净和简单,最好摆脱旧方法,因此删除任何旧样式文件(如~/.aws/config
or ~/.boto
),取消设置环境变量(BOTO_CONFIG
如果已设置),还可能还有此类变量指向的文件。
这就是 boto >=2.29.0 的全部内容
注意:不要试图通过 env.variable(如AWS_CONFIG_FILE
)控制配置文件的位置,它不会按预期工作。
使用 boto 配置文件 (boto>=2.24.0)
以下描述仅适用于无法升级到 boto 2.29.0 或更高版本的用户
自 boto 2.24.0 以来,有一个名为profile_name
在您的~/.boto
文件中,您已经有 [Credentials] 部分,这将作为后备选项,然后 [profile ] 部分用于不同的配置文件:
[Credentials]
aws_access_key_id = AxxxA
aws_secret_access_key = Zxxxr
[profile jekyl]
aws_access_key_id = AxxxA
aws_secret_access_key = Zxxxr
[profile hyde]
aws_access_key_id = AxxxZ
aws_secret_access_key = CxxxZ
然后,在创建连接时,您使用这种方式:
import boto
con = boto.connect_s3(profile_name="jekyl")
请注意,此功能自 boto 2.24.0 起可用。
教程在这里http://docs.pythonboto.org/en/latest/boto_config_tut.html?highlight=profile
甚至还有一些关于使用钥匙圈的注意事项,但我会先习惯这个配置文件的东西,这是我几年前梦寐以求的。
与 AWSCLI 共享配置文件
AWSCLI 成为了非常棒的工具。由于配置文件的格式几乎相同,我使用它的方式如下:
- 保留
~/.aws/config
由 AWSCLI 创建的文件(这是默认位置)
- 复制部分
[default]
并将其重命名为[Credentials]
(内部保留相同的值)。
- 添加我使用的任何配置文件
- 设置
BOTO_CONFIG
变量指向这个~/.aws/config
文件。
然后~/.boto
将变为具有以下内容的 `~/.aws/config:
[default]
aws_access_key_id = AxxxA
aws_secret_access_key = Zxxxr
[Credentials]
aws_access_key_id = AxxxA
aws_secret_access_key = Zxxxr
[profile jekyl]
aws_access_key_id = AxxxA
aws_secret_access_key = Zxxxr
[profile hyde]
aws_access_key_id = AxxxZ
aws_secret_access_key = CxxxZ
通过这种方式,它可以为 AWSCLI 和 boto 共享,包括配置文件。