针对含授权 ID 的访问拒绝错误消息(预览)进行问题排查
重要
Access Troubleshooter 目前处于公开预览版。
概述
Amazon 拒绝对受支持 API 的请求时,访问拒绝错误响应通常会包含授权 ID。此 ID 引用了该已拒绝请求的授权评估。要检索评估的详细信息并确定导致拒绝的原因,请向 GetRequestAuthorizationDetails API 发出请求并提供授权 ID,或打开错误消息中显示的链接。这样,您就可以通过单次调用来确定请求被拒绝的原因,而无需逐一排查每个拒绝问题。
注意
Amazon 不保证每个已拒绝请求都包含授权 ID。请参阅本文档中的未收到授权 ID 时。
以下示例显示了一条访问拒绝错误消息,其中包括策略 ARN、指向 Amazon 管理控制台
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 管理控制台
链接或 GetRequestAuthorizationDetailsAPI 的值。 -
请求上下文。为请求评估的条件上下文键的值。这包括全局条件上下文键和特定于服务的条件上下文键。
-
评估。对于请求中的每个操作/资源对,会包括所应用的条件上下文键、评估结果 [
ALLOW、EXPLICIT_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 控制台显示请求中每个操作/资源对的评估结果(
Allow、Explicit deny或Implicit deny)以及考虑的策略。找到被拒绝的操作/资源对以及导致拒绝的策略。作为示例,请参阅下面的屏幕截图:
-
确定拒绝是否为预期行为。在更改策略之前,先查看评估结果。拒绝可能是正确的,原因有时在于请求上下文而非策略本身。例如,请求可能缺少预期的会话标签,或来自非预期的网络路径。
-
如何解决拒绝。找到相应的策略并对其进行更新,以解决访问问题。对于显式拒绝,删除或缩小操作的
Deny语句范围。对于隐式拒绝,为操作添加Allow语句。有关更多信息,请参阅 编辑 IAM 策略。
谁可以访问授权详细信息。对于单个账户或单个组织内的请求,获授予 iam:GetRequestAuthorizationDetails 访问权限的任何用户都可以访问请求的详细信息。对于跨多个组织的请求,给定组织中的用户只能查看与其所在组织相关的详细信息。
使用 Amazon API 或 Amazon CLI 进行问题排查
要使用 Amazon API 或 Amazon CLI 对拒绝进行问题排查,请执行以下操作:
-
在访问拒绝错误响应中找到授权 ID。
-
在发生拒绝的同一 Amazon Web Services 区域中,使用授权 ID 调用
GetRequestAuthorizationDetails。以下示例显示了 Amazon CLI 命令:aws iam-toolbox get-request-authorization-details \ --region us-east-1 \ --authorization-id EXAMPLE1a2b3c4d5e6f7g8h9i0j -
查看评估结果,确定哪些策略拒绝了访问以及拒绝的原因。
-
更新找到的策略以解决访问问题。有关更多信息,请参阅 编辑 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