

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

# 对自定义身份提供商问题进行故障排除
<a name="custom-idp-troubleshooting"></a>

本节介绍了 Transfer Family 中与自定义身份提供者相关的问题的可能解决方案。

**Topics**
+ [

## 对 API Gateway 集成错误进行故障排除
](#api-gateway-errors)
+ [

## 对 Lambda 函数超时进行故障排除
](#lambda-timeout-issues)
+ [

## 解决持续的 Lambda 超时问题
](#lambda-timeout-auth)
+ [

## 排除`KeyError`异常问题
](#keyerror-logs)

## 对 API Gateway 集成错误进行故障排除
<a name="api-gateway-errors"></a>

**描述**

用户无法使用您的 Transfer Family 服务器进行身份验证，并且在测试您的身份提供商时，您会看到以下错误：

```
{
    "Response": "",
    "StatusCode": 500,
    "Message": "Internal server error"
}
```

**原因**

API Gateway 集成错误可能由以下原因导致：
+ API Gateway 配置不正确
+ 未正确处理 Lambda 函数错误
+ API Gateway 和 Lambda 之间的权限问题
+ 来自 Lambda 函数的响应格式不正确

**解决方案**

要排除 API Gateway 集成错误，请执行以下操作：

1. 查看您的 Lambda 函数日志，了解详细的错误信息：
   + 在 CloudWatch 控制台中，导航到**日志组** >**/aws/lambda/your-function-nam** e
   + 查找指出根本原因的错误消息或堆栈跟踪

1. 验证您的 Lambda 函数返回的响应格式是否正确：

   ```
   {
       "Role": "arn:aws:iam::123456789012:role/TransferUserRole",
       "HomeDirectory": "/mybucket/home/username"
   }
   ```

1. 为 API Gateway 启用详细 CloudWatch 日志：
   + 在 API Gateway 控制台中，选择你的 API，然后选择**阶段**
   + **选择您的阶段，然后在 “**日志/跟踪**” 下启用 “日志” CloudWatch **
   + 将日志级别设置为 “**错误” 或 “****信息”**

1. 直接测试您的 API Gateway 终端节点：

   ```
   curl -X POST https://your-api-id.execute-api.region.amazonaws.com/prod/servers/your-server-id/users/username/config \
       -H "Content-Type: application/json" \
       -d '{"Password": "password"}'
   ```

1. 验证 API Gateway 和 Lambda 之间的权限：
   + 确保 API Gateway 有权调用您的 Lambda 函数
   + 检查您的 Lambda 函数的执行角色是否具有必要的权限

## 对 Lambda 函数超时进行故障排除
<a name="lambda-timeout-issues"></a>

**描述**

当用户尝试使用自定义身份提供商向您的 Transfer Family 服务器进行身份验证时，他们会遇到长时间的延迟，然后是身份验证失败。在您的 Lambda 日志中，您会看到超时错误。

**原因**

用于自定义身份提供商的 Lambda 函数的默认超时时间为 3 秒。如果您的身份验证逻辑花费的时间超过此超时时间（例如，查询外部数据库或对第三方身份提供商进行 API 调用时），则该函数将超时，身份验证将失败。

**解决方案**

要解决 Lambda 超时问题，请执行以下操作：

1. 增加 Lambda 函数的超时时间：
   + **在 Lambda 控制台中，导航到您的函数并选择配置选项卡**
   + 在 “**常规配置**” 下，单击 “**编辑”**
   + 增加超时值（对于身份验证功能，建议最多 15 秒）

1. 优化您的 Lambda 函数代码：
   + 使用连接池进行数据库查询
   + 为经常访问的数据实现缓存
   + 在身份验证期间尽量减少外部 API 调用

1. 考虑使用 Lambda 预配置并发来消除冷启动：

   ```
   aws lambda put-provisioned-concurrency-config \
       --function-name my-authentication-function \
       --qualifier prod \
       --provisioned-concurrent-executions 5
   ```

1. 使用 CloudWatch 指标监控 Lambda 性能并为持续时间阈值设置警报

## 解决持续的 Lambda 超时问题
<a name="lambda-timeout-auth"></a>

**描述**

使用 Lambda 函数进行身份验证时，用户会遇到持续的超时问题。

**原因**

Lambda 无法访问用于进行身份验证的相应 AWS 服务（例如 DynamoDB、Secrets Manager 或其他身份提供商）。

**解决方案**

验证子网是否可以访问 AWS 服务。或者，如果连接到互联网身份提供商（例如 Okta），请验证 Lambda 函数的子网是否可以通过 NAT 网关访问互联网

## 排除`KeyError`异常问题
<a name="keyerror-logs"></a>

**描述**

在你的 Transfer Family 日志条目中，你会注意到 KeyError “” 异常。

**原因**

最有可能的原因是用户或`identity_provider`记录格式错误或缺少必填字段。

**解决方案**

查看位于`ERRORS`日志组中的`/aws/transfer/your-server-id`日志以获取线索。