

# 配置跨账户 API Gateway Lambda 授权方
<a name="apigateway-lambda-authorizer-cross-account-lambda-authorizer"></a>

您现在还可以使用其他 AWS Lambda 账户中的 AWS 函数作为 API 授权方函数。每个账户都可以位于 Amazon API Gateway 可用的任何区域中。Lambda 授权方函数可使用持有者令牌身份验证策略，如 OAuth 或 SAML。这样便可轻松地跨多个 API Gateway API 集中管理和共享重要的 Lambda 授权方函数。

在本节中，我们将介绍如何使用 Amazon API Gateway 控制台配置跨账户 Lambda 授权方函数。

这些说明假设您已经在一个AWS账户中有 API Gateway API，在另一个账户中有 Lambda 授权方函数。

## 使用 API Gateway 控制台配置跨账户 Lambda 授权方
<a name="apigateway-cross-account-lambda-auth-configure-cross-account-authorizer"></a>

在您拥有 API 的账户中登录 Amazon API Gateway 控制台，然后执行以下操作：

1. 选择您的 API，然后在主导航窗格中选择**授权方**。

1. 选择**创建授权方**。

1. 对于**授权方名称**，输入授权方名称。

1. 对于**授权方类型**，选择 **Lambda**。

1. 对于 **Lambda 函数**，输入您第二个账户中的 Lambda 授权方函数的完整 ARN。
**注意**  
在 Lambda 控制台中，您可以在控制台窗口的右上角找到函数的 ARN。

1. 此时将显示警告并带有 `aws lambda add-permission` 命令字符串。此策略授予 API Gateway 调用授权方 Lambda 函数的权限。复制命令并保存，以供稍后使用。您可在创建授权方后运行该命令。

1. 对于 **Lambda 事件有效载荷**，请选择**令牌**（对于 `TOKEN` 授权方）或**请求**（对于 `REQUEST` 授权方）。

1. 根据上一步的选择，执行下列操作之一：

   1.  对于**令牌**选项，执行下列操作：
      + 对于**令牌来源**，输入包含授权令牌的标头名称。API 客户端必须包括此标头名称才能将授权令牌发送到 Lambda 授权方。
      + 或者，对于**令牌验证**，输入正则表达式语句。API Gateway 将针对此表达式执行对输入令牌的初始验证并在成功验证后调用授权方。这有助于减少对您 API 的调用。
      + 要缓存授权方生成的授权策略，请将**授权缓存**保持开启状态。在启用策略缓存后，您可选择修改 **TTL** 值。将 **TTL** 设置为零将禁用策略缓存。在启用策略缓存后，**令牌来源**中指定的标头名称将成为缓存键。如果在请求中将多个值传递到此标头，则所有值都将成为缓存键，并保留顺序。
**注意**  
默认 **TTL** 值为 300 秒。最大值为 3600 秒；目前不能提高此限制。

   1. 对于**请求**选项，执行以下操作：
      + 在**身份源类型**中，选择一个参数类型。支持的参数类型为 `Header`、`Query string`、`Stage variable` 和 `Context`。要添加更多身份来源，请选择**添加参数**。
      + 要缓存授权方生成的授权策略，请将**授权缓存**保持开启状态。在启用策略缓存后，您可选择修改 **TTL** 值。将 **TTL** 设置为零将禁用策略缓存。

        API Gateway 将使用指定的身份来源作为请求授权方缓存键。在启用缓存后，API Gateway 将仅在成功确认所有指定的身份来源在运行时存在后才调用授权方的 Lambda 函数。如果指定的身份来源缺失、为 null 或为空，则 API Gateway 将返回 `401 Unauthorized` 响应，而不调用授权方 Lambda 函数。

        如果定义了多个身份来源，则它们都将用于派生授权方的缓存键。更改缓存键的任意部分将导致授权方丢弃缓存的策略文档并生成新的文档。如果在请求中传递了具有多个值的标头，则所有值都将成为缓存键的一部分，并保留顺序。
      + 在关闭缓存后，无需指定身份来源。
**注意**  
 要启用缓存，授权方必须返回适用于 API 中所有方法的策略。要强制执行特定于方法的策略，您可以关闭**授权缓存**。

1. 选择**创建授权方**。

1. 将您在上一步中复制的 `aws lambda add-permission` 命令字符串粘贴到为第二个账户配置的 AWS CLI 窗口中。使用您的授权方 ID 替换 `AUTHORIZER_ID`。这将向您的第一个账户授予对第二个账户的 Lambda 授权方函数的访问权限。