我在尝试让运行在EC2示例上的Python脚本承担执行S3任务的角色时遇到了一个问题。
1.已创建具有AmazonS3FullAccess
权限的IAM角色,并获得以下ARN
:arn:aws:iam::<account_number>:role/<role_name>
信任策略被设置为主体是一个EC2服务,我将其解释为允许帐户中的任何EC2示例承担该角色。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
1.我启动了一个EC2示例并附加了上面的IAM角色。
1.我尝试使用Boto3
调用assume_role()
session = boto3.Session()
sts = session.client("sts")
response = sts.assume_role(
RoleArn="arn:aws:iam::<account_number>:role/<role_name>",
RoleSessionName="role_session_name"
)
但它会抛出以下错误:
botocore.exceptions.ClientError:调用AssumeRole操作时出错(AccessDenied):用户arn:aws:sts::<account_number>:假定角色/<role_name>/i-未被授权执行以下操作<instance_id>:sts:资源上的AssumeRole:arn:aws:iam::<account_number>:角色/<role_name>
关于此问题的所有其他StackOverflow问题都讨论了角色的信任策略,但我的问题设置为允许EC2。因此,要么我误解了策略应该是什么,要么存在其他一些我无法找出的错误。
1条答案
按热度按时间i7uq4tfw1#
您不必显式调用
sts.assume_role
。如果角色附加到EC2示例,boto3
将在后台无缝使用。您可以像平常一样使用boto3,它将负责为您使用IAM角色。您无需执行任何操作。