为什么我在尝试启动 EC2 实例时,会收到错误消息“You are not authorized to perform this operation”?

上次更新时间:2020 年 3 月 30 日

我在尝试启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例时收到错误“An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation.Encoded authorization failure message encoded-message"。如何解决此问题? 

简短描述

“UnauthorizedOperation”错误表示附加到 AWS Identity and Access Management (IAM) 角色的权限,或尝试执行操作的用户不具有所需的权限来启动 EC2 实例。由于此错误涉及一个编码消息,因此,请使用 AWS 命令行界面 (AWS CLI) 来解码此消息。此解码可提供有关授权失败的更多详细信息。

先决条件

尝试对已编码消息进行解码的 IAM 用户或角色必须通过 IAM 策略获得执行 DecodeAuthorizationMesssage (sts:DecodeAuthorizationMessage) 操作的授权。如果用户或角色没有此权限,则解码操作会失败,并显示以下错误消息:

“Error: A client error (AccessDenied) occurred when calling the DecodeAuthorizationMessage operation: User: xxx is not authorized to perform: (sts:DecodeAuthorizationMessage) action”。

有关 DecodeAuthorizationMessage 操作的更多信息,请参阅 DecodeAuthorizationMessage

解决方法

1.    通过运行以下命令,验证您的计算机上已安装配置了 AWS CLI。

$ aws --version

2.    运行 decode-authorization-message 命令。将 encoded-message 替换为错误消息中包含的编码消息。

$ aws sts decode-authorization-message --encoded-message encoded-message

3.    已解码消息会列出 IAM 角色或用户策略中缺少的所需权限。

下面是一个已编码消息示例。

Launch Failed - You are not authorized to perform this operation. Encoded authorization failure message: 4GIOHlTkIaWHQD0Q0m6XSnuUMCm-abcdefghijklmn-abcdefghijklmn-abcdefghijklmn

下面是一个已解码消息示例。

$ aws sts decode-authorization-message --encoded-message 4GIOHlTkIaWHQD0Q0m6XSnuUMCm-abcdefghijklmn-abcdefghijklmn-abcdefghijklmn

{
    "DecodedMessage": 
"{\"allowed\":false,\"explicitDeny\":false,\"matchedStatements\":{\"items\":[]},\"failures\":{\"items\":[]},\"context\":{\"principal\":{\"id\":\"ABCDEFGHIJKLMNO\",\"name\":\"AWS-User\",
\"arn\":\"arn:aws:iam::accountID:user/test-user\"},\"action\":\"iam:PassRole\",
\"resource\":\"arn:aws:iam::accountID:role/EC2_instance_Profile_role\",\"conditions\":{\"items\":[{\"key\":\"aws:Region\",\"values\":{\"items\":[{\"value\":\"us-east-2\"}]}},
{\"key\":\"aws:Service\",\"values\":{\"items\":[{\"value\":\"ec2\"}]}},{\"key\":\"aws:Resource\",\"values\":{\"items\":[{\"value\":\"role/EC2_instance_Profile_role\"}]}},
{\"key\":\"iam:RoleName\",\"values\":{\"items\":[{\"value\":\"EC2_instance_Profile_role\"}]}},{\"key\":\"aws:Account\",\"values\":{\"items\":[{\"value\":\"accountID\"}]}},
{\"key\":\"aws:Type\",\"values\":{\"items\":[{\"value\":\"role\"}]}},{\"key\":\"aws:ARN\",\"values\":{\"items\":[{\"value\":\"arn:aws:iam::accountID:role/EC2_instance_Profile_role\"}]}}]}}}"
}

上述错误消息表示调用 RunInstances 请求失败,是因为 AWS-User 没有在 arn:aws:iam::accountID:role/EC2_instance_Profile_role 上执行 iam:PassRole 操作的权限。

4.    编辑与 IAM 角色或用户相关的 IAM 策略,以添加缺少的权限。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?