
[英]assume_role does not return and lambda times out (keywords: aws boto3 sts lambda python3.6)
[英]AccessDenied when calling Boto3 assume_role from EC2 even with service principal
我在尝试让 Python 脚本在 EC2 实例上运行时遇到问题,该脚本承担执行 S3 任务的角色。 这是我所做的。
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" } ] }
我启动了一个 EC2 实例并附加了上述 IAM 角色。
我尝试使用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.