Amazon API Gateway
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 IAM 许可控制对 API 的访问

使用IAM 许可,通过控制以下两个 API Gateway 组件进程的访问许可控制对 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 实体。您可以将许可策略挂载到代表开发人员的 IAM 用户、包含用户的 IAM 组,或者是用户担任的 IAM 角色

在本 IAM 策略文档中,IAM Resource 元素包含一系列 API Gateway API 实体,其中包括 API Gateway 资源API Gateway 链接关系。IAM Action 元素包含了必要的 API Gateway API 管理操作。这些操作采用 apigateway:HTTP_VERB 格式声明,其中 apigateway 表示 API Gateway 的底层 API 管理组件,HTTP_VERB 表示受 API Gateway 支持的 HTTP 动词。

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

用于调用 API 的 API Gateway 许可模型

要使 API 调用方可调用 API 或刷新其缓存,您必须创建相关的 IAM 策略,允许指定的 API 调用方调用已启用 IAM 用户身份验证的 API 方法。API 开发人员可将该方法的 authorizationType 属性设置为 AWS_IAM,要求调用方提交 IAM 用户的访问密钥以进行身份验证。然后将策略挂载到代表 API 调用方的 IAM 用户、包含用户的 IAM 组,或者是用户担任的 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 服务的访问控制,您可以使用基于调用方的许可模型,将许可策略直接挂载到调用方的 IAM 用户或组;或者使用基于角色的许可模型,将许可策略挂载到 API Gateway 可担任的 IAM 角色。在两种模型中的许可策略可能有所不同。例如,当基于调用方的策略可阻止访问时,基于角色的策略可能会允许访问。您可以利用这一点要求 IAM 用户仅通过 API Gateway API 访问 AWS 服务。