使用boto3启停EC2实例报UnauthorizedOperation权限错误如何解决?
问题解决指导
核心错误原因
你当前的配置错误属于策略绑定主体不匹配:
- 你将权限策略绑定到了待启停的EC2实例的IAM角色上,但你的Python脚本中硬编码了
aws_access_key_id和aws_secret_access_key,实际发起API请求的身份是该AK/SK对应的IAM用户,因此权限策略需要绑定到该IAM用户而非目标EC2实例的角色。 - 你解码报错得到的长权限列表是AWS的通用错误匹配结果,和你的启停单台EC2的场景完全无关,无需添加列表中除
ec2:StartInstances/ec2:StopInstances之外的任何权限,避免过度授权带来安全风险。 - 你配置的
iam:PassRole权限属于多余配置,启停EC2实例不需要该权限,可以直接删除。
正确配置步骤
- 登录AWS控制台,找到脚本中AK/SK对应的IAM用户
- 为该IAM用户附加下方的权限策略,替换策略中的占位符为你的实际参数
- 策略修改后等待1-2分钟让权限生效,再重试脚本
- 可选优化:不要在脚本中硬编码AK/SK,避免凭证泄露,推荐使用
~/.aws/credentials凭证文件或者环境变量存储凭证
可直接使用的权限策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeInstanceStatus", "ec2:DescribeTags" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances", "ec2:RebootInstances" ], "Resource": "arn:aws:ec2:us-east-2:你的AWS账号ID:instance:你的目标EC2实例ID" } ] }
额外排查点
如果配置后仍然报错,检查以下项:
- 确认ARN中的AWS账号ID、实例ID、区域三个参数和你实际的配置完全匹配,任意字符错误都会导致鉴权失败
- 确认对应IAM用户没有附加限制启停EC2的权限边界
- 如果你使用的是企业组织下的子账号,确认上级组织没有配置禁止启停EC2的服务控制策略(SCP)
内容的提问来源于stack exchange,提问作者nkoch73
相关产品推荐
相关产品推荐

