

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 對自訂身分提供者問題進行故障診斷
自訂身分提供者問題

本節說明與 Transfer Family 的自訂身分提供者相關問題的可能解決方案。

**Topics**
+ [

## 故障診斷 API Gateway 整合錯誤
](#api-gateway-errors)
+ [

## 故障診斷 Lambda 函數逾時
](#lambda-timeout-issues)
+ [

## 對一致的 Lambda 逾時問題進行故障診斷
](#lambda-timeout-auth)
+ [

## 故障診斷例外`KeyError`狀況
](#keyerror-logs)

## 故障診斷 API Gateway 整合錯誤


**Description**

使用者無法透過 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-name**
   + 尋找指出根本原因的錯誤訊息或堆疊追蹤

1. 確認您的 Lambda 函數傳回格式正確的回應：

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

1. 啟用 API Gateway 的詳細 CloudWatch 記錄：
   + 在 API Gateway 主控台中，選取您的 API，然後選擇**階段**
   + 選取您的階段並在**日誌/追蹤**下，啟用 **CloudWatch Logs**
   + 將日誌層級設定為 **ERROR** 或 **INFO**

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 函數逾時


**Description**

當使用者嘗試使用自訂身分提供者與您的 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 逾時問題進行故障診斷


**Description**

使用 Lambda 函數進行身分驗證時，使用者會遇到一致的逾時。

**原因**

Lambda 無法連線到用於驗證的對應 AWS 服務 （例如 DynamoDB、Secrets Manager 或其他身分提供者）。

**解決方案**

確認子網路可以連接 AWS 服務。或者，如果連線到網際網路身分提供者 （例如 Okta)，請確認 Lambda 函數的子網路可以透過 NAT Gateway 連線到網際網路

## 故障診斷例外`KeyError`狀況


**Description**

在 Transfer Family 日誌項目中，您會注意到「KeyError」例外狀況。

**原因**

最可能的原因是使用者或`identity_provider`記錄格式不正確或缺少必要欄位。

**解決方案**

檢閱位於`ERRORS`日誌群組中的`/aws/transfer/your-server-id`日誌以取得線索。