管理多个 AWS 账户凭证的推荐方法?

2024-03-27

通过以下方式管理多个 Amazon Web Services (AWS) 账户的最佳方式是什么boto?

我熟悉博托配置 http://docs.pythonboto.org/en/latest/boto_config_tut.html文件,我正在使用。但每个文件仅描述一个帐户......而且我正在与多个组织合作。出于所有常见的法律、财务和安全原因,这些帐户不能混合。

目前我正在使用一个boto每个帐户的配置文件。例如。:

  • ~/.boto默认帐户
  • ~/.boto_clowncollege对于“小丑学院”帐户
  • ~/.boto_razorassoc对于“razorassoc”帐户
  • ~/.boto_xyz对于“xyz”帐户

然后是这样的:

def boto_config_path(account=None):
    """
    Given an account name, return the path to the corresponding boto
    configuration file. If no account given, return the default config file.
    """
    path = '~/.boto' + ('_' + account if account else '')
    clean_path = os.path.abspath(os.path.expanduser(path))
    if os.path.isfile(clean_path):
        return clean_path
    else:
        errmsg = "cannot find boto config file {} for {}".format(clean_path, account)
        raise ValueError(errmsg)

def aws_credentials(account=None):
    """
    Return a tuple of AWS credentials (access key id and secret access key) for
    the given account.
    """
    try:
        cfg = INIConfig(open(boto_config_path(account)))
        return ( cfg.Credentials.aws_access_key_id, cfg.Credentials.aws_secret_access_key )
    except Exception:
        raise

conn = EC2Connection(*aws_credentials('razorassoc'))

是好是坏,还是无动于衷?建议改进?


更新于 2015-02-06,修正于 2015-03-19通过以下顶部部分

boto 和 AWSCLI 凭证的新标准化共享 (boto>==2.29.0)

自 boto 2.29 以来,出现了一种新的简单方法来共享 BOTO 和 AWS CLI 凭证,如 Mike 所描述 加纳特在在 AWS 中管理凭证的全新标准化方法 软件开发工具包 http://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs

目标是:

  1. 允许通过 boto、AWSCLI 和可能的其他 SDK 共享凭证
  2. 将所有配置保存在单个文件中,位于用户配置文件目录中
  3. 允许使用命名配置文件
  4. 保持尽可能简单(例如防止与其他方法发生冲突)

创建凭证文件

创建文件~/.aws/credentials(Mac/Linux)或%USERPROFILE%\.aws\credentials(Windows)作为 如下:

[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环境。变量

(这是我最喜欢的选项,将配置文件名称保留在代码之外,并且仍然让我的应用程序的部署者有机会选择特定的配置文件)

$ export AWS_PROFILE=jekyl

并使您的代码像以前一样简单:

import boto
con = boto.connect_s3()

在代码中指定显式配置文件

import boto
con = boto.connect_s3(profile_name="jekyl")

这就是您通常需要做的全部

选择正确凭证的逻辑在博托问题#2292 https://github.com/boto/boto/pull/2292如下:

加载顺序从最高优先级到最低优先级:

1.直接从代码中传递

  1. 密钥/秘密的环境变量

  2. 配置文件的环境变量

  3. 共享凭证文件显式配置文件

  4. 共享凭证文件默认配置文件

  5. 配置文件显式配置文件

  6. 配置文件凭据部分

从代码传递的配置文件会覆盖环境变量中的任何设置。

为了保持事情干净和简单,最好摆脱旧的方法,所以删除任何旧的样式文件(例如~/.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

In your ~/.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 http://docs.pythonboto.org/en/latest/boto_config_tut.html?highlight=profile

甚至还有一些关于使用钥匙圈的注释,但我将首先习惯这个配置文件的东西,这是我多年来梦想的。

与 AWSCLI 共享配置文件

AWSCLI 成为了非常出色的工具。由于配置文件的格式几乎相同,我按以下方式使用它:

  1. keep ~/.aws/config由 AWSCLI 创建的文件(这是默认位置)
  2. 复制部分[default]并将其重命名为[Credentials](在里面保留相同的值)。
  3. 添加我使用的任何配置文件
  4. set BOTO_CONFIG变量指向这个~/.aws/config file.

The ~/.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 共享,包括配置文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

管理多个 AWS 账户凭证的推荐方法? 的相关文章

随机推荐

  • 我的 PHP 卷曲请求出了什么问题,请帮忙..我没有得到任何数据[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 它说浏览器
  • 如何(最好)将 WM_QUIT 发布到正在运行的进程?

    目标 关闭Windows下正在运行的32位GUI进程 我可以访问可执行路径名 该软件可能有多个副本正在运行 但只有一个副本是从唯一的可执行路径名启动的 由于可以运行该可执行文件的多个实例 因此只需查看顶层窗口就需要区分哪个可执行文件路径名实
  • jsPDF fromHTML() 不显示 HTML

    我正在研究一个简单的 javascript 我正在使用 jsPDF 库 但脚本加载了一个空白的 pdf 这是代码
  • 在 Objective-C 中查找一个不区分大小写的字符串

    我的问题类似于Objective C 中如何检查一个字符串是否包含另一个字符串 https stackoverflow com q 2753956 602011 如何检查字符串 NSString 是否包含另一个较小的字符串但忽略大小写 NS
  • 未找到:操作类型未注册“CountExtremelyRandomStats”

    在 docker 容器中运行 bazel 命令时出现以下错误 命令运行 bazel bin tensorflow serving model servers tensorflow model server port 9000 model n
  • 如何连接到docker Oracle实例

    我正在关注这些指示 https github com oracle docker images tree master OracleDatabase 我创建了一个像这样的 docker 容器 docker run name oracle p
  • 删除旧的 .PhpStorm 目录是否安全

    每次我将 PhpStorm 升级到新的单点版本时 我的主目录中都会保留以前的版本 我现在有 PhpStorm2017 1 PhpStorm2017 2 PhpStorm2017 3 PhpStorm2018 1 PhpStorm2018 2
  • 如何在 Android Studio 中编辑 .jar 文件

    如何使用 Android Studio 编辑 jar 文件中的 class 文件中的代码 当然 我已经尝试过编辑它 由于某种原因 我试图编辑的类是只读的 Jar文件是压缩档案 zipped files class文件 以及一些其他资源 cl
  • 学习 C# Excel 互操作的资源 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有哪些资源可以帮助我快速启动并运行 C 中的 Excel 互操作 文章从 Visual Studio 2005 开发人员的角度理解 Exc
  • 使用 scipy 中的 optimization.minimize 和 2 个变量和插值函数

    我没有找到使用多维函数从 scipy 执行 optimize minimize 的方法 在几乎所有示例中 解析函数都得到优化 而我的函数则被插值 测试数据集如下所示 x np array 2000 2500 3000 3500 y np a
  • Spark fat jar 在 YARN 上运行多个版本

    我有一个旧版本的 Spark 设置和 YARN 我不想删除它 但仍然想使用较新的版本 我找到了一个couple https community cloudera com t5 Advanced Analytics Apache Spark
  • 窗口对象中奇怪的 self 对象

    我不明白为什么window在下面self and self在下面window目的 如果你去开发工具或 Firebug 并写window你得到了DOM window反对self位于该对象下 奇怪的部分是window在下面self again
  • 在Vue js中显示错误消息

    我有一个以下组件 其中有一个更新员工的方法 我想在 ajax 调用的 错误 回调中分配 更改 erroMessage 变量后立即在视图中显示错误消息 var EmployeeEdit Vue extend template employee
  • 如何在android中创建选项菜单?

    我想使用 c 和 Xamarin Studio 在 Android 应用程序中创建一个简单的选项菜单 我该怎么做 我还没有找到任何这方面的 C 示例 有人可以简单解释一下如何创建选项菜单吗 定义菜单 创建菜单的一种方法是使用放置在 Xama
  • Maven编译器使用的JDK版本在哪里指定?

    当我没有在我的 pom xml 文件中定义如下内容时 在我的系统上的哪个位置为 Maven 定义了编译时使用哪个版本的 Java JDK 我的系统上安装了多个版本 JAVA HOME指向其中之一
  • 使用 SQL Server 2012 恢复多个数据库的最佳脚本?

    我必须恢复大约 60 个不同大小的 SQL 数据库 我在谷歌上搜索找到一个脚本来依次恢复所有数据库 只需从我的文件夹中一一挑选它 我没有那么成功 可能是因为我对 SQL 等还很陌生 它可以在 powershell 或 sql 命令行中完成
  • 无法使用处理程序解决 CalledFromWrongThreadException

    我会尽量保持简单 在我的主要活动中 我创建了一个处理程序 public class ARViewer extends ARDisplayActivity public final MHandler mHandler new MHandler
  • Linux 发行版二进制兼容性

    有没有办法在 Linux 发行版中制作二进制文件并在具有相同架构的另一个发行版上运行它 或者我应该在不同的发行版上编译和构建它 基于 Redhat Debian 的二进制文件发行版之间是否存在兼容性 我想在 fedora 上使用我的 Ubu
  • 尝试打开工作簿时的 VBA 错误处理

    我试图循环浏览文件夹中的所有文件 打开它们并删除文档信息 我在处理无法打开的文件或打开时出现有关禁用宏的弹出消息时遇到问题 我尝试使用错误恢复下一步和错误转到 0 来解决此问题 但随后我遇到运行时失败 因为当我尝试关闭已打开的文件时 我的工
  • 管理多个 AWS 账户凭证的推荐方法?

    通过以下方式管理多个 Amazon Web Services AWS 账户的最佳方式是什么boto 我熟悉博托配置 http docs pythonboto org en latest boto config tut html文件 我正在使