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

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

控制对 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 用户池 ✓ *
API 密钥
资源策略
OAuth 2.0/JWT 授权方

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

  • Lambda 授权方— Lambda 授权者(以前称为自定义授权方) 是您为控制对 API 的访问而提供的 Lambda 函数。调用 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 权限— 您可以使用下列方式控制谁可以调用 API。Amazon Identity and Access Management(IAM) 权限. 调用 API 的用户必须使用 IAM 凭证进行身份验证。只有在附加到代表 API 调用者的 IAM 用户、包含该用户的 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 颁发者。

    有关更多信息,请参阅《API Gateway 开发人员指南》中的使用 Amazon Cognito 用户池作为授权方控制对 REST API 的访问。有关示例,请参阅 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 授权者。

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

选择控制访问的机制

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

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

选择使用哪种机制后,请参阅中的相应部分示例了解如何使用Amazon SAM将应用程序配置为使用该机制。

自定义错误响应

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

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

示例