这个问题通常是因为您尝试使用根账户(Root Account)来扮演(Assume)其他AWS角色(Roles)所致。请尝试用一个中间角色(Intermediate Role)作为跳板来代替根账户进行身份验证。
以下是一个Python代码示例,它使用中间角色来代替根账户来扮演其他角色:
import boto3
# 您的AWS密钥
aws_access_key_id = 'YOUR_AWS_ACCESS_KEY_ID'
aws_secret_access_key = 'YOUR_AWS_SECRET_ACCESS_KEY'
# 中间角色ARN
role_arn = 'arn:aws:iam::123456789012:role/MyRole'
# 定义你想要扮演的角色ARN
target_arn = 'arn:aws:iam::123456789012:role/TargetRole'
# 创建一条代表中间角色的会话
session = boto3.Session(
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
)
sts_client = session.client('sts')
response = sts_client.assume_role(
RoleArn=role_arn,
RoleSessionName='AssumeRoleSession1',
)
# 使用代表中间角色的凭证来进行扮演其他角色
credentials = response["Credentials"]
sts = boto3.client('sts',
aws_access_key_id=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_session_token=credentials['SessionToken'])
response = sts.assume_role(
RoleArn=target_arn,
RoleSessionName='AssumeRoleSession2'
)
# 取得被扮演角色的凭证
target_credentials = response['Credentials']
# 使用被扮演角色的凭证来做其他操作
# ...
这个示例中,我们首先创建一条代表中间角色的会话。然后,我们使用代表中间角色的凭证来扮演其他角色。最后,我们使用被扮演角色的凭证来进行其他所需操作。