View a markdown version of this page

针对含授权 ID 的访问拒绝错误消息(预览)进行问题排查 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

针对含授权 ID 的访问拒绝错误消息(预览)进行问题排查

重要

Access Troubleshooter 目前处于公开预览版。

概述

Amazon 拒绝对受支持 API 的请求时,访问拒绝错误响应通常会包含授权 ID。此 ID 引用了该已拒绝请求的授权评估。要检索评估的详细信息并确定导致拒绝的原因,请向 GetRequestAuthorizationDetails API 发出请求并提供授权 ID,或打开错误消息中显示的链接。这样,您就可以通过单次调用来确定请求被拒绝的原因,而无需逐一排查每个拒绝问题。

注意

Amazon 不保证每个已拒绝请求都包含授权 ID。请参阅本文档中的未收到授权 ID 时

以下示例显示了一条访问拒绝错误消息,其中包括策略 ARN、指向 Amazon 管理控制台的链接以及授权 ID:

User: arn:aws:iam::123456789012:user/janedoe is not authorized to perform: iam:CreateInstanceProfile on resource: arn:aws:iam::123456789012:instance-profile/my-instance-profile with an explicit deny in an identity-based policy: arn:aws:iam::123456789012:policy/ExampleDenyPolicy. Go to https://us-east-1.console.aws.amazon.com/iam/home?region=us-east-1#/authorization-details/EXAMPLE1a2b3c4d5e6f7g8h9i0j for complete details, or call the GetRequestAuthorizationDetails API with the following authorization id: EXAMPLE1a2b3c4d5e6f7g8h9i0j

概念和定义

  • 授权详细信息。授权详细信息包括请求上下文、执行的评估以及评估的策略。

  • 授权 ID。受支持的访问拒绝错误响应中包含的唯一标识符。它引用了已拒绝请求的授权评估,也是您传递给 Amazon 管理控制台链接或 GetRequestAuthorizationDetails API 的值。

  • 请求上下文。为请求评估的条件上下文键的值。这包括全局条件上下文键和特定于服务的条件上下文键。

  • 评估。对于请求中的每个操作/资源对,会包括所应用的条件上下文键、评估结果 [ALLOWEXPLICIT_DENY(策略显式拒绝操作)或 IMPLICIT_DENY(没有策略允许操作)] 以及与此操作/资源对匹配的每个策略和语句的引用。每个引用都是一个策略 ARN(适用于托管式策略)或 URI(适用于内联策略和其他非托管式策略),可在整个响应中重复使用。

  • 授权期间评估的策略。Amazon 为请求考虑的策略,包括与操作/资源对不匹配的策略。每个条目均给出策略类型(例如,基于身份、基于资源、SCP、RCP、权限边界或会话策略),以及评估中使用的同一 ARN(适用于托管式策略)或 URI(适用于内联策略和其他非托管式策略)。使用 ARN 或 URI 将策略与引用此策略的评估进行匹配。“附加到”字段显示评估的策略所关联的主体 ARN

结合使用这些结果来确定是哪个策略拒绝访问以及拒绝的原因。评估反映了拒绝时的策略状态。策略可能会在此后发生变化。

Amazon 会在受支持 API 的访问拒绝错误响应中自动包含授权 ID,但不保证一定包含授权 ID。在某些情况下,Amazon 不会记录拒绝的授权详细信息,错误响应中也不会包含授权 ID。详细信息可能无法在记录后就立即获取,因为 Amazon 以异步方式记录这些信息。如果调用 GetRequestAuthorizationDetails 返回未找到响应,请稍等片刻后重试。Amazon 会在拒绝发生后保留授权详细信息 24 小时。

使用 Amazon 管理控制台进行问题排查

选择访问拒绝错误消息中的链接,在 Access Troubleshooter 控制台中打开授权详细信息。

  • 要查找的内容。Access Troubleshooter 控制台显示请求中每个操作/资源对的评估结果(AllowExplicit denyImplicit deny)以及考虑的策略。找到被拒绝的操作/资源对以及导致拒绝的策略。作为示例,请参阅下面的屏幕截图:

    Access Troubleshooter 控制台的屏幕截图,其中包含显式拒绝和隐式拒绝。
  • 确定拒绝是否为预期行为。在更改策略之前,先查看评估结果。拒绝可能是正确的,原因有时在于请求上下文而非策略本身。例如,请求可能缺少预期的会话标签,或来自非预期的网络路径。

  • 如何解决拒绝。找到相应的策略并对其进行更新,以解决访问问题。对于显式拒绝,删除或缩小操作的 Deny 语句范围。对于隐式拒绝,为操作添加 Allow 语句。有关更多信息,请参阅 编辑 IAM 策略

谁可以访问授权详细信息。对于单个账户或单个组织内的请求,获授予 iam:GetRequestAuthorizationDetails 访问权限的任何用户都可以访问请求的详细信息。对于跨多个组织的请求,给定组织中的用户只能查看与其所在组织相关的详细信息。

使用 Amazon API 或 Amazon CLI 进行问题排查

要使用 Amazon API 或 Amazon CLI 对拒绝进行问题排查,请执行以下操作:

  1. 在访问拒绝错误响应中找到授权 ID。

  2. 在发生拒绝的同一 Amazon Web Services 区域中,使用授权 ID 调用 GetRequestAuthorizationDetails。以下示例显示了 Amazon CLI 命令:

    aws iam-toolbox get-request-authorization-details \ --region us-east-1 \ --authorization-id EXAMPLE1a2b3c4d5e6f7g8h9i0j
  3. 查看评估结果,确定哪些策略拒绝了访问以及拒绝的原因。

  4. 更新找到的策略以解决访问问题。有关更多信息,请参阅 编辑 IAM 策略

未收到授权 ID 时

在以下情况下,Amazon 不会返回授权 ID:

  • 授权太大,无法记录。当请求涉及大量策略时,Amazon 可能会决定不记录此请求。

  • 服务尚不受支持。请参阅受支持的服务

  • 不支持 API。受支持服务中的某些 API 不会返回授权 ID。

  • 不支持的请求类型。这包括服务代表您发出的请求以及匿名请求。

如果您未收到授权 ID,请参阅排查访问被拒绝错误消息,了解诊断拒绝的其他方法。

其他注意事项

所需权限:要调用 GetRequestAuthorizationDetails,您必须具有 iam:GetRequestAuthorizationDetails 操作的权限。

区域 API。GetRequestAuthorizationDetails 是一个区域 API。在生成访问拒绝错误和授权 ID 的同一 Amazon Web Services 区域中调用此 API。

跨组织请求。当被拒绝的请求涉及多个组织时,GetRequestAuthorizationDetails 仅返回属于您组织的详细信息。这一点在两个方向都适用:如果您属于被拒绝调用方所在的组织,则只能看到与此组织相关的详细信息。如果您属于被拒绝资源所在的组织,则只能看到与此组织相关的详细信息。系统不会返回其他组织拥有的详细信息,例如组织的策略或上下文键值。

如果您收到尚未包含授权 ID 的 API、服务或区域的访问拒绝错误,请参阅排查访问被拒绝错误消息

受支持的服务

正在逐步推出对 Amazon API 和 Amazon Web Services 区域中的 GetRequestAuthorizationDetails 的支持。以下服务支持 GetRequestAuthorizationDetails

  • IAM 中的大多数 API