

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Logging panggilan API Fungsi Web menggunakan AWS CloudTrail
<a name="web-functions-logging-cloudtrail"></a>

Dengan [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html), Anda dapat melacak tindakan yang diambil oleh pengguna, peran, atau Layanan AWS dalam Fungsi AWS Lambda Web. CloudTrail memberikan catatan tindakan ini. CloudTrail menangkap pemanggilan Fungsi Web sebagai peristiwa data. Anda dapat menggunakan informasi ini untuk menentukan siapa yang memanggil Fungsi Web, kapan, dan dari mana, yang membantu analisis keamanan dan audit operasional.

## Peristiwa data Fungsi Web di CloudTrail
<a name="web-functions-cloudtrail-data-events"></a>

Peristiwa data memberikan informasi tentang operasi yang dilakukan pada sumber daya. Misalnya, memanggil titik akhir Fungsi Web adalah peristiwa data. Operasi ini juga dikenal sebagai operasi data-plane, dan seringkali bervolume tinggi. Secara default, CloudTrail tidak mencatat peristiwa data, dan **riwayat CloudTrail Peristiwa** tidak merekamnya.

Biaya tambahan berlaku untuk peristiwa data. Untuk informasi selengkapnya, lihat [harga CloudTrail ](https://aws.amazon.com/cloudtrail/pricing/).

Anda dapat mencatat peristiwa data untuk jenis `AWS::Lambda::WebFunction` sumber daya menggunakan CloudTrail konsol AWS CLI, atau operasi CloudTrail API. CloudTrail mencatat setiap pemanggilan dalam Wilayah AWS yang melayani permintaan, dan `awsRegion` mengidentifikasi Wilayah itu. Tidak seperti log dan metrik, acara pemanggilan tidak terpusat di Wilayah asal. Untuk `PerRegion` titik akhir `MultiRegion` atau titik akhir, gunakan jejak Multi-wilayah atau penyimpanan data peristiwa sehingga pemanggilan di setiap Wilayah yang dilayani titik akhir dicatat.

Tabel berikut menunjukkan tipe peristiwa data untuk Web Functions.


| Jenis peristiwa data (konsol) | nilai resources.type | API data masuk CloudTrail | 
| --- | --- | --- | 
| Fungsi Web Lambda | AWS::Lambda::WebFunction | InvokeWebFunctionEndpoint | 

CloudTrail mencatat pengidentifikasi kunci berikut untuk pemanggilan Fungsi Web:


| Pengidentifikasi | Nilai | 
| --- | --- | 
| eventSource | lambda.amazonaws.com | 
| eventName | InvokeWebFunctionEndpoint. Ini adalah nilai untuk memfilter. | 
| Tindakan IAM | lambda:InvokeWebFunctionEndpoint | 
| readOnly | false, karena pemanggilan menjalankan kode fungsi Anda. | 
| resources.type | AWS::Lambda::WebFunction | 
| resources.ARN | Fungsi ARN, bukan titik akhir ARN. Oleh karena itu, pemilih jejak bekerja pada tingkat fungsi. | 

Pemilih peristiwa lanjutan berikut mencatat pemanggilan untuk satu Fungsi Web saja.

```
[
    {
        "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"] }
        ]
    }
]
```

Untuk mengaktifkan peristiwa data pada jejak, gunakan prosedur berikut.

**Untuk mengaktifkan dan memverifikasi peristiwa data Fungsi Web (AWS CLI)**

1. Buat atau pilih jejak yang akan merekam peristiwa data. Untuk petunjuknya, lihat [Mencatat peristiwa data](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html) di *Panduan AWS CloudTrail Pengguna*.

1. Simpan pemilih acara lanjutan berikut sebagai`web-function-data-events.json`. Ini merekam pemanggilan untuk satu Fungsi Web. Untuk merekam pemanggilan untuk setiap Fungsi Web di akun, hapus pemilih `resources.ARN` bidang.

   ```
   [
     {
       "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. Terapkan pemilih ke jejak:

   ```
   aws cloudtrail put-event-selectors \
       --trail-name {{my-trail}} \
       --advanced-event-selectors file://web-function-data-events.json
   ```
**penting**  
`put-event-selectors`menggantikan penyeleksi acara jejak yang ada. Jika jejak sudah merekam peristiwa lain, sertakan penyeleksi mereka dalam file yang sama.

1. Panggil titik akhir dengan permintaan pengujian.

1. Tanyakan tujuan jejak untuk`eventName = InvokeWebFunctionEndpoint`. Verifikasi fungsi ARN, waktu acara, ID permintaan, informasi pemanggil yang tersedia untuk jalur otentikasi, dan bidang kesalahan bersyarat apa pun. Jika pemilih berfungsi, kueri mengembalikan `InvokeWebFunctionEndpoint` peristiwa untuk permintaan pengujian Anda, mirip dengan contoh di[Contoh: pemanggilan yang berhasil (pemanggil yang tidak diautentikasi)](#web-functions-cloudtrail-example-success).

Sebagai gantinya, untuk merekam peristiwa data di penyimpanan data peristiwa CloudTrail Lake, tambahkan pemilih bidang yang sama ke penyimpanan data peristiwa. Untuk informasi selengkapnya, silakan lihat *Panduan Pengguna AWS CloudTrail *.

## Bidang dalam suatu InvokeWebFunctionEndpoint acara
<a name="web-functions-cloudtrail-event-fields"></a>

Tabel berikut menjelaskan bidang dalam suatu `InvokeWebFunctionEndpoint` peristiwa.


| Bidang | Catatan | 
| --- | --- | 
| eventVersion | Versi format peristiwa. | 
| eventSource | Selalulambda.amazonaws.com. | 
| eventName | SelaluInvokeWebFunctionEndpoint. | 
| eventCategory | SelaluData. | 
| eventType | Jenis acara, misalnyaAwsApiCall. | 
| readOnly | Selalufalse, karena pemanggilan menjalankan kode fungsi Anda. | 
| managementEvent | Selalufalse. | 
| eventTime | Tanggal dan waktu, di UTC, Lambda merekam acara tersebut. Untuk pemanggilan yang berhasil, Lambda merekam peristiwa saat fungsi Anda memulai responsnya, sehingga eventTime bisa lebih lambat dari saat permintaan tiba. | 
| sourceIPAddress | Alamat IP di mana permintaan itu dibuat. | 
| userAgent | Agen yang digunakan penelepon untuk membuat permintaan. Hadir saat penelepon mengirim User-Agent header. | 
| requestParameters | BerisiendpointArn, ARN dari titik akhir yang dipanggil. Muatan permintaan tidak dicatat. | 
| responseElements | Selalunull. | 
| resources | Berisi satu entri dengan accountIdtype,, dan ARN fungsi. | 
| additionalEventData | BerisifunctionRevisionArn, ARN dari revisi yang melayani permintaan. Bidang ini hadir di setiap acara, termasuk penolakan. | 
| tlsDetails | Versi TLS, cipher suite, dan header host permintaan. | 
| userIdentity | Identitas penelepon. Untuk detailnya, lihat daftar berikut. | 
| sharedEventID | Hadir saat CloudTrail memberikan acara yang sama ke lebih dari satu Akun AWS. | 
| errorCode, errorMessage | Hadir hanya pada peristiwa kesalahan. | 
| requestID, eventID, recipientAccountId, awsRegion |  CloudTrail Bidang standar yang mengidentifikasi permintaan, acara, penerima Akun AWS, dan Wilayah AWS. | 

Peristiwa Web Function menggunakan bentuk ARN berikut:
+ Fungsi (`resources[].ARN`) — `arn:aws:lambda:us-east-1:123456789012:web-function/my-fn`
+ Titik akhir (`requestParameters.endpointArn`) — `arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/endpoint/my-endpoint`
+ Revisi (`additionalEventData.functionRevisionArn`) — `arn:aws:lambda:us-east-1:123456789012:web-function/my-fn/revision/rev-a1b2c`

`userIdentity`Bidang tergantung pada bagaimana pemanggil diautentikasi:
+ Pemanggilan yang tidak diautentikasi direkam dengan tipe. `userIdentity` `Unknown`
+ IAM-authenticated penelepon dicatat dengan kepala sekolah mereka sendiri. Misalnya, penelepon yang menggunakan kredensyal sementara muncul dengan tipe`AssumedRole`, an`arn`, dan a. `sessionContext`
+ `accessKeyId`Bidang tidak dihuni.

## Peristiwa kesalahan
<a name="web-functions-cloudtrail-error-events"></a>

CloudTrail juga mencatat upaya pemanggilan yang gagal setelah pemanggil diautentikasi. Tabel berikut menjelaskan peristiwa kesalahan ini.


| Skenario | ERRORCODE | errorMessage | 
| --- | --- | --- | 
| Penelepon tidak diotorisasi | AccessDenied | Pengguna tidak berwenang untuk melakukan: lambda:InvokeWebFunctionEndpoint | 
| Tingkat permintaan, konkurensi, atau batas vCPU tercapai (titik akhir atau akun) | ThrottlingException | Tarif terlampaui | 
| Kesalahan layanan | ServiceException | Kesalahan Layanan | 
| Kesalahan aplikasi atau permintaan klien tidak valid | Tidak berlaku | Diperlakukan sebagai panggilan API yang berhasil. Doa mencapai dan menjalankan fungsi. | 

Doa yang berhasil tidak `errorCode` memiliki atau. `errorMessage` Penolakan otorisasi dicatat sebagai. `AccessDenied` CloudTrail tidak mencatat permintaan yang gagal otentikasi, seperti permintaan dengan tanda tangan yang hilang, cacat, tidak valid, atau kedaluwarsa, dan tidak mencatat permintaan yang ditolak Lambda sebelum otentikasi, seperti permintaan ke titik akhir yang 0. `rateLimit` Kegagalan infrastruktur otentikasi internal juga tidak dicatat. Untuk mendeteksi lonjakan permintaan yang ditolak, alarm menyala `HTTPResponseStatusClass4XX` di `AWS/Lambda/Web` namespace.

## Contoh: pemanggilan yang berhasil (pemanggil yang tidak diautentikasi)
<a name="web-functions-cloudtrail-example-success"></a>

Contoh berikut menunjukkan pemanggilan yang berhasil oleh pemanggil yang tidak diautentikasi.

```
{
    "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"
            }
        }
    ]
}
```

Untuk IAM-authenticated pemanggil, `userIdentity` bidang tersebut malah membawa prinsipal pemanggil, misalnya ketik `AssumedRole` dengan an `arn` dan a`sessionContext`, dan bidang yang tersisa tidak berubah.

## Contoh: doa ditolak
<a name="web-functions-cloudtrail-example-denied"></a>

Peristiwa kesalahan membawa `errorCode` dan`errorMessage`. Contoh berikut menunjukkan pemanggilan yang ditolak.

```
{
    "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"
            }
        }
    ]
}
```

## Acara manajemen di CloudTrail
<a name="web-functions-cloudtrail-management-events"></a>

CloudTrail merekam peristiwa manajemen Fungsi Web secara default. Anda dapat melihat 90 hari terakhir acara manajemen dalam **riwayat CloudTrail Acara** tanpa membuat jejak. Untuk membuatnya lebih lama, buat penyimpanan data acara trail atau CloudTrail Lake. Untuk informasi selengkapnya, lihat [Pencatatan peristiwa manajemen](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-management-events-with-cloudtrail.html) di *Panduan AWS CloudTrail Pengguna*.

CloudTrail mencatat operasi Fungsi Web berikut sebagai peristiwa manajemen. `eventName`Bidang setiap acara sama dengan nama operasi.


| Sumber daya atau tugas | Operasi | 
| --- | --- | 
| Fungsi Web | CreateWebFunction, GetWebFunction, ListWebFunctions, DeleteWebFunction | 
| Revisi | CreateWebFunctionRevision, GetWebFunctionRevision, ListWebFunctionRevisions, DeleteWebFunctionRevision | 
| Titik akhir | CreateWebFunctionEndpoint, GetWebFunctionEndpoint, ListWebFunctionEndpoints, UpdateWebFunctionEndpoint, DeleteWebFunctionEndpoint | 
| Pengaturan akun | GetWebAccountSettings | 
| Kebijakan sumber daya | PutResourcePolicy, GetResourcePolicy, DeleteResourcePolicy | 
| Tanda | TagResource, UntagResource, ListTags | 

Pemanggilan Fungsi Web adalah operasi data-plane. CloudTrail mencatatnya hanya sebagai peristiwa data, seperti yang dijelaskan dalam[Peristiwa data Fungsi Web di CloudTrail](#web-functions-cloudtrail-data-events).

## Sumber daya terkait
<a name="web-functions-cloudtrail-related"></a>

Untuk informasi selengkapnya, lihat sumber daya berikut:
+ [Pencatatan log AWS Lambda Panggilan API menggunakan AWS CloudTrail](logging-using-cloudtrail.md)
+ [Izin Fungsi Web Lambda](web-functions-permissions.md)
+ [Membuat jejak untuk Anda Akun AWS](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)