繁体   English   中英

即使使用服务主体从 EC2 调用 Boto3 assume_role 时 AccessDenied

[英]AccessDenied when calling Boto3 assume_role from EC2 even with service principal

我在尝试让 Python 脚本在 EC2 实例上运行时遇到问题,该脚本承担执行 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 角色。

  2. 我尝试使用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 操作时发生错误(拒绝访问):用户:arn:aws:sts::<account_number>:assumed-role/<role_name>/i-<instance_id> 无权执行: sts:AssumeRole 资源:arn:aws:iam::<account_number>:role/<role_name>

关于此的所有其他 StackOverflow 问题都讨论角色的信任策略,但我的设置为允许 EC2。 因此,要么我误解了政策应该是什么,要么存在我无法弄清楚的其他错误。

不必显式调用sts.assume_role 如果该角色附加到 EC2 实例, boto3将在后台无缝使用。您可以像往常一样使用 boto3,它会负责为您使用 IAM 角色。 您无需采取任何行动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM