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