

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

# 使用 記錄 Web Function API 呼叫 AWS CloudTrail
<a name="web-functions-logging-cloudtrail"></a>

使用 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)，您可以追蹤使用者、角色或在 AWS Lambda Web 函數 AWS 服務 中採取的動作。CloudTrail 會提供這些動作的記錄。CloudTrail 會將 Web 函數呼叫擷取為資料事件。您可以使用此資訊來判斷誰叫用 Web 函數、何時以及從何處叫用 Web 函數，這有助於安全分析和操作稽核。

## CloudTrail 中的 Web 函數資料事件
<a name="web-functions-cloudtrail-data-events"></a>

資料事件提供有關在資源上執行之操作的資訊。例如，叫用 Web 函數端點是資料事件。這些操作也稱為資料平面操作，通常為大量操作。根據預設，CloudTrail 不會記錄資料事件，CloudTrail **事件歷史記錄**也不會記錄它們。

資料事件需支付額外的費用。如需詳細資訊，請參閱 [CloudTrail 定價](https://aws.amazon.com/cloudtrail/pricing/)。

您可以使用 CloudTrail 主控台 AWS CLI或 CloudTrail API 操作來記錄`AWS::Lambda::WebFunction`資源類型的資料事件。CloudTrail 會在提供請求 AWS 區域 的 中記錄每個叫用，並`awsRegion`識別該區域。與日誌和指標不同，調用事件不會集中到主要區域。對於 `MultiRegion`或 `PerRegion`端點，請使用多區域追蹤或事件資料存放區，以便記錄端點提供的每個區域中的呼叫。

下表顯示 Web 函數的資料事件類型。


| 資料事件類型 (主控台) | resources.type 值 | 記錄到 CloudTrail 的資料 API | 
| --- | --- | --- | 
| Lambda Web 函數 | AWS::Lambda::WebFunction | InvokeWebFunctionEndpoint | 

CloudTrail 會記錄 Web 函數呼叫的下列金鑰識別符：


| 識別符 | Value | 
| --- | --- | 
| eventSource | lambda.amazonaws.com | 
| eventName | InvokeWebFunctionEndpoint。 這是要篩選的值。 | 
| IAM 動作 | lambda:InvokeWebFunctionEndpoint | 
| readOnly | false，因為 呼叫會執行您的函數程式碼。 | 
| resources.type | AWS::Lambda::WebFunction | 
| resources.ARN | 函數 ARN，而非端點 ARN。因此，追蹤選取器可在函數層級運作。 | 

下列進階事件選取器只會記錄單一 Web 函數的呼叫。

```
[
    {
        "Name": "web-function-invokes",
        "FieldSelectors": [
            { "Field": "eventCategory", "Equals": ["Data"] },
            { "Field": "resources.type", "Equals": ["AWS::Lambda::WebFunction"] },
            { "Field": "resources.ARN", "Equals": ["arn:aws:lambda:us-east-1:111122223333:web-function/hello-world"] }
        ]
    }
]
```

若要開啟線索上的資料事件，請使用下列程序。

**開啟並驗證 Web 函數資料事件 (AWS CLI)**

1. 建立或選擇將記錄資料事件的線索。如需說明，請參閱*AWS CloudTrail 《 使用者指南*》中的[記錄資料事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html)。

1. 將下列進階事件選取器儲存為 `web-function-data-events.json`。它記錄一個 Web 函數的調用。若要記錄帳戶中每個 Web 函數的調用，請移除 `resources.ARN` 欄位選擇器。

   ```
   [
     {
       "Name": "web-function-invocations",
       "FieldSelectors": [
         {
           "Field": "eventCategory",
           "Equals": ["Data"]
         },
         {
           "Field": "resources.type",
           "Equals": ["AWS::Lambda::WebFunction"]
         },
         {
           "Field": "resources.ARN",
           "Equals": [
             "arn:aws:lambda:us-east-1:111122223333:web-function/my-web-app"
           ]
         }
       ]
     }
   ]
   ```

1. 將選取器套用至線索：

   ```
   aws cloudtrail put-event-selectors \
       --trail-name {{my-trail}} \
       --advanced-event-selectors file://web-function-data-events.json
   ```
**重要**  
`put-event-selectors` 會取代追蹤的現有事件選取器。如果線索已記錄其他事件，請在相同的檔案中包含其選取器。

1. 使用測試請求叫用端點。

1. 查詢 的線索目的地`eventName = InvokeWebFunctionEndpoint`。驗證可用於身分驗證路徑的函數 ARN、事件時間、請求 ID、呼叫者資訊，以及任何條件式錯誤欄位。如果選取器正常運作，查詢會傳回測試請求`InvokeWebFunctionEndpoint`的事件，類似於 中的範例[範例：成功叫用 （未經驗證的呼叫者）](#web-functions-cloudtrail-example-success)。

若要改為在 CloudTrail Lake 事件資料存放區中記錄資料事件，請將相同的欄位選擇器新增至事件資料存放區。如需詳細資訊，請參閱*「AWS CloudTrail 使用者指南」*。

## InvokeWebFunctionEndpoint 事件中的欄位
<a name="web-functions-cloudtrail-event-fields"></a>

下表說明 `InvokeWebFunctionEndpoint`事件中的欄位。


| 欄位 | 備註 | 
| --- | --- | 
| eventVersion |  事件格式的版本。 | 
| eventSource | 一律為 lambda.amazonaws.com。 | 
| eventName | 一律為 InvokeWebFunctionEndpoint。 | 
| eventCategory | 一律為 Data。 | 
| eventType | 事件類型，例如 AwsApiCall。 | 
| readOnly | 一律為 false，因為 呼叫會執行您的函數程式碼。 | 
| managementEvent | 一律為 false。 | 
| eventTime | Lambda 記錄事件的日期和時間，以 UTC 為單位。為了成功調用，Lambda 會在函數開始回應時記錄事件，因此 eventTime可以晚於請求到達的時間。 | 
| sourceIPAddress | 提出請求的 IP 地址。 | 
| userAgent | 發起人用來提出請求的客服人員。呼叫者傳送User-Agent標頭時出現。 | 
| requestParameters | 包含 endpointArn，即叫用端點的 ARN。不會記錄請求承載。 | 
| responseElements | 一律為 null。 | 
| resources | 包含一個具有 accountId、 type和 函數ARN的項目。 | 
| additionalEventData | 包含 functionRevisionArn，即提供請求之修訂的 ARN。此欄位存在於每個事件上，包括拒絕。 | 
| tlsDetails | 請求的 TLS 版本、密碼套件和主機標頭。 | 
| userIdentity | 發起人的身分。如需詳細資訊，請參閱下列清單。 | 
| sharedEventID | 當 CloudTrail 將相同的事件交付至多個事件時出現 AWS 帳戶。 | 
| errorCode, errorMessage | 僅出現於錯誤事件。 | 
| requestID, eventID, recipientAccountId, awsRegion | 識別請求、事件、收件人 AWS 帳戶和 的標準 CloudTrail 欄位 AWS 區域。 | 

Web 函數事件使用以下 ARN 形狀：
+ 函數 (`resources[].ARN`) – `arn:aws:lambda:us-east-1:123456789012:web-function/my-fn`
+ 端點 (`requestParameters.endpointArn`) – `arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/endpoint/my-endpoint`
+ 修訂 (`additionalEventData.functionRevisionArn`) – `arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/revision/rev-a1b2c`

`userIdentity` 欄位取決於發起人如何驗證：
+ 使用`userIdentity`類型 記錄未驗證的調用`Unknown`。
+ IAM 驗證的呼叫者會使用自己的委託人記錄。例如，使用臨時登入資料的呼叫者會顯示類型 `AssumedRole`、 `arn`和 `sessionContext`。
+ 不填入 `accessKeyId` 欄位。

## 錯誤事件
<a name="web-functions-cloudtrail-error-events"></a>

CloudTrail 也會記錄呼叫者驗證後失敗的呼叫嘗試。下表說明這些錯誤事件。


| 案例 | errorCode | errorMessage | 
| --- | --- | --- | 
| 來電者未授權 | AccessDenied | 使用者無權執行： lambda:InvokeWebFunctionEndpoint | 
| 已達到請求率、並行或 vCPU 限制 （端點或帳戶） | ThrottlingException | 已超過費率 | 
| 服務錯誤 | ServiceException | 服務錯誤 | 
| 應用程式錯誤或無效的用戶端請求 | 不適用 | 視為成功的 API 呼叫。呼叫已到達並執行 函數。 | 

成功的調用沒有 `errorCode`或 `errorMessage`。授權拒絕會記錄為 `AccessDenied`。CloudTrail 不會記錄身分驗證失敗的請求，例如簽章遺失、格式錯誤、無效或過期的請求，也不會記錄 Lambda 在身分驗證之前拒絕的請求，例如對 0 `rateLimit`的端點的請求。也不會記錄內部身分驗證基礎設施故障。若要偵測遭拒請求的峰值，請在 `AWS/Lambda/Web` 命名空間`HTTPResponseStatusClass4XX`中警示 上的 。

## 範例：成功叫用 （未經驗證的呼叫者）
<a name="web-functions-cloudtrail-example-success"></a>

下列範例顯示未經驗證的呼叫者成功呼叫 。

```
{
    "Records": [
        {
            "eventVersion": "1.11",
            "userIdentity": {
                "type": "Unknown"
            },
            "eventTime": "2026-09-22T18:41:07Z",
            "eventSource": "lambda.amazonaws.com",
            "eventName": "InvokeWebFunctionEndpoint",
            "awsRegion": "us-east-1",
            "sourceIPAddress": "203.0.113.42",
            "userAgent": "curl/8.4.0",
            "requestParameters": {
                "endpointArn": "arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/endpoint/my-endpoint"
            },
            "responseElements": null,
            "additionalEventData": {
                "functionRevisionArn": "arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/revision/rev-a1b2c"
            },
            "requestID": "b1f8a4c2-7e3d-4a19-9f6b-2c5d8e0a1234",
            "eventID": "d4c3b2a1-5f6e-7a8b-9c0d-1e2f3a4b5c6d",
            "readOnly": false,
            "resources": [
                {
                    "accountId": "123456789012",
                    "type": "AWS::Lambda::WebFunction",
                    "ARN": "arn:aws:lambda:us-east-1:123456789012:web-function/my-fn"
                }
            ],
            "eventType": "AwsApiCall",
            "managementEvent": false,
            "recipientAccountId": "123456789012",
            "eventCategory": "Data",
            "tlsDetails": {
                "tlsVersion": "TLSv1.3",
                "cipherSuite": "TLS_AES_128_GCM_SHA256",
                "clientProvidedHostHeader": "bcdfghjklmnpqrst.b7t.lambda-web.us-east-1.on.aws"
            }
        }
    ]
}
```

對於經 IAM 驗證的發起人， `userIdentity` 欄位會改為承載發起人的委託人，例如`AssumedRole`使用 `arn`和 的類型`sessionContext`，其餘欄位保持不變。

## 範例：拒絕叫用
<a name="web-functions-cloudtrail-example-denied"></a>

錯誤事件帶有 `errorCode`和 `errorMessage`。下列範例顯示拒絕的調用。

```
{
    "Records": [
        {
            "eventVersion": "1.11",
            "userIdentity": {
                "type": "AssumedRole",
                "principalId": "ARO01EXAMPLEID:session-name",
                "arn": "arn:aws:sts::123456789012:assumed-role/app-invoke-role/session-name",
                "accountId": "123456789012",
                "sessionContext": {
                    "sessionIssuer": {
                        "type": "Role",
                        "principalId": "ARO01EXAMPLEID",
                        "arn": "arn:aws:iam::123456789012:role/app-invoke-role",
                        "accountId": "123456789012",
                        "userName": "app-invoke-role"
                    },
                    "attributes": {
                        "creationDate": "2026-09-22T18:39:55Z",
                        "mfaAuthenticated": "false"
                    }
                }
            },
            "eventTime": "2026-09-22T18:42:13Z",
            "eventSource": "lambda.amazonaws.com",
            "eventName": "InvokeWebFunctionEndpoint",
            "awsRegion": "us-east-1",
            "sourceIPAddress": "203.0.113.42",
            "userAgent": "aws-sdk-python/1.34.0",
            "errorCode": "AccessDenied",
            "errorMessage": "User is not authorized to perform: lambda:InvokeWebFunctionEndpoint",
            "requestParameters": {
                "endpointArn": "arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/endpoint/my-endpoint"
            },
            "responseElements": null,
            "additionalEventData": {
                "functionRevisionArn": "arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/revision/rev-a1b2c"
            },
            "requestID": "c2e9b5d3-8f4e-4b2a-a07c-3d6e9f1b2345",
            "eventID": "e5d4c3b2-6a7f-8b9c-0d1e-2f3a4b5c6d7e",
            "readOnly": false,
            "resources": [
                {
                    "accountId": "123456789012",
                    "type": "AWS::Lambda::WebFunction",
                    "ARN": "arn:aws:lambda:us-east-1:123456789012:web-function/my-fn"
                }
            ],
            "eventType": "AwsApiCall",
            "managementEvent": false,
            "recipientAccountId": "123456789012",
            "eventCategory": "Data",
            "tlsDetails": {
                "tlsVersion": "TLSv1.3",
                "cipherSuite": "TLS_AES_128_GCM_SHA256",
                "clientProvidedHostHeader": "bcdfghjklmnpqrst.b7t.lambda-web.us-east-1.on.aws"
            }
        }
    ]
}
```

## CloudTrail 中的管理事件
<a name="web-functions-cloudtrail-management-events"></a>

根據預設，CloudTrail 會記錄 Web 函數管理事件。您可以在 CloudTrail 事件**歷史記錄**中檢視過去 90 天的管理事件，而無需建立追蹤。若要保留更長的時間，請建立線索或 CloudTrail Lake 事件資料存放區。如需詳細資訊，請參閱《AWS CloudTrail 使用者指南》**中的[記錄管理事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-management-events-with-cloudtrail.html)。

CloudTrail 會將下列 Web 函數操作記錄為管理事件。每個事件`eventName`的欄位與操作名稱相同。


| 資源或任務 | 作業 | 
| --- | --- | 
| Web 函數 | CreateWebFunction, GetWebFunction, ListWebFunctions, DeleteWebFunction | 
| 修訂 | CreateWebFunctionRevision, GetWebFunctionRevision, ListWebFunctionRevisions, DeleteWebFunctionRevision | 
| 端點 | CreateWebFunctionEndpoint, GetWebFunctionEndpoint, ListWebFunctionEndpoints, UpdateWebFunctionEndpoint, DeleteWebFunctionEndpoint | 
| 帳戶設定 | GetWebAccountSettings | 
| 資源政策 | PutResourcePolicy, GetResourcePolicy, DeleteResourcePolicy | 
| Tags (標籤) | TagResource, UntagResource, ListTags | 

Web 函數叫用是一種資料平面操作。CloudTrail 只會將其記錄為資料事件，如中所述[CloudTrail 中的 Web 函數資料事件](#web-functions-cloudtrail-data-events)。

## 相關資源
<a name="web-functions-cloudtrail-related"></a>

如需詳細資訊，請參閱下列資源：
+ [使用 記錄 AWS Lambda API 呼叫 AWS CloudTrail](logging-using-cloudtrail.md)
+ [Lambda Web 函數許可](web-functions-permissions.md)
+ [為您的 建立線索 AWS 帳戶](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)