python 即使使用服务主体,从EC2调用Boto3 assume_role时也拒绝访问

jjhzyzn0  于 2023-02-02  发布在  Python
关注(0)|答案(1)|浏览(124)

我在尝试让运行在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。因此,要么我误解了策略应该是什么,要么存在其他一些我无法找出的错误。

i7uq4tfw

i7uq4tfw1#

不必显式调用sts.assume_role。如果角色附加到EC2示例,boto3将在后台无缝使用。您可以像平常一样使用boto3,它将负责为您使用IAM角色。您无需执行任何操作。

相关问题