在多个aws账户上运行python脚本的最佳解决方案

问题描述 投票:0回答:1

我想使用 boto3 sdk 通过多个 aws 帐户运行 python 脚本。我有一个在多个 aws 账户中拥有角色的用户。我将利用 sts 并迭代每个帐户 ARN,以便在每个帐户中承担角色并执行任务。但是,我不想对用于 ARN 的帐户 ID 和角色名称进行硬编码。最优化的解决方案是将这些数据存储到一个文件(可能是 json 文件)中,然后从那里提取帐户数据来承担角色?

配置 json 文件并对角色帐户 ID/角色名称进行硬编码

python amazon-web-services aws-lambda boto3 amazon-iam
1个回答
0
投票

我的脑海中浮现出两个解决方案:

1.) 使用 Python De Couple 包并将敏感值保存在“.env”文件中。

您将使用以下命令安装 Python De Couple 包:

pip install python-decouple

然后创建一个 .env 文件并将敏感值放入其中,如下所示:

AWS_ACCESS_KEY_ID=<value>
AWS_SECRET_ACCESS_KEY=<value>

注意:不要在值中使用引号,并且显然将文件添加到您的 .gitignore

然后要获取脚本中的值,您需要从 de Couple 导入配置

from decouple import config

要在脚本中引用变量,您可以这样做:

AWS_SECRET_ACCESS_KEY = config("AWS_SECRET_ACCESS_KEY")

您现在可以在脚本中自由使用此变量

2.)我想到的第二种方法是在 aws cli 中创建多个配置文件

要查看您当前使用的配置文件:

aws configure list-profiles

为每个角色创建个人资料:

aws configure —profile <profile_name>

然后系统将提示您输入访问密钥 ID、秘密访问、密钥、默认区域和默认输出格式。

要在 boto3 脚本中引用配置文件,请使用:

session = boto3.Session(profile_name=‘profile_1’)

根据您的脚本的外观,您可以迭代您需要的所有配置文件。也许是这样的:

profiles = [profile1, profile2, profile3]

for profile in profiles:
    session = boto3.Session(profile_name=profile)
    # Then something like this:
    ec2 = session.client(‘ec2’)
    # Rest of your code
© www.soinside.com 2019 - 2024. All rights reserved.