

# 排查访问被拒绝错误消息
<a name="troubleshoot_access-denied"></a>

以下信息可以帮助您识别、诊断和解决 Amazon Identity and Access Management 访问被拒绝错误。当 Amazon 显式或隐式拒绝授权请求时，将显示拒绝访问错误讯息。
+ 当策略包含特定的 Amazon 操作的 `Deny` 语句时，将发生*显式拒绝*。
+ 当没有适用的 `Deny` 语句且没有适用的 `Allow` 语句时，会发生*隐式拒绝*。由于 IAM policy 默认拒绝 IAM 主体，因此该策略必须显式允许主体执行操作。否则，该策略会隐式拒绝访问。有关更多信息，请参阅 [显式拒绝和隐式拒绝之间的区别](reference_policies_evaluation-logic_AccessPolicyLanguage_Interplay.md)。

当您向服务或资源发出请求时，可能会有多个策略适用于该请求。除了错误消息中指定的策略外，还要查看所有适用的策略。
+ 如果同一策略类型的多个策略拒绝某个请求，则访问被拒绝错误消息不会指定评估的策略数量。
+ 如果授权请求被多种策略类型拒绝，则 Amazon 仅在错误消息中包含其中一种策略类型。

**重要**  
**登录 Amazon 时遇到问题？** 请确保使用的是适合您用户类型的 [Amazon 登录页面](https://docs.amazonaws.cn/signin/latest/userguide/console-sign-in-tutorials.html)。如果您是 Amazon Web Services 账户根用户（账户拥有者），则可以使用您在创建 Amazon Web Services 账户 时设置的凭证登录 Amazon。如果您是 IAM 用户，则您的账户管理员可以向您提供 Amazon 登录凭证。如果您需要请求支持，则请不要使用此页面上的反馈链接。表格由 Amazon 文档团队接收，而不是 Amazon Web Services 支持。请在[联系我们](https://www.amazonaws.cn/contact-us/)页面上选择**仍然无法登录 Amazon 账户**，然后选择一个可用的支持选项。

## 当我向某个 Amazon 服务发送请求时，收到了“访问被拒绝”
<a name="troubleshoot_general_access-denied-service"></a>
+ 检查错误消息是否包含负责拒绝访问的策略类型和 [Amazon 资源名称（ARN）](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。如果是这种情况，请检查指定策略中是否有针对该操作的拒绝语句。如果提供了策略类型但没有策略 ARN，则重点解决该策略类型的问题：检查指定类型的策略中是否有针对该操作的拒绝语句。如果错误消息没有提到与拒绝访问有关的策略类型，请使用本部分中的其余指南进一步排除故障。
+ 验证您是否具有调用您请求的操作和资源的基于身份的策略权限。如果设置了任何条件，您还必须在发送请求时满足这些条件。有关查看或修改用于 IAM 用户、组或角色的策略的信息，请参阅 [管理 IAM 策略](access_policies_manage.md)。
+ 如果 Amazon Web Services 管理控制台 返回消息称您无权执行某个操作，则必须联系您的管理员寻求帮助。您的管理员为您提供了登录凭证或登录链接。

  当 `mateojackson` IAM 用户尝试使用控制台查看有关虚构 `my-example-widget` 资源的详细信息，但不具有虚构 `widgets:GetWidget` 权限时，会发生以下示例错误。

  ```
  User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: widgets:GetWidget on resource: my-example-widget
  ```

  在这种情况下，Mateo 必须请求他的管理员更新其策略，以允许他使用 `widgets:GetWidget` 操作访问 `my-example-widget` 资源。
+ 您是否尝试访问支持[基于资源的策略](access_policies_identity-vs-resource.md)（如 Amazon S3、Amazon SNS 或 Amazon SQS）的服务？ 如果是，请确认策略将您指定为主体并为您授予访问权限。如果您在您的账户中向服务发出请求，基于身份的策略或基于资源的策略将向您授予相应的权限。如果您在不同的账户中向服务发出请求，则基于身份的策略和基于资源的策略这两者都必须向您授予权限。要查看哪些服务支持基于资源的策略，请参阅[使用 IAM 的 Amazon 服务](reference_aws-services-that-work-with-iam.md)。
+ 如果您的策略包含的条件具有键值对，请仔细检查。示例包括 [`aws:RequestTag/tag-key`](reference_policies_condition-keys.md) 全局条件密钥、 Amazon KMS [kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context](kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context) 和多个服务支持的 `ResourceTag/tag-key` 条件键。确保键名称不与多个结果匹配。由于条件键名称不区分大小写，因为检查名为 `foo` 的键的条件将与 `foo`、`Foo` 或 `FOO` 匹配。如果您的请求包含多个键值对，其中的键名称只是大小写形式不同，则您的访问可能会被意外拒绝。有关更多信息，请参阅 [IAM JSON 策略元素：Condition](reference_policies_elements_condition.md)。
+ 如果您具有[权限边界](access_policies_boundaries.md)，请验证用于权限边界的策略是否允许您的请求。如果基于身份的策略允许请求，但权限边界不允许，则会拒绝请求。权限边界控制 IAM 主体（用户或角色）可以拥有的最大权限。基于资源的策略不受权限边界限制。权限边界不常用。有关 Amazon 如何评估这些策略的更多信息，请参阅 [策略评估逻辑](reference_policies_evaluation-logic.md)。
+ 如果您手动签署请求（不使用 [Amazon SDK](https://www.amazonaws.cn/developer/tools/)），请验证您已正确[签署请求](https://docs.amazonaws.cn/general/latest/gr/signing_aws_api_requests.html)。
+ 如果您使用的是 [Amazon VPC 端点策略](https://docs.amazonaws.cn//vpc/latest/privatelink/vpc-endpoints-access.html)，但出现了 Amazon CloudTrail 未记录的拒绝访问错误，则可能是因为 VPC 端点所有者账户与调用账户或目标角色账户不一致所致。

## 当我使用临时安全凭证发送请求时，收到了“访问被拒绝”
<a name="troubleshoot_general_access-denied-temp-creds"></a>
+ 首先，请确保您未因与您的临时凭证无关的原因而被拒绝访问。有关更多信息，请参阅 [当我向某个 Amazon 服务发送请求时，收到了“访问被拒绝”](#troubleshoot_general_access-denied-service)。
+ 要验证服务是否接受临时安全凭证，请参阅[使用 IAM 的 Amazon 服务](reference_aws-services-that-work-with-iam.md)。
+ 验证您的请求是否采用了正确的签名和适当的格式。有关详细信息，请参阅[工具包](https://www.amazonaws.cn/developer/tools/)文档或 [将临时凭证用于 Amazon 资源](id_credentials_temp_use-resources.md)。
+ 验证您的临时安全凭证没有过期。有关更多信息，请参阅 [IAM 临时安全凭证](id_credentials_temp.md)。
+ 验证 IAM 用户或角色拥有正确的权限。临时安全凭证的权限派生自 IAM 用户或角色。因此，权限限于向您已担任其临时凭证的角色授予的权限。有关如何确定临时安全凭证的权限的更多信息，请参阅 [临时安全凭证的权限](id_credentials_temp_control-access.md)。
+ 如果您担任一个角色，您的角色会话可能受会话策略的限制。以编程方式使用 Amazon STS [请求临时安全凭证](id_credentials_temp_request.md)时，您可以选择传递内联或托管[会话策略](access_policies.md#policies_session)。会话策略是高级策略，在以编程方式为角色创建临时凭证会话时，这些策略将作为参数进行传递。您可以使用 `Policy` 参数传递单个 JSON 内联会话策略文档。您可以使用 `PolicyArns` 参数指定最多 10 个托管会话策略。生成的会话的权限是角色的基于身份的策略与会话策略的交集。或者，如果您的管理员或自定义程序为您提供临时凭证，它们可能已包含会话策略以限制您的访问。
+ 如果您是 Amazon STS 联合用户主体，您的会话可能受会话策略的限制。您以 IAM 用户身份登录到 Amazon，然后请求联合令牌，以创建联合用户。有关更多信息，请参阅 [通过自定义身份凭证代理程序请求凭证](id_credentials_temp_request.md#api_getfederationtoken)。在请求联合令牌时，如果您或您的身份代理传递了会话策略，则您的会话受这些策略的限制。生成的会话的权限是您的 IAM 用户的基于身份的策略与会话策略的交集。有关会话策略的更多信息，请参阅[会话策略](access_policies.md#policies_session)。
+ 如果您使用角色访问具有基于资源的策略的资源，则验证策略已授予该角色权限。例如，以下策略允许 `MyRole` 从账户 `111122223333` 访问 `amzn-s3-demo-bucket`。

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
      "Sid": "S3BucketPolicy",
      "Effect": "Allow",
      "Principal": {"AWS": ["arn:aws:iam::111122223333:role/MyRole"]},
      "Action": ["s3:PutObject"],
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/*"]
    }]
  }
  ```

------

## Access Troubleshooter
<a name="access-troubleshooter"></a>

**注意**  
Access Troubleshooter 逐渐适用于所有地区的所有 Amazon 服务，适用于单一账户和单一组织场景。数据的丰富性将不断演变。

您可以使用 Access Troublooter 来调试和解决访问被拒绝的错误。

Access Troubleshooter 提供以下功能：
+ [查看请求和评估详情](#access-troubleshooter-request-details): 主体、行动、资源、背景和评估结果。
+ [查看个人授权评估](#access-troubleshooter-individual-evaluation): 对单个操作和资源对的授权评估。
+ [查看所有策略及其各个语句](#access-troubleshooter-policy-statements): 所有已评估的策略及其各自语句，并附有每项策略的评估结果。

### Access Troubleshooter 的权限
<a name="access-troubleshooter-permissions"></a>

要使用 Access Troubleshooter，您必须拥有主体的`iam:TroubleshootAccess`权限。允许此操作意味着您允许主体查看所有授权上下文详细信息，包括已评估的所有策略的上下文密钥和语句。

以下示例策略授予必要的权限：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:TroubleshootAccess",
            "Resource": "*"
        }
    ]
}
```

### 使用 Access Troubleshooter
<a name="access-troubleshooter-using"></a>

收到拒绝访问错误时，错误消息中包含一个链接和一个 AuthorizationID，您可以将其与 Access Troubleshooter 一起使用。以下示例显示了拒绝访问错误消息：

```
An error occurred (AccessDenied) when calling the RestoreTableFromBackup operation: User: arn:aws:sts:012345678901:assumedRole/DatabaseDev/RestoreBackupSession is not authorized to perform: dynamodb:RestoreTableFromBackup with an explicit deny in an identity policy. Go to https://console.aws.amazon.com/iam/home#/access-troubleshooter for complete details, or call the iam:GetAuthorizationDetails API with the following authorization id: 67f1576b-af29-4c66-9b2b-10fd67516713
```

如果您拥有相应的权限，则可以在控制台上选择 **IAM 中的疑难解答**，打开新的 Access Troubleshooter 选项卡。

或者，您可以使用 AuthorizationID 调用 `iam:GetAuthorizationDetails` API：

```
aws iam get-authorization-details --authorization-id 67f1576b-af29-4c66-9b2b-10fd67516713
```

如果您是管理员并且开发人员提供了 authorizationID，则可以前往 IAM 控制台并输入 authorizationID 来检索授权上下文的详细信息。

### 查看请求和评估详情
<a name="access-troubleshooter-request-details"></a>

Access Troubleshooter 提供了评估中考虑的请求详细信息。您可以查看您尝试的操作或 API 调用、授权 ID、进行调用的主体、您尝试访问的资源以及评估结果。

### 查看个人授权评估
<a name="access-troubleshooter-individual-evaluation"></a>

要成功调用操作，您可能需要额外权限才能执行相关操作。例如，要在 DynamoDB 上执行 `RestoreTableFromBackup`，您需要 `dynamodb:BatchWriteItem`、`dynamodb:DeleteItem`、`dynamodb:GetItem`、`dynamodb:PutItem`、`dynamodb:Query`、`dynamodb:Scan` 和 `dynamodb:UpdateItem` 的权限。这些操作是根据您要访问的资源进行评估的。有关更多信息，请参阅《[服务授权参考](https://docs.amazonaws.cn/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)》。

### 查看所有策略及其各个语句
<a name="access-troubleshooter-policy-statements"></a>

在许多情况下，多个策略会影响您的授权，并且每个策略可以包含多个声明。Access Troubleshooter 列出了在您执行操作时评估的所有策略。您可以查看这些策略中的各个语句以及每个语句的评估结果，从而为您提供有效解决问题的完整视图。

## 拒绝访问错误消息示例
<a name="access-denied-error-examples"></a>

大多数拒绝访问的错误消息都以 `User user is not authorized to perform action on resource because context` 格式显示。在此示例中，*用户*是被拒绝访问的主体的 ARN，*操作*是策略拒绝的服务操作，而*资源*是策略对其执行操作的资源的 ARN。*上下文*字段提供有关拒绝访问的策略类型的其他上下文。在某些情况下，它还包含拒绝访问策略的 ARN。

当策略因包含 `Deny` 语句而显式拒绝访问时，Amazon 将在拒绝访问错误消息中包含短语 `with an explicit deny in a type policy`。此短语还可以指定策略的 ARN，如下所示：`with an explicit deny in a type policy: policy ARN`。

当策略隐式拒绝访问时，Amazon 将在拒绝访问错误消息中包含短语 `because no type policy allows the action action`。

**注意**  
某些 Amazon 服务不支持这种拒绝访问的错误消息格式。拒绝访问错误消息的内容可能因发出授权请求的服务而异。

下面的示例展示了不同类型的拒绝访问错误消息的格式。

### 由于服务控制策略而拒绝访问 – 隐式拒绝
<a name="access-denied-scp-examples-implicit"></a>

1. 检查服务控制策略（SCP）中的操作是否有缺少的 `Allow` 语句。对于以下示例，操作为 `codecommit:ListRepositories`。

1. 通过添加 `Allow` 语句来更新 SCP。有关更多信息，请参阅 *Amazon Organizations 用户指南*中的[更新 SCP](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_manage_policies_scps_create.html#update_policy)。

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codecommit:ListRepositories
because no service control policy allows the codecommit:ListRespositories action
```

### 由于服务控制策略而拒绝访问 – 显式拒绝
<a name="access-denied-scp-examples-explicit"></a>

1. 如果错误消息中提供了策略 ARN，请查看指定服务控制策略（SCP）中操作的 `Deny` 语句。在下面的示例中，操作为 `codecommit:ListRepositories`。

1. 如果错误消息中未提供策略 ARN，请查看 SCP 中操作的 `Deny` 语句。

1. 通过删除 `Deny` 语句来更新 SCP。有关更多信息，请参阅《Amazon Organizations User Guide》**中的 [Update a service control policy (SCP)](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_policies_update.html#update_policy)。

包含策略 ARN 的错误消息：

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codecommit:ListRepositories
with an explicit deny in a service control policy: arn:aws:organizations::777788889999:policy/o-exampleorgid/service_control_policy/p-examplepolicyid123
```

不包含策略 ARN 的错误消息：

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codecommit:ListRepositories
with an explicit deny in a service control policy
```

### 由于资源控制策略而拒绝访问 – 显式拒绝
<a name="access-denied-rcp-examples-explicit"></a>

1. 如果错误消息中提供了策略 ARN，请查看指定资源控制策略（RCP）中操作的 `Deny` 语句。在下面的示例中，操作为 `secretsmanager:GetSecretValue`。

1. 如果错误消息中未提供策略 ARN，请查看 RCP 中操作的 `Deny` 语句。

1. 通过删除 `Deny` 语句来更新 RCP。有关更多信息，请参阅《Amazon Organizations User Guide》**中的 [Update a resource control policy (RCP)](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_policies_update.html#update_policy-rcp)。

包含策略 ARN 的错误消息：

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: secretsmanager:GetSecretValue
on resource: arn:aws:secretsmanager:us-east-1:123456789012:secret:*
with an explicit deny in a resource control policy: arn:aws:organizations::777788889999:policy/o-exampleorgid/resource_control_policy/p-examplepolicyid456
```

不包含策略 ARN 的错误消息：

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: secretsmanager:GetSecretValue
on resource: arn:aws:secretsmanager:us-east-1:123456789012:secret:*
with an explicit deny in a resource control policy
```

### 由于 VPC 端点策略而拒绝访问 – 隐式拒绝
<a name="access-denied-vpc-endpoint-examples-implicit.title"></a>

1. 检查虚拟私有云（VPC）端点策略中的操作是否有缺失的 `Allow` 语句。对于以下示例，操作为 `codecommit:ListRepositories`。

1. 通过添加 `Allow` 语句来更新 VPC 端点策略。有关更多信息，请参阅《Amazon PrivateLink 指南》**中的[更新 VPC 端点策略](https://docs.amazonaws.cn/vpc/latest/privatelink/vpc-endpoints-access.html#update-vpc-endpoint-policy)。

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codecommit:ListRepositories
because no VPC endpoint policy allows the codecommit:ListRepositories action
```

### 由于 VPC 端点策略而拒绝访问 – 显式拒绝
<a name="access-denied-vpc-endpoint-examples-explicit.title"></a>

1. 检查虚拟私有云（VPC）端点策略中的操作是否有显式 `Deny` 语句。对于以下示例，操作为 `codedeploy:ListDeployments`。

1. 通过删除 `Deny` 语句来更新 VPC 端点策略。有关更多信息，请参阅《Amazon PrivateLink 指南》**中的[更新 VPC 端点策略](https://docs.amazonaws.cn/vpc/latest/privatelink/vpc-endpoints-access.html#update-vpc-endpoint-policy)。

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codedeploy:ListDeployments
on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:*
with an explicit deny in a VPC endpoint policy
```

### 由于权限边界而拒绝访问 – 隐式拒绝
<a name="access-denied-permissions-boundary-examples-implicit"></a>

1. 检查权限边界中的操作是否有缺失的 `Allow` 语句。对于以下示例，操作为 `codedeploy:ListDeployments`。

1. 通过将 `Allow` 语句添加到 IAM policy 来更新权限边界。有关更多信息，请参阅[IAM 实体的权限边界](access_policies_boundaries.md)和[编辑 IAM 策略](access_policies_manage-edit.md)。

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codedeploy:ListDeployments
on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:*
because no permissions boundary allows the codedeploy:ListDeployments action
```

### 由于权限边界而拒绝访问 – 显式拒绝
<a name="access-denied-permissions-boundary-examples-explicit"></a>

1. 如果错误消息中提供了策略 ARN，请查看指定权限边界中操作的 `Deny` 语句。在下面的示例中，操作为 `sagemaker:ListModels`。

1. 如果错误消息中提供了策略 ARN，请查看附加到主体的权限边界中操作的 `Deny` 语句。

1. 通过从 IAM policy 删除 `Deny` 语句来更新权限边界。有关更多信息，请参阅[IAM 实体的权限边界](access_policies_boundaries.md)和[编辑 IAM 策略](access_policies_manage-edit.md)。

包含策略 ARN 的错误消息：

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: sagemaker:ListModels
with an explicit deny in a permissions boundary: arn:aws:iam::123456789012:policy/DeveloperPermissionBoundary
```

不包含策略 ARN 的错误消息：

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: sagemaker:ListModels
with an explicit deny in a permissions boundary
```

### 由于会话策略而拒绝访问 – 隐式拒绝
<a name="access-denied-session-policy-examples-implicit"></a>

1. 检查会话策略中的操作是否有缺失的 `Allow` 语句。对于以下示例，操作为 `codecommit:ListRepositories`。

1. 通过添加 `Allow` 语句来更新会话策略。有关更多信息，请参阅[会话策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html#policies_session)和 [编辑 IAM 策略](access_policies_manage-edit.md)。

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codecommit:ListRepositories
because no session policy allows the codecommit:ListRepositories action
```

### 由于会话策略而拒绝访问 – 显式拒绝
<a name="access-denied-session-policy-examples-explicit"></a>

1. 如果错误消息中提供了策略 ARN，请查看指定会话策略中操作的 `Deny` 语句。在下面的示例中，操作为 `codedeploy:ListDeployments`。

1. 如果错误消息中未提供策略 ARN，请查看会话策略中操作的 `Deny` 语句。

1. 通过删除 `Deny` 语句来更新会话策略。有关更多信息，请参阅[会话策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html#policies_session)和 [编辑 IAM 策略](access_policies_manage-edit.md)。

包含策略 ARN 的错误消息：

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codedeploy:ListDeployments
on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:*
with an explicit deny in a session policy: arn:aws:iam::123456789012:policy/DeveloperSessionPolicy
```

不包含策略 ARN 的错误消息：

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codedeploy:ListDeployments
on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:*
with an explicit deny in a session policy
```

### 由于基于资源的策略而拒绝访问 – 隐式拒绝
<a name="access-denied-resource-based-policy-examples-implicit"></a>

1. 检查基于资源的策略中的操作是否有缺失的 `Allow` 语句。对于以下示例，操作为 `secretsmanager:GetSecretValue`。

1. 通过添加 `Allow` 语句来更新策略。有关更多信息，请参阅[基于资源的策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html#policies_resource-based)和 [编辑 IAM 策略](access_policies_manage-edit.md)。

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: secretsmanager:GetSecretValue
because no resource-based policy allows the secretsmanager:GetSecretValue action
```

### 由于基于资源的策略而拒绝访问 – 显式拒绝
<a name="access-denied-resource-based-policy-examples-explicit"></a>

1. 检查基于资源的策略中的操作是否有显式 `Deny` 语句。对于以下示例，操作为 `secretsmanager:GetSecretValue`。

1. 通过删除 `Deny` 语句来更新策略。有关更多信息，请参阅[基于资源的策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html#policies_resource-based)和 [编辑 IAM 策略](access_policies_manage-edit.md)。

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: secretsmanager:GetSecretValue
on resource: arn:aws:secretsmanager:us-east-1:123456789012:secret:*
with an explicit deny in a resource-based policy
```

### 由于角色信任策略而拒绝访问 – 隐式拒绝
<a name="access-denied-role-trust-policy-examples-implicit"></a>

1. 检查角色信任策略中的操作是否有缺失的 `Allow` 语句。对于以下示例，操作为 `sts:AssumeRole`。

1. 通过添加 `Allow` 语句来更新策略。有关更多信息，请参阅[基于资源的策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html#policies_resource-based)和 [编辑 IAM 策略](access_policies_manage-edit.md)。

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: sts:AssumeRole
because no role trust policy allows the sts:AssumeRole action
```

### 由于角色信任策略而拒绝访问 – 显式拒绝
<a name="access-denied-role-trust-policy-examples-explicit"></a>

1. 检查角色信任策略中的操作是否有显式 `Deny` 语句。对于以下示例，操作为 `sts:AssumeRole`。

1. 通过删除 `Deny` 语句来更新策略。有关更多信息，请参阅[基于资源的策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html#policies_resource-based)和 [编辑 IAM 策略](access_policies_manage-edit.md)。

```
User: arn:aws:iam::123456789012:user/John is not authorized to perform: sts:AssumeRole
with an explicit deny in the role trust policy
```

### 由于基于身份的策略而拒绝访问 – 隐式拒绝
<a name="access-denied-identity-based-policy-examples-implicit"></a>

1. 检查附加到身份的基于身份的策略中的操作中是否有缺失的 `Allow` 语句。对于以下示例，操作为附加到角色 `HR` 的 `codecommit:ListRepositories`。

1. 通过添加 `Allow` 语句来更新策略。有关更多信息，请参阅[基于身份的策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html#policies_id-based)和 [编辑 IAM 策略](access_policies_manage-edit.md)。

```
User: arn:aws:iam::123456789012:role/HR is not authorized to perform: codecommit:ListRepositories
because no identity-based policy allows the codecommit:ListRepositories action
```

### 由于基于身份的策略而拒绝访问 – 显式拒绝
<a name="access-denied-identity-based-policy-examples-explicit"></a>

1. 如果错误消息中提供了策略 ARN，请查看指定策略中操作的 `Deny` 语句。在下面的示例中，操作为 `codedeploy:ListDeployments`。

1. 如果错误消息中未提供策略 ARN，请查看附加到身份的、基于身份的策略中操作的 `Deny` 语句。

1. 通过删除 `Deny` 语句来更新策略。有关更多信息，请参阅[基于身份的策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html#policies_id-based)和 [编辑 IAM 策略](access_policies_manage-edit.md)。

包含策略 ARN 的错误消息：

```
User: arn:aws:iam::123456789012:role/HR is not authorized to perform: codedeploy:ListDeployments
on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:*
with an explicit deny in an identity-based policy: arn:aws:iam::123456789012:policy/HRAccessPolicy
```

不包含策略 ARN 的错误消息：

```
User: arn:aws:iam::123456789012:role/HR is not authorized to perform: codedeploy:ListDeployments
on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:*
with an explicit deny in an identity-based policy
```