SCENARIO
我有两个AWS账户链接到第三个aws账户,即主账户。
例如,帐户名称为aws_acc_main
,aws_acc_1
,aws_acc_2
aws_main
用于维护其他两个帐户的用户,组和角色。但是,除了IAM之外,主帐户中没有使用其他服务。
使用boto3
和Python
我希望获得帐户1和帐户2的ec2
个实例
AWS配置如下:
.aws /凭证文件
[aws_acc_main]
aws_access_key_id=AKJFJHNUCTYUUAPW
aws_secret_access_key = 2uldfr94tuowjuHUKbnBIby8jhfdgjh
.aws /配置
[aws_acc_main]
output = json
region = eu-west-2
[profile aws_acc_1]
source_profile = aws_acc_main
output = json
region = eu-west-2
role_arn = arn:aws:iam::111111111111:role/ACC1_ROLE
mfa_serial = arn:aws:iam::111111111110:mfa/ABCD
[profile aws_acc_2]
source_profile = aws_acc_main
output = json
region = eu-west-2
role_arn = arn:aws:iam::111111111112:role/ACC2_ROLE
mfa_serial = arn:aws:iam::111111111110:mfa/ABCD
现在是python文件。
test1.py
sessions = ['aws_acc_1', 'aws_acc_2']
for session_name in sessions:
session = boto3.Session(profile_name=session_name)
ec2 = session.client('ec2', region_name='eu-west-2')
resources = ec2.describe_instances()
test2.py
mfa_code = raw_input("Enter the MFA code: ")
client = boto3.client('sts')
response = client.get_session_token(
DurationSeconds=3600,
SerialNumber='arn:aws:iam::111111111110:mfa/ABCD',
TokenCode=mfa_code
)
credentials = response['Credentials']
for session_name in sessions:
session = boto3.Session(profile_name=session_name,
aws_access_key_id = credentials['AccessKeyId'],
aws_secret_access_key = credentials['SecretAccessKey'],
aws_session_token = credentials['SessionToken'],
)
ec2Client = session.client('ec2', region_name='eu-west-2')
resources = ec2.describe_instances()
问题
第一个(test1.py
)工作正常但我必须在每次迭代中为每个帐户提供MFA
。
第二个文件(test2.py
)也没有出现任何错误,但它没有读取EC2
和aws_acc_1
的{{1}}服务,而只是获取了ec2 aws_acc_2
的服务,其中没有任何内容。它甚至没有任何错误。
渴望输出
我想在整个会话期间只给MFA一次。然后,我想切换角色而不是一次又一次地提供MFA。这意味着我想修复 aws_acc_main
。
问题
在AWS Web客户端中,一旦我使用我的用户ID,密码和MFA登录,我就可以在不再一次证明MFA的情况下切换角色。这就是我想要做的。
如果我使用boto3创建会话,如何在不提供MFA的情况下使用同一会话将角色切换到不同的帐户?
请注意......在这种情况下,重要的是test2.py
和aws_acc_1
是aws_acc_2
的一部分,而MFA只能通过{{1 }。