使用 IAM 权限控制对 API 的访问 - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 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 实体。您可以将权限策略附加到代表开发人员的 IAM 用户、包含用户的 IAM 组,或者是用户担任的 IAM 角色

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

用于调用 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 在后端集成Amazon服务(例如 Amazon Lambda)时,API Gateway 还必须具有代表 API 调用方访问集成的Amazon资源(例如,调用 Lambda 函数)的许可。要授予这些权限,请创建适用于 API Gateway 的Amazon服务类型的 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 管理控制台中创建这样的策略,或调用 Amazon CLI create-policy 命令或相应的开发工具包方法创建这样的策略。

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

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

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

注意

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