使用 IAM 权限控制对 REST 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 实体。将权限策略附加到用户、角色或组。
要提供访问权限,请为您的用户、组或角色添加权限:
-
AWS IAM Identity Center 中的用户和群组:
创建权限集合。按照《AWS IAM Identity Center 用户指南》中创建权限集的说明进行操作。
-
通过身份提供商在 IAM 中托管的用户:
创建适用于身份联合验证的角色。按照《IAM 用户指南》中为第三方身份提供商创建角色(联合身份验证)的说明进行操作。
-
IAM 用户:
-
创建您的用户可以担任的角色。按照《IAM 用户指南》中为 IAM 用户创建角色的说明进行操作。
-
(不推荐使用)将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》中向用户添加权限(控制台)中的说明进行操作。
-
有关如何使用此许可模型的更多信息,请参阅 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:Invoke
或 execute-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 服务。