跳至内容

如何解码和分析 EC2 实例启动失败的“UnauthorizedOperation”授权错误?

1 分钟阅读
0

当我尝试启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例时,我收到以下错误: “调用 RunInstances 操作时出错 (UnauthorizedOperation): You are not authorized to perform this operation.Encoded authorization failure message encoded-message".

简短描述

当 AWS Identity and Access Management (IAM) 策略过于严格时,可能会出现 UnauthorizedOperation 错误。当 IAM 用户无权启动 EC2 实例时,也可能发生此错误。要获取有关失败的更多详细信息,请使用 AWS 命令行界面 (AWS CLI) 或 AWS CloudShell 对错误消息中的编码消息进行解码。编码消息类似于以下示例:

“启动失败 - 您无权执行此操作。已编码的授权失败消息: 4GIOHlTkIaWHQD0Q0m6XSnuUMCm-abcdefghijklmn-abcdefghijklmn-abcdefghijklmn”

**注意:**要对编码消息进行解码,IAM 用户或角色必须拥有执行 DecodeAuthorizationMesssage API 操作的权限。如果该用户或角色没有此权限,则解码操作将失败并显示以下错误消息:

“错误: 调用 DecodeAuthorizationMessage 操作时出现客户端错误 (AccessDenied): 用户 ### 无权执行 (sts:DecodeAuthorizationMessage) 操作”。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

要解码授权失败错误,请完成以下步骤:

  1. 运行 decode-authorization-message 命令:
    aws sts decode-authorization-message --encoded-message encoded-message-error
    **注意:**请将 encoded-message-error 替换为错误消息中的编码消息。
    已解码消息示例:
    aws sts decode-authorization-message --encoded-message 4GIOHlTkIaWHQD0Q0m6XSnuUMCm-abcdefghijklmn-abcdefghijklmn-abcdefghijklmn{
        "DecodedMessage":
    {
    "allowed
    ...
    "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\"}]}}]}}}"
    }
    已解码的消息会列出 IAM 用户或角色策略中缺少的所需权限。
  2. 查看已解码消息中的 principal(主体)、action(操作)、resource(资源)、condition(条件)和 key(键)字段,以获取有关失败原因的详细信息。该消息包括请求的操作和资源、发出请求的主体以及用户请求的条件键值。
    在前面的示例中,该请求会失败,因为 AWS-User 无权对 arn:aws:iam::accountID:role/EC2_instance_Profile_role ARN 执行 iam:PassRole 操作。
  3. 编辑与 IAM 用户或角色关联的 IAM 策略以添加所需的权限。

您还可以使用 IAM policy simulator 对基于身份的策略和 IAM 权限边界进行故障排除。

相关信息

为什么不能在 EC2 实例上运行 AWS CLI 命令?

为什么我无法启动我的 EC2 实例?

对“访问被拒绝”错误消息进行故障排除

AWS 官方已更新 6 个月前