

# 针对含授权 ID 的访问拒绝错误消息（预览）进行问题排查
<a name="troubleshoot_access-denied-authorization-id"></a>

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

## 概述
<a name="access-troubleshooter-overview"></a>

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

**注意**  
 Amazon 不保证每个已拒绝请求都包含授权 ID。请参阅本文档中的[未收到授权 ID 时](#access-troubleshooter-no-authorization-id)。

 以下示例显示了一条访问拒绝错误消息，其中包括策略 [ARN](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)、指向 [Amazon 管理控制台](https://console.amazonaws.cn/)的链接以及授权 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
```

## 概念和定义
<a name="access-troubleshooter-concepts"></a>
+  **授权详细信息。**授权详细信息包括请求上下文、执行的评估以及评估的策略。
+  **授权 ID。**受支持的访问拒绝错误响应中包含的唯一标识符。它引用了已拒绝请求的授权评估，也是您传递给 [Amazon 管理控制台](https://console.amazonaws.cn/)链接或 `GetRequestAuthorizationDetails` API 的值。
+  **请求上下文。**为请求评估的条件上下文键的值。这包括全局条件上下文键和特定于服务的条件上下文键。
+  **评估。**对于请求中的每个操作/资源对，会包括所应用的条件上下文键、评估结果 [`ALLOW`、`EXPLICIT_DENY`（策略显式拒绝操作）或 `IMPLICIT_DENY`（没有策略允许操作）] 以及与此操作/资源对匹配的每个策略和语句的引用。每个引用都是一个策略 [ARN](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)（适用于托管式策略）或 URI（适用于内联策略和其他非托管式策略），可在整个响应中重复使用。
+  **授权期间评估的策略。**Amazon 为请求考虑的策略，包括与操作/资源对不匹配的策略。每个条目均给出策略类型（例如，基于身份、基于资源、SCP、RCP、权限边界或会话策略），以及评估中使用的同一 [ARN](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)（适用于托管式策略）或 URI（适用于内联策略和其他非托管式策略）。使用 [ARN](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns) 或 URI 将策略与引用此策略的评估进行匹配。“附加到”字段显示评估的策略所关联的主体 [ARN](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。

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

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

## 使用 [Amazon 管理控制台](https://console.amazonaws.cn/)进行问题排查
<a name="access-troubleshooter-console"></a>

 选择访问拒绝错误消息中的链接，在 Access Troubleshooter 控制台中打开授权详细信息。
+  **要查找的内容。**Access Troubleshooter 控制台显示请求中每个操作/资源对的评估结果（`Allow`、`Explicit deny` 或 `Implicit deny`）以及考虑的策略。找到被拒绝的操作/资源对以及导致拒绝的策略。作为示例，请参阅下面的屏幕截图：  
![Access Troubleshooter 控制台的屏幕截图，其中包含显式拒绝和隐式拒绝。](https://docs.amazonaws.cn/IAM/latest/UserGuide/images/AccessTroubleshooterConsoleExample.png)
+  **确定拒绝是否为预期行为。**在更改策略之前，先查看评估结果。拒绝可能是正确的，原因有时在于请求上下文而非策略本身。例如，请求可能缺少预期的会话标签，或来自非预期的网络路径。
+  **如何解决拒绝。**找到相应的策略并对其进行更新，以解决访问问题。对于显式拒绝，删除或缩小操作的 `Deny` 语句范围。对于隐式拒绝，为操作添加 `Allow` 语句。有关更多信息，请参阅 [编辑 IAM 策略](access_policies_manage-edit.md)。

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

## 使用 Amazon API 或 Amazon CLI 进行问题排查
<a name="access-troubleshooter-api-cli"></a>

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

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

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

   ```
   aws iam-toolbox get-request-authorization-details \
       --region us-east-1 \
       --authorization-id EXAMPLE1a2b3c4d5e6f7g8h9i0j
   ```

1. 查看评估结果，确定哪些策略拒绝了访问以及拒绝的原因。

1.  更新找到的策略以解决访问问题。有关更多信息，请参阅 [编辑 IAM 策略](access_policies_manage-edit.md)。

## 未收到授权 ID 时
<a name="access-troubleshooter-no-authorization-id"></a>

 在以下情况下，Amazon 不会返回授权 ID：
+  **授权太大，无法记录。**当请求涉及大量策略时，Amazon 可能会决定不记录此请求。
+  **服务尚不受支持。**请参阅[受支持的服务](#access-troubleshooter-supported-services)。
+  **不支持 API。**受支持服务中的某些 API 不会返回授权 ID。
+  **不支持的请求类型。**这包括服务代表您发出的请求以及匿名请求。

 如果您未收到授权 ID，请参阅[排查访问被拒绝错误消息](troubleshoot_access-denied.md)，了解诊断拒绝的其他方法。

## 其他注意事项
<a name="access-troubleshooter-considerations"></a>

 **所需权限：**要调用 `GetRequestAuthorizationDetails`，您必须具有 `iam:GetRequestAuthorizationDetails` 操作的权限。

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

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

 如果您收到尚未包含授权 ID 的 API、服务或区域的访问拒绝错误，请参阅[排查访问被拒绝错误消息](troubleshoot_access-denied.md)。

## 受支持的服务
<a name="access-troubleshooter-supported-services"></a>

 正在逐步推出对 Amazon API 和 Amazon Web Services 区域中的 `GetRequestAuthorizationDetails` 的支持。以下服务支持 `GetRequestAuthorizationDetails`：
+ IAM 中的大多数 API