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

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

控制对 API 网关 APIs 的访问

要控制谁可以访问您的 Amazon API Gateway APIs,您可以在 AWS SAM 模板中启用授权。

AWS SAM 支持多种用于控制对 API 网关 APIs 的访问的机制。 在 AWS::Serverless::HttpApiAWS::Serverless::Api 资源类型之间,支持的机制集是不同的。

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

控制访问的机制 AWS::Serverless::HttpApi AWS::Serverless::Api
Lambda authorizers
IAM permissions
Amazon Cognito 用户池 ✓ *
API 密钥
资源策略
OAuth 2.0/JWT 授权方

* 您可以将 Amazon Cognito 用作具有 AWS::Serverless::HttpApi 资源类型的 JSON Web 令牌 (JWT) 颁发者。

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

    AWS::Serverless::HttpApi 资源类型均支持 AWS::Serverless::Api 授权方。Lambda

    有关使用 Lambda 的 AWS::Serverless::HttpApi 授权方的更多信息,请参阅 中的AWS Lambda使用适用于 HTTP 的 APIs 授权方API 网关 开发人员指南有关使用 Lambda 的 AWS::Serverless::Api 授权方的更多信息,请参阅 中的API 网关使用 Lambda 授权方。API 网关 开发人员指南

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

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

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

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

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

    资源类型支持 AWS::Serverless::Api 用户池。Amazon Cognito资源类型支持使用 AWS::Serverless::HttpApi 作为 JWT 发布者。Amazon Cognito

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

  • API 密钥 – API 密钥是您分发给应用程序开发人员客户的字母数字字符串值,用于授予对您的 API 的访问权限。

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

    有关 API 密钥的更多信息,请参阅 https://docs.amazonaws.cn/apigateway/latest/developerguide/api-gateway-api-usage-plans.html 中的创建和使用带 API 密钥的使用计划API 网关 开发人员指南。有关 API 密钥的示例,请参阅API 密钥示例

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

    只有 AWS::Serverless::Api 资源类型支持将资源策略作为用于控制对 API 网关 APIs 的访问的机制。

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

  • OAuth 2.0/JWT 授权方 您可以使用 – 作为 JWTs连接 (OIDC)OpenID 和 OAuth 2.0 框架的一部分来控制对 APIs 的访问。API 网关 使用 API 请求验证客户端提交的 JWTs,并基于令牌验证和(可选)令牌中的范围允许或拒绝请求。

    只有 AWS::Serverless::HttpApi 资源类型支持 OAuth 2.0/JWT 授权方。

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

选择用于控制访问的机制

您选择用于控制对 API 网关 APIs 的访问的机制取决于几个因素。例如,如果您有一个没有设置授权或访问控制的绿色字段项目,则 Amazon Cognito 用户池可能是您的最佳选择。这是因为,当您设置 用户池时,您还将自动设置身份验证和访问控制。

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

在选择要使用的机制后,请参阅Examples中的相应部分,了解如何使用 AWS SAM 配置应用程序以使用该机制。

自定义错误响应

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

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

Examples