

# 使用 IAM 权限控制对 REST API 的访问
<a name="permissions"></a>

 通过控制对以下两个 API Gateway 组件进程的访问，您可以使用 [IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_controlling.html)控制对 Amazon API Gateway API 的访问：
+  要在 API Gateway 中创建、部署和管理 API，您必须授予 API 开发人员相关权限，使其可执行受 API Gateway 的 API 管理组件支持的必要操作。
+  要调用已部署的 API 或者刷新 API 缓存，您必须授予 API 调用方相应权限，使其可执行受 API Gateway 的 API 执行组件支持的必要 IAM 操作。

 对此两个进程的访问控制将采用两种不同的许可模型，我们将在下文进行说明。

## 用于创建和管理 API 的 API Gateway 权限模型
<a name="api-gateway-control-access-iam-permissions-model-for-managing-api"></a>

 要使 API 开发人员可在 API Gateway 中创建和管理 API，您必须[创建 IAM 权限策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)，允许特定的 API 开发人员创建、更新、部署、查看或删除必要的 [API 实体](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html)。将权限策略附加到用户、角色或组。

要提供访问权限，请为您的用户、组或角色添加权限：
+ AWS IAM Identity Center 中的用户和群组：

  创建权限集合。按照《AWS IAM Identity Center 用户指南》**中[创建权限集](https://docs.aws.amazon.com//singlesignon/latest/userguide/howtocreatepermissionset.html)的说明进行操作。
+ 通过身份提供者在 IAM 中托管的用户：

  创建适用于身份联合验证的角色。按照《IAM 用户指南》**中[针对第三方身份提供者创建角色（联合身份验证）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-idp.html)的说明进行操作。
+ IAM 用户：
  + 创建您的用户可以担任的角色。按照《IAM 用户指南》**中[为 IAM 用户创建角色](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create_for-user.html)的说明进行操作。
  + （不推荐使用）将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》**中[向用户添加权限（控制台）](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)中的说明进行操作。

有关如何使用此许可模型的更多信息，请参阅 [API Gateway 基于身份的策略](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies)。

## 用于调用 API 的 API Gateway 权限模型
<a name="api-gateway-control-access-iam-permissions-model-for-calling-api"></a>

要使 API 调用方可调用 API 或刷新其缓存，您必须创建相关的 IAM policy，以允许指定的 API 调用方调用已启用用户身份验证的 API 方法。API 开发人员可将该方法的 `authorizationType` 属性设置为 `AWS_IAM`，以要求调用方提交用户的凭证以进行身份验证。API Gateway 支持使用签名版本 4a（SigV4a）和签名版本 4（SigV4）来验证用户的凭证。有关更多信息，请参阅 [AWS 签名版本 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。然后，将该策略附加到您的用户、角色或组。

在此 IAM 权限策略语句中，IAM `Resource` 元素包含一系列已部署的 API 方法，并使用给定的 HTTP 动词和 API Gateway [资源路径](https://docs.aws.amazon.com/apigateway/latest/api/API_Resource.html)进行识别。IAM `Action` 元素包含必要的 API Gateway API 执行操作。这些操作包括 `execute-api:Invoke` 或 `execute-api:InvalidateCache`，其中 `execute-api` 表示 API Gateway 的底层 API 执行组件。

有关如何使用此许可模型的更多信息，请参阅 [针对调用 API 的访问控制](api-gateway-control-access-using-iam-policies-to-invoke-api.md)。

 当 API 在后端集成AWS服务（例如 AWS Lambda）时，API Gateway 还必须具有代表 API 调用方访问集成的AWS资源（例如，调用 Lambda 函数）的许可。要授予这些权限，请创建**适用于 API Gateway 的AWS服务**类型的 IAM 角色。当您在 IAM 管理控制台中创建该角色时，生成的角色包含以下 IAM 信任策略，该策略声明 API Gateway 为可信实体，允许其代入该角色：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

如果您通过调用 [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) CLI 命令或相应的开发工具包方法创建 IAM 角色，则必须提供以上信任策略作为 `assume-role-policy-document` 的输入参数。请勿试图直接在 IAM 管理控制台中创建这样的策略，或调用 AWS CLI [create-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/create-policy.html) 命令或相应的开发工具包方法创建这样的策略。

要让 API Gateway 调用集成的AWS服务，您还必须为此角色附加适用于调用集成的AWS服务的 IAM 权限策略。例如，要调用 Lambda 函数，您必须在 IAM 角色中包含以下 IAM 权限策略：

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

****  

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

------

请注意，Lambda 支持结合了信任策略和权限策略这两者的基于资源的标准访问策略。当使用 API Gateway 控制台集成 API 与 Lambda 函数时，系统不会明确要求您设置此 IAM 角色，因为控制台会经您同意，对 Lambda 函数设置基于资源的权限。

**注意**  
 要制定对 AWS 服务的访问控制，您可以使用基于调用方的权限模型，将权限策略直接附加到调用方的用户或组；或者使用基于角色的权限模型，将权限策略附加到 API Gateway 可代入的 IAM 角色。在两种模型中的许可策略可能有所不同。例如，当基于调用方的策略可阻止访问时，基于角色的策略可能会允许访问。您可以利用这一点来要求用户仅通过 API Gateway API 访问 AWS 服务。