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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

控制对 API Gateway API 的访问

要控制谁可以访问您的 Amazon API Gateway,您可以在Amazon SAMTemplate。

Amazon SAM支持多种用于控制对 API Gateway API 的访问的机制。支持的机制集不同于AWS::Serverless::HttpApiAWS::Serverless::Api资源类型。

下表总结了每种资源类型支持的机制。

控制访问的机制 AWS::Serverless::HttpApi AWS::Serverless::Api
Lambda 授权方
IAM 权限
Amazon Cognito user pools ✓ *
API 密钥
资源策略
OAuth 2.0/JWT 授权方

* 您可以使用 Amazon Cognito 作为 JSON Web Token (JWT) 颁发者,AWS::Serverless::HttpApi资源类型。

  • Lambda 授权方— Lambda 授权器(以前称为自定义授权方)是 Lambda 函数,您为控制对 API 的访问而提供。调用 API 时,此 Lambda 函数将使用客户端应用程序提供的请求上下文或授权令牌调用。Lambda 函数响应调用者是否有权执行请求的操作。

    这两种AWS::Serverless::HttpApiAWS::Serverless::Api资源类型支持 Lambda 授权方。

    有关 Lambda 授权方与AWS::Serverless::HttpApi,请参阅使用Amazon LambdaHTTP API 的授权方中的API Gateway 开发人员指南. 有关 Lambda 授权方与AWS::Serverless::Api,请参阅使用 API Gateway Lambda 授权方中的API Gateway 开发人员指南.

    有关任一资源类型的 Lambda 授权器的示例,请参阅Lambda 授权方示例.

  • IAM 权限— 您可以控制谁可以使用Amazon Identity and Access Management(IAM) 权限. 调用您的 API 的用户必须使用 IAM 证书进行身份验证。只有在 IAM 用户附加了代表 API 调用者、包含该用户的 IAM 组或用户担任的 IAM 角色的 IAM 策略时,对您的 API 的调用才会成功。

    AWS::Serverless::Api资源类型支持 IAM 权限。

    有关更多信息,请参阅 。使用 IAM 权限控制对 API 的访问中的API Gateway 开发人员指南. 有关示例,请参阅IAM 权限示例

  • Amazon Cognito 用户池— Amazon Cognito 用户池是 Amazon Cognito 中的用户目录。API 的客户端必须首先将用户登录到用户池,并获取该用户的身份或访问令牌。然后客户端使用返回的令牌之一调用您的 API。只有在所需的令牌有效时,API 调用才会成功。

    这些区域有:AWS::Serverless::Api资源类型支持 Amazon Cognito 用户池。这些区域有:AWS::Serverless::HttpApi资源类型支持使用 Amazon Cognito 作为 JWT 颁发者。

    有关更多信息,请参阅 。使用 Amazon Cognito 用户池作为授权方控制对 REST API 的访问中的API Gateway 开发人员指南. 有关示例,请参阅Amazon Cognito 用户池示例

  • API 密钥— API 密钥是字母数字符串值,可将它分发给应用程序开发人员(要向其授予对您的 API 的访问权的客户)。

    AWS::Serverless::Api资源类型支持 API 密钥。

    有关 API 密钥的更多信息,请参阅。创建和使用带 API 密钥的使用计划中的API Gateway 开发人员指南. 有关 API 密钥的示例,请参阅API 密钥示例.

  • 资源策略— 资源策略是可附加到 API Gateway API 的 JSON 策略文档。使用资源策略可控制指定的委托人(通常是 IAM 用户或角色)能否调用 API。

    AWS::Serverless::Api资源类型支持资源策略作为控制对 API Gateway API 访问的机制。

    有关资源策略的更多信息,请参阅。使用 API Gateway 资源策略控制对 API 的访问中的API Gateway 开发人员指南. 有关资源策略的示例,请参阅。资源策略示例.

  • OAuth 2.0/JWT 授权方— 您可以使用 JWT 作为OpenID Connect (OIDC)OAuth 2.0框架来控制对 API 的访问。API Gateway 验证客户端通过 API 请求提交的 JWT,并根据令牌中的令牌验证和(可选)作用域来允许或拒绝请求。

    AWS::Serverless::HttpApi资源类型支持 OAuth 2.0/JWT 授权程序。

    有关更多信息,请参阅 。使用 JWT 授权方控制对 HTTP API 的访问中的API Gateway 开发人员指南. 有关示例,请参阅OAuth 2.0/JWT 授权方示例

选择控制访问的机制

您选择用于控制 API Gateway API 访问的机制取决于几个因素。例如,如果您有一个未设置授权或访问控制的绿地项目,那么 Amazon Cognito 用户池可能是您的最佳选择。这是因为当您设置用户池时,您还会自动设置身份验证和访问控制。

但是,如果您的应用程序已经设置了身份验证,那么使用 Lambda 授权器可能是您的最佳选择。这是因为您可以调用现有的身份验证服务并根据响应返回策略文档。此外,如果您的应用程序需要用户池不支持的自定义身份验证或访问控制逻辑,则 Lambda 授权者可能是您的最佳选择。

选择要使用的机制后,请参阅Examples了解如何使用Amazon SAM配置您的应用程序以使用该机制。

自定义错误响应

您可以使用Amazon SAM来自定义某些 API Gateway 错误响应的内容。仅AWS::Serverless::Api资源类型支持自定义 API Gateway 响应。

有关 API Gateway 响应的更多信息,请参阅。API Gateway 中的网关响应中的API Gateway 开发人员指南. 有关自定义响应的示例,请参阅。自定义响应示例.

Examples