管理多个 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 账户凭证的推荐方法? 的相关文章

  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • 计算 for 循环期间的运行总计 - Python

    编辑 下面是我根据收到的反馈 答案编写的工作代码 这个问题源于我之前使用 MIT 的开放课件学习 Python CS 时提出的问题 在这里查看我之前的问题 https stackoverflow com questions 4990159
  • AWS EMR 引导操作为 sudo

    我需要更新 etc hosts适用于我的 EMR 集群 EMR AMI 4 3 中的所有实例 整个脚本无非就是 bin bash echo e ip1 uri1 gt gt etc hosts echo e ip2 uri2 gt gt e
  • 使用opencv+picamera流IO用树莓派捕获视频

    我使用 Raspberry 来简单地显示一个视频 目前仅此 为此 我必须使用 opencv cv2 我尝试了很多解决方案 但现在我想使用 Picamera 库捕获视频 我将向您展示我的代码 import io import time imp
  • 如何解决错误 EGL 驱动程序消息(错误)eglQueryDeviceAttribEXT:使用 Selenium 和 Python 的错误属性

    我从 selenium 收到随机错误消息 即使它们都与我正在运行的确切 Web 驱动程序命令无关 据我所知 此错误不会中断程序 它只是添加不需要的警报 使我的打印件难以阅读 Chrome 版本 75 0 3770 100 官方版本 64 位
  • 生产环境的 Flask-Login 与 Flask-Security

    我正在构建一个功能 供用户注册 登录 验证和授权自己 特别是使用 Python Flask 作为后端 我找到了一些解决方案 例如flask login and flask security 据我了解 flask login实际上并没有进行任
  • 自定义信号的声明

    在 Qt 中 我们可以通过将自定义信号设为静态变量来创建它们 然后我们使用self signame反而classname signame 这样就在类中创建了一个实例变量 我想了解这种模式之外的理论 这是我尝试过的一些伪代码 这些伪代码已记录
  • 使用 Twisted Python 的 UDP 客户端和服务器

    我想创建一个服务器和客户端 使用 Twisted 从网络发送和接收 UDP 数据包 我已经用 Python 中的套接字编写了此代码 但想利用 Twisted 的回调和线程功能 然而 我需要 Twisted 设计方面的帮助 我想接收多种类型的
  • Laravel 作业推送至 Amazon SQS 但未处理

    我正在运行 Laravel 5 3 我正在尝试测试队列作业 并且我已将队列配置为使用 Amazon SQS 我的应用程序能够将作业推送到队列中 并且我可以在 SQS 中看到该作业 但它留在那里 从未被处理 我尝试过跑步php artisan
  • Pandas:向量化局部范围操作([i:i+2] 行的最大值和总和)

    我希望在数据帧中的每一行的局部范围内进行计算 同时避免速度缓慢for环形 例如 对于下面数据中的每一行 我想找到未来 3 天内 包括当天 的最高气温以及未来 3 天内的总降雨量 Day Temperature Rain 0 30 4 1 3
  • 如何在 scikit-learn 的 SVM 中使用非整数字符串标签? Python

    Scikit learn 具有相当用户友好的用于机器学习的 python 模块 我正在尝试训练用于自然语言处理 NLP 的 SVM 标记器 其中我的标签和输入数据是单词和注释 例如 词性标记 而不是使用双精度 整数数据作为输入元组 1 2
  • 使用 Matplotlib、PyQt 和 Threading 进行实时绘图导致 python 崩溃

    我一直在努力研究我的 Python 应用程序 但找不到任何答案 我有 PyQT GUI 应用程序 它使用 Matplotlib 小部件 GUI 启动一个新线程来处理 mpl 小部件的绘图 恐怕我现在通过从另一个线程访问 matplotlib
  • Celery 设计帮助:如何防止并发执行任务

    我对 Celery AMQP 相当陌生 正在尝试提出一个任务 队列 工作人员设计来满足以下要求 我有多种类型的 每用户 任务 例如 TaskA TaskB TaskC 这些 每用户 任务中的每一个都为系统中的一个特定用户读取 写入数据 因此
  • 如何连接两个 Ec2 实例以便它们可以相互通信[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想将两个 EC2 实例相互连接 以便它们可以相互通信 第一个将安装 Wordpress 第二个将配置数据库 例如 Mysql Mar
  • 如何使用 Python Pandas 制作 DataFrame 切片并在特定切片中“fillna”?

    问题 让我们从 Kaggle 获取泰坦尼克号数据集 我有包含 Pclass 性别 和 年龄 列的数据框 我需要用特定组的中位数填充 年龄 列中的 NaN 如果是来自一等的女性 我想用一等女性的中位数填写她的年龄 而不是整个年龄列的中位数 问
  • python 中的异步编程

    python 中有异步编程的通用概念吗 我可以为一个函数分配一个回调 执行它并立即返回主程序流 无论该函数的执行需要多长时间吗 您所描述的 主程序流程在另一个函数执行时立即恢复 不是通常所说的 异步 又名 事件驱动 编程 而是 多任务 又名
  • 在 Django 中翻译文件时的 Git 命令

    我在 Django 中有一个现有的应用程序 我想在页面上添加翻译 在页面上我有 trans Projects 在 po 文件中我添加了 templates staff site html 200 msgid Projects msgid P
  • Django:在单独的线程中使用相同的测试数据库

    我正在使用具有以下数据库设置的测试数据库运行 pytests DATABASES default ENGINE django db backends postgresql psycopg2 NAME postgres USER someth
  • 有效积累稀疏 scipy 矩阵的集合

    我有一个 O N NxN 的集合scipy sparse csr matrix 每个稀疏矩阵都有 N 个元素集 我想将所有这些矩阵加在一起以获得一个常规的 NxN numpy 数组 N 约为 1000 矩阵内非零元素的排列使得所得总和肯定不
  • Scrapy - 持续从数据库中获取要爬取的url

    我想不断地从数据库中获取要爬行的网址 到目前为止 我成功地从基地获取了 url 但我希望我的蜘蛛继续从该基地读取 因为该表将由另一个线程填充 我有一个管道 一旦爬行 工作 就会从表中删除 url 换句话说 我想使用我的数据库作为队列 我尝试

随机推荐

  • 我的 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文件 我正在使