如何使用boto3和Python创建AWS MFA授权会话,以供其他角色使用

2024-04-27 18:16:31 发布

您现在位置:Python中文网/ 问答频道 /正文

场景

我有两个AWS帐户与第三个AWS帐户,主帐户相关联。 例如,帐户名是aws_acc_mainaws_acc_1aws_acc_2

aws_main用于维护其他两个帐户的用户、组和角色。但是,除IAM外,主帐户中不使用其他服务。在

使用boto3Python我想得到account-1和account-2的ec2实例

AWS配置如下:

.aws/credentials文件

[aws_acc_main]
aws_access_key_id=AKJFJHNUCTYUUAPW
aws_secret_access_key = 2uldfr94tuowjuHUKbnBIby8jhfdgjh

.aws/config

^{pr2}$

现在是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)也没有给出任何错误,但是它没有读取aws_acc_1aws_acc_2EC2服务,而是只得到aws_acc_main的ec2服务,它没有任何内容。它甚至没有给出任何错误。在

期望输出

我想在整个课程中只给MFA一次。然后,我想在不提供MFA的情况下切换角色。这意味着我要修复test2.py。在

问题

在awsweb客户机中,一旦我使用我的userid、password和MFA登录,就可以切换角色,而无需反复验证MFA。这就是我想做的。在

如果我使用boto3创建会话,那么如何使用同一会话将角色切换到不同的帐户而不反复提供MFA?在

请注意。。。在这个场景中,重要的一点是aws_acc_1和{}是{}的一部分,而MFA只通过aws_acc_main来处理。


Tags: keynamepyclientmfaaws角色access