使用 IAM 权限控制对 API 的访问 - Amazon API Gateway

使用 IAM 权限控制对 API 的访问

通过控制对以下两个 API Gateway 组件进程的访问,您可以使用 IAM 权限控制对 Amazon API Gateway API 的访问:

  • 要在 API Gateway 中创建、部署和管理 API,您必须授予 API 开发人员相关权限,使其可执行受 API Gateway 的 API 管理组件支持的必要操作。

  • 要调用已部署的 API 或者刷新 API 缓存,您必须授予 API 调用方相应权限,使其可执行受 API Gateway 的 API 执行组件支持的必要 IAM 操作。

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

用于创建和管理 API 的 API Gateway 权限模型

要使 API 开发人员可在 API Gateway 中创建和管理 API,您必须创建 IAM 权限策略,允许特定的 API 开发人员创建、更新、部署、查看或删除必要的 API 实体。将权限策略附加到用户、角色或组。

要提供访问权限,请为您的用户、组或角色添加权限:

有关如何使用此许可模型的更多信息,请参阅 API Gateway 基于身份的策略

用于调用 API 的 API Gateway 权限模型

要使 API 调用方可调用 API 或刷新其缓存,您必须创建相关的 IAM policy,以允许指定的 API 调用方调用已启用用户身份验证的 API 方法。API 开发人员可将该方法的 authorizationType 属性设置为 AWS_IAM,以要求调用方提交用户的凭证以进行身份验证。然后,将该策略附加到您的用户、角色或组。

在此 IAM 权限策略语句中,IAM Resource 元素包含一系列已部署的 API 方法,并使用给定的 HTTP 动词和 API Gateway 资源路径进行识别。IAM Action 元素包含必要的 API Gateway API 执行操作。这些操作包括 execute-api:Invokeexecute-api:InvalidateCache,其中 execute-api 表示 API Gateway 的底层 API 执行组件。

有关如何使用此许可模型的更多信息,请参阅 针对调用 API 的访问控制

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

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

如果您通过调用 create-role CLI 命令或相应的开发工具包方法创建 IAM 角色,则必须提供以上信任策略作为 assume-role-policy-document 的输入参数。请勿试图直接在 IAM 管理控制台中创建这样的策略,或调用 AWS CLI create-policy 命令或相应的开发工具包方法创建这样的策略。

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

{ "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 服务。