

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

# Mengenkripsi AWS Lambda data eksekusi tahan lama
<a name="durable-encryption"></a>

Dengan [fungsi yang AWS Lambda tahan lama](durable-functions.md), Anda dapat membangun aplikasi multi-langkah yang tangguh yang berjalan hingga satu tahun, menggunakan pos pemeriksaan untuk memulihkan setiap eksekusi dari kegagalan dengan memutar ulang pekerjaan yang telah selesai.

Lambda selalu mengenkripsi data eksekusi yang tahan lama saat istirahat. Anda juga dapat mengonfigurasi kunci terkelola AWS KMS pelanggan Anda sendiri pada fungsi untuk kontrol rotasi, visibilitas audit, atau kepatuhan. Dengan kunci yang dikelola pelanggan, hanya prinsipal yang Anda otorisasi yang dapat membaca data eksekusi.

## Cara kerja enkripsi
<a name="durable-encryption-how-it-works"></a>

Eksekusi Lambda yang tahan lama menggunakan kunci KMS yang sama dengan yang dimulai sepanjang masa pakainya. Mengubah atau menghapus tombol pada fungsi hanya memengaruhi eksekusi yang dimulai setelah perubahan. Lihat [Ketika kunci yang dikelola pelanggan tidak tersedia](#durable-encryption-key-unavailable) bagaimana eksekusi tahan lama berperilaku ketika kuncinya tidak tersedia.

Kunci yang dikelola pelanggan dikenakan AWS KMS biaya standar. Untuk detail harganya, lihat [Harga AWS Key Management Service](https://aws.amazon.com/kms/pricing/).

## Apa yang dienkripsi
<a name="durable-encryption-what-is-encrypted"></a>

Saat Anda mengonfigurasi kunci terkelola pelanggan pada fungsi tahan lama, Lambda menggunakan kunci tersebut untuk mengenkripsi data eksekusi tahan lama berikut saat istirahat:
+ Muatan input yang Anda lewati dengan setiap `Invoke` permintaan.
+ Data pos pemeriksaan disimpan oleh `CheckpointDurableExecution` API, termasuk hasil langkah, kesalahan langkah, dan input pemanggilan berantai.
+ Hasil eksekusi dan kesalahan.
+ Hasil callback dan kesalahan yang Anda kirimkan melalui `SendDurableExecutionCallbackSuccess` dan`SendDurableExecutionCallbackFailure`.

**Function-level dan kunci eksekusi yang tahan lama bersifat independen**  
Tingkat fungsi `KMSKeyArn` yang mengenkripsi [variabel lingkungan](configuration-envvars-encryption.md), [paket penerapan .zip](encrypt-zip-package.md), dan [SnapStart](snapstart-security.md)snapshot terpisah dari yang mengenkripsi data eksekusi yang tahan lama. `KMSKeyArn` `DurableConfig` Pengaturan satu tidak mengatur yang lain. Anda dapat menggunakan tombol KMS yang sama untuk keduanya, atau Anda dapat menggunakan tombol KMS yang berbeda.

## Siapkan enkripsi kunci yang dikelola pelanggan
<a name="durable-encryption-setup"></a>

Menyiapkan enkripsi kunci yang dikelola pelanggan untuk fungsi yang tahan lama adalah proses tiga langkah. Selesaikan langkah-langkah berikut secara berurutan.

### Buat kunci terkelola pelanggan
<a name="durable-encryption-create-key"></a>

Fungsi tahan lama mendukung kunci KMS enkripsi simetris di AWS Wilayah yang sama dengan fungsinya. Cross-Region kunci tidak didukung. *Untuk membuat kunci terkelola pelanggan simetris, ikuti langkah-langkah untuk [membuat kunci KMS enkripsi simetris di Panduan Pengembang](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)AWS Key Management Service .*

### Izin
<a name="durable-encryption-permissions"></a>

Anda memberikan AWS KMS izin melalui kebijakan kunci kunci KMS.

Mengkonfigurasi kunci yang dikelola pelanggan memerlukan AWS KMS izin pada prinsipal yang membuat atau memperbarui fungsi. Memanggil fungsi tahan lama tidak memerlukan AWS KMS izin pada penelepon; Lambda melakukan enkripsi dengan prinsipal layanannya.

#### Kebijakan kunci
<a name="durable-encryption-key-policy"></a>

[Kebijakan utama](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) mengontrol akses ke kunci yang dikelola pelanggan Anda. Setiap kunci yang dikelola pelanggan harus memiliki persis satu kebijakan utama. Dalam kebijakan utama, hanya `Resource: "*"` mengacu pada kunci KMS yang dilampirkan kebijakan, bukan ke semua kunci KMS di akun Anda.

Kebijakan kunci fungsi tahan lama memberikan setiap prinsipal hanya AWS KMS tindakan yang dibutuhkannya, dicakup oleh layanan dan fungsi ARN. Bagian berikut menjelaskan pernyataan, kondisi, dan contoh lengkap.

**Pernyataan kebijakan yang diperlukan**  
Kebijakan ini memberikan kemampuan berikut:
+ **Aktifkan Izin Pengguna IAM**. Memberikan akses tanpa syarat root akun untuk mengelola kunci. Pernyataan ini tidak menggunakan kondisi karena pelingkupan itu akan mencegah Anda memutar, memperbarui, atau menghapus kunci.
+ **Izinkan Lambda menggunakan tombol ini untuk fungsi yang tahan lama**. Memberikan kepala layanan `kms:GenerateDataKey` Lambda dan. `kms:Decrypt`
+ **Izinkan peran eksekusi fungsi untuk mendekripsi data eksekusi yang tahan lama**. Memberikan peran eksekusi `kms:Decrypt` untuk membaca status dan memajukan eksekusi.
+ **Izinkan penulis fungsi untuk mendeskripsikan kunci ini**. Memberikan `kms:DescribeKey` sehingga Lambda dapat memvalidasi bahwa kuncinya simetris dan diaktifkan selama atau. `CreateFunction` `UpdateFunctionConfiguration`
+ **Izinkan pembuat fungsi untuk memvalidasi kunci ini untuk fungsi tertentu**. Hibah `kms:GenerateDataKey` dan `kms:Decrypt` Lambda dapat memvalidasi izin kunci dan akses dengan konteks enkripsi fungsi selama atau. `CreateFunction` `UpdateFunctionConfiguration` Ini mengonfirmasi kebijakan kunci menerima panggilan untuk fungsi khusus ini sebelum fungsi dibuat atau diperbarui.
+ **Izinkan operator eksekusi yang tahan lama**. Memberikan operator `kms:Decrypt` untuk panggilan ke`GetDurableExecution`, `GetDurableExecutionHistory` dengan`IncludeExecutionData=true`,, `GetDurableExecutionState``StopDurableExecution`, dan API panggilan balik.

Sebagai praktik terbaik, gunakan prinsip terpisah untuk peran eksekusi, pembuat fungsi, dan operator eksekusi tahan lama sehingga setiap identitas hanya memiliki kemampuan yang dibutuhkan.

**Ketentuan kebijakan yang direkomendasikan**  
Kebijakan ini menggunakan kondisi berikut untuk cakupan akses bawah:
+ [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)membatasi penggunaan kunci untuk permintaan yang dirutekan melalui Lambda. Menerapkan ini ke peran eksekusi, pembuat fungsi, dan pernyataan operator mencegah mereka menggunakan kunci secara langsung AWS KMS.
+ [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)dan [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)melindungi dari [masalah wakil lintas layanan yang membingungkan](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). Lambda meneruskan nilai-nilai ini ketika memanggil AWS KMS menggunakan kredensyal layanannya sendiri. Kondisi ini hanya berlaku untuk pernyataan utama layanan Lambda. Peran eksekusi, pembuat fungsi, dan pernyataan operator memanggil AWS KMS dengan kredenal sesi akses penerusan pemanggil, yang tidak membawa header ini.
+ [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context)mencakup kunci ke fungsi tertentu. Lambda menambahkan ini ke konteks enkripsi pada setiap AWS KMS panggilan untuk data eksekusi yang tahan lama.

Contoh berikut menggabungkan pernyataan dan kondisi di atas.

**Example Kebijakan utama untuk fungsi yang tahan lama**  

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:root" },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow Lambda to use this key for durable functions",
            "Effect": "Allow",
            "Principal": { "Service": "lambda.amazonaws.com" },
            "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333",
                    "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction",
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
                }
            }
        },
        {
            "Sid": "Allow the function execution role to decrypt durable execution data",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/myDurableFunctionRole" },
            "Action": "kms:Decrypt",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
                }
            }
        },
        {
            "Sid": "Allow the function author to describe this key",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/FunctionAuthor" },
            "Action": "kms:DescribeKey",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com"
                }
            }
        },
        {
            "Sid": "Allow the function author to validate this key for a specific function",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/FunctionAuthor" },
            "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
                }
            }
        },
        {
            "Sid": "Allow durable execution operators",
            "Effect": "Allow",
            "Principal": { "AWS": "arn:aws:iam::111122223333:role/DurableExecutionOperator" },
            "Action": "kms:Decrypt",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com",
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
                }
            }
        }
    ]
}
```

Untuk informasi selengkapnya tentang kebijakan AWS KMS utama, lihat [Cara mengubah kebijakan kunci](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-how-to) di *Panduan AWS Key Management Service Pengembang*.

### Konfigurasikan kunci yang dikelola pelanggan pada fungsi yang tahan lama
<a name="durable-encryption-configure"></a>

Anda mengonfigurasi kunci terkelola pelanggan untuk data eksekusi yang tahan lama melalui `KMSKeyArn` bidang `DurableConfig` objek. Atur saat Anda membuat fungsi dengan [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html); perbarui pada fungsi tahan lama yang ada dengan [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html).

------
#### [ Lambda console ]

**Untuk mengonfigurasi kunci terkelola pelanggan pada fungsi tahan lama yang ada**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih fungsi yang tahan lama.

1. Pilih **Konfigurasi**, lalu pilih **Eksekusi tahan lama** dari bilah navigasi kiri.

1. Pilih **Edit**.

1. Di bawah **Enkripsi**, pilih **Gunakan kunci yang dikelola pelanggan**, lalu pilih kunci KMS dari daftar.

1. Pilih **Simpan**.

------
#### [ AWS CLI ]

**Untuk mengonfigurasi kunci terkelola pelanggan saat Anda membuat fungsi**

Dalam contoh [fungsi pembuatan berikut](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html), `--durable-config` opsi menentukan ARN kunci terkelola pelanggan bersama dengan batas waktu eksekusi dan periode retensi yang tahan lama.

```
aws lambda create-function \
  --function-name myDurableFunction \
  --runtime nodejs24.x \
  --handler index.handler \
  --role arn:aws:iam::111122223333:role/myDurableFunctionRole \
  --zip-file fileb://{{function.zip}} \
  --durable-config '{"KMSKeyArn":"{{arn:aws:kms:us-east-1:111122223333:key/key-id}}","ExecutionTimeout":3600,"RetentionPeriodInDays":30}'
```

**Untuk mengonfigurasi kunci terkelola pelanggan pada fungsi tahan lama yang ada**

Gunakan perintah [update-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-configuration.html). Sertakan semua `DurableConfig` bidang yang ingin Anda simpan, karena `--durable-config` menggantikan seluruh objek.

```
aws lambda update-function-configuration \
  --function-name myDurableFunction \
  --durable-config '{"KMSKeyArn":"{{arn:aws:kms:us-east-1:111122223333:key/key-id}}","ExecutionTimeout":3600,"RetentionPeriodInDays":30}'
```

**Untuk menghapus kunci yang dikelola pelanggan dari fungsi yang tahan lama**

Hilangkan `KMSKeyArn` dari`--durable-config`. Eksekusi yang ada terus menggunakan kunci yang dikelola pelanggan yang mereka mulai. Eksekusi baru menggunakan enkripsi default sebagai gantinya.

```
aws lambda update-function-configuration \
  --function-name myDurableFunction \
  --durable-config '{"ExecutionTimeout":3600,"RetentionPeriodInDays":30}'
```

------
#### [ AWS CloudFormation ]

Dalam `AWS::Lambda::Function` sumber daya, atur `KMSKeyArn` properti dari`DurableConfig`:

```
Resources:
  MyDurableFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: myDurableFunction
      Runtime: nodejs24.x
      Handler: index.handler
      Role: !GetAtt MyDurableFunctionRole.Arn
      Code:
        ZipFile: |
          // Your durable function code
      DurableConfig:
        KMSKeyArn: "arn:aws:kms:us-east-1:111122223333:key/key-id"
        ExecutionTimeout: 3600
        RetentionPeriodInDays: 30
```

------

**penting**  
Setiap eksekusi tahan lama menggunakan kunci yang dikelola pelanggan yang dikonfigurasi pada fungsi saat dimulai. Mengubah atau menghapus kunci hanya memengaruhi eksekusi yang dimulai setelah perubahan; eksekusi dalam penerbangan terus menggunakan kunci yang mereka mulai sampai selesai atau gagal.

## Membaca data eksekusi yang tahan lama
<a name="durable-encryption-reading-data"></a>

Dua API baca mengembalikan data eksekusi yang tahan lama:
+ `GetDurableExecution`mengembalikan keadaan saat ini dari eksekusi tunggal, termasuk muatan masukan, data pos pemeriksaan terbaru, dan informasi hasil atau kesalahan.
+ `GetDurableExecutionHistory`mengembalikan daftar peristiwa yang diurutkan yang dipancarkan eksekusi, menunjukkan input dan hasil pos pemeriksaan, input dan hasil pemanggilan berantai, dan hasil akhir.

Kedua API menerima parameter `IncludeExecutionData` permintaan. `IncludeExecutionData`Kapan`true`, Lambda menggunakan kredensi pemanggil untuk memanggil kunci yang dikelola pelanggan`kms:Decrypt`. Lambda kemudian mengembalikan data eksekusi yang didekripsi dalam respons. Identitas penelepon harus ada `kms:Decrypt` pada kunci yang dikelola pelanggan.

`IncludeExecutionData`Kapan`false`, Lambda tidak memanggil AWS KMS atau mendekripsi data eksekusi, dan responsnya disetel ke. `ExecutionDataIncluded` `false` Tanggapan masih termasuk`DurableConfig`, yang menggemakan ARN kunci yang dikelola pelanggan yang digunakan eksekusi. `IncludeExecutionData`default ke`false`, jadi penelepon yang hanya membutuhkan metadata tidak memerlukan izin. AWS KMS 

**Contoh: `GetDurableExecution` respon dengan `IncludeExecutionData=false`**

```
{
    "DurableExecutionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction:execution:exec-abc123",
    "DurableExecutionName": "exec-abc123",
    "FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction",
    "StartTimestamp": 1733256000,
    "Status": "RUNNING",
    "ExecutionDataIncluded": false,
    "DurableConfig": {
        "ExecutionTimeout": 3600,
        "KMSKeyArn": "arn:aws:kms:us-east-1:111122223333:key/key-id",
        "RetentionPeriodInDays": 30
    }
}
```

## Panggilan dirantai
<a name="durable-encryption-chained-invokes"></a>

Ketika fungsi tahan lama menggunakan pemanggilan berantai untuk memanggil fungsi tahan lama lainnya, Lambda memperlakukan eksekusi turunan sebagai eksekusi tahan lama yang independen: ia memiliki ID eksekusi sendiri, aliran pos pemeriksaannya sendiri, dan kunci yang dikelola pelanggannya sendiri. Konfigurasi kunci terkelola pelanggan induk tidak berpengaruh pada data anak, dan konfigurasi kunci terkelola pelanggan anak tidak berpengaruh pada data induk.

**Izin**  
Kepala layanan Lambda harus memiliki `kms:GenerateDataKey` dan `kms:Decrypt` pada kunci yang dikelola pelanggan fungsi anak. Jika fungsi induk dan anak menggunakan kunci terkelola pelanggan yang berbeda, Anda memberikan akses utama layanan pada setiap kunci secara terpisah. Peran eksekusi fungsi induk tidak memerlukan izin pada kunci terkelola pelanggan anak.

**Mengidentifikasi kunci mana yang dienkripsi eksekusi mana**  
Keduanya `GetDurableExecution` dan `ListDurableExecutionsByFunction` mengembalikan ARN kunci terkelola pelanggan yang mengenkripsi setiap eksekusi. Gunakan API ini untuk mengonfirmasi kunci mana yang berlaku saat eksekusi induk atau anak dimulai.

## Caching kunci data
<a name="durable-encryption-data-key-caching"></a>

Untuk mengurangi volume AWS KMS panggilan dan meningkatkan ketersediaan selama gangguan layanan, Lambda menyimpan kunci data yang dihasilkan dari kunci yang dikelola pelanggan Anda hingga 15 menit. Sementara cache hangat, Lambda menggunakan kembali kunci data yang sama di seluruh operasi dalam eksekusi dan di seluruh eksekusi dimulai selama jendela cache.

**Biaya**  
Per-execution AWS KMS biaya tetap rendah karena Lambda memanggil paling banyak `GenerateDataKey` sekali per jendela cache, tidak sekali per pos pemeriksaan. Pada tingkat permintaan tinggi, biaya per eksekusi turun lebih jauh karena lebih banyak eksekusi berbagi setiap kunci data yang di-cache. Anda ditagih untuk AWS KMS panggilan yang sebenarnya dilakukan Lambda, bukan untuk setiap pos pemeriksaan atau pembacaan.

**Stabilitas statis**  
Kunci data tetap di-cache hingga 15 menit. Perubahan pada kunci Anda akan berlaku pada penyegaran cache berikutnya. Selama gangguan layanan yang diperpanjang, Lambda terus melayani dari cache, menjaga eksekusi dalam penerbangan tetap berjalan.

**CloudTrail**  
Caching kunci data berarti Anda melihat lebih sedikit `GenerateDataKey` peristiwa CloudTrail daripada eksekusi atau pos pemeriksaan. Lihat [Memantau kunci KMS untuk fungsi yang tahan lama](#durable-encryption-monitoring) misalnya acara.

## Ketika kunci yang dikelola pelanggan tidak tersedia
<a name="durable-encryption-key-unavailable"></a>

Jika kunci yang dikelola pelanggan yang memulai eksekusi dinonaktifkan, dijadwalkan untuk dihapus, atau aksesnya dicabut melalui kebijakan kunci, eksekusi tidak dapat membuat kemajuan lebih lanjut. Di pos pemeriksaan berikutnya, Lambda gagal eksekusi dengan kesalahan yang tidak dapat dicoba ulang. AWS KMS Memulihkan akses ke kunci tidak secara otomatis melanjutkan eksekusi. Anda harus memulai eksekusi baru.

API yang membaca atau menulis muatan juga gagal saat kunci tidak tersedia. Mereka dapat mengembalikan salah satu pengecualian berikut:
+ `KMSAccessDeniedException`: Lambda tidak dapat mendekripsi data eksekusi yang tahan lama karena akses ke kunci KMS ditolak.
+ `KMSDisabledException`: Lambda tidak dapat mendekripsi data eksekusi yang tahan lama karena kunci KMS dinonaktifkan.
+ `KMSInvalidStateException`: Lambda tidak dapat mendekripsi data eksekusi yang tahan lama karena status kunci KMS tidak valid untuk. `Decrypt`
+ `KMSNotFoundException`: Lambda tidak dapat mendekripsi data eksekusi yang tahan lama karena kunci KMS tidak ditemukan.

Memulihkan akses ke kunci KMS memungkinkan API baca ini berhasil lagi untuk eksekusi yang sudah gagal. Eksekusi gagal tetap gagal; Anda harus memulai eksekusi baru.

Untuk memeriksa metadata eksekusi saat kunci KMS tidak tersedia, panggil dengan. `GetDurableExecution` `IncludeExecutionData=false` Ini mengembalikan status eksekusi, stempel waktu, dan `DurableConfig` (termasuk ARN kunci KMS) tanpa memanggil. AWS KMS

Karena Lambda menyimpan kunci data, menonaktifkan kunci tidak segera berlaku. Lihat perinciannya di [Caching kunci data](#durable-encryption-data-key-caching).

**penting**  
Menghapus kunci KMS yang eksekusi dalam penerbangan atau dipertahankan masih bergantung pada secara permanen menghancurkan eksekusi tersebut dan sejarahnya.

## Memantau kunci KMS untuk fungsi yang tahan lama
<a name="durable-encryption-monitoring"></a>

Saat Anda menggunakan kunci yang dikelola pelanggan dengan fungsi tahan lama, Anda dapat menggunakannya [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)untuk melacak AWS KMS panggilan yang dilakukan Lambda atas nama Anda. Untuk panduan umum tentang AWS KMS peristiwa penelusuran, lihat [Menelusuri aktivitas AWS KMS API](https://docs.aws.amazon.com/kms/latest/developerguide/logging-using-cloudtrail.html#searching-kms-ct).

Untuk mengonfirmasi bahwa Lambda menggunakan kunci Anda sebagaimana dimaksud, cari bidang ini di setiap acara:
+ `eventName`: salah satu`GenerateDataKey`,`Decrypt`, atau `DescribeKey`
+ `eventSource`: `kms.amazonaws.com`
+ `userIdentity.invokedBy`: `lambda.amazonaws.com`
+ `requestParameters.encryptionContext.aws:lambda:FunctionArn`: ARN dari fungsi tahan lama

Contoh berikut adalah CloudTrail peristiwa dari `UpdateFunctionConfiguration` panggilan `CreateFunction` atau yang mengonfigurasi kunci yang dikelola pelanggan pada fungsi yang tahan lama. Lambda mengeluarkan tiga AWS KMS panggilan untuk memvalidasi kunci: real`DescribeKey`, dan dry-run dan. `GenerateDataKey` `Decrypt`

------
#### [ GenerateDataKey ]

Saat Anda menyetel atau mengubah`DurableConfig`, Lambda mengeluarkan dry-run `GenerateDataKey` terhadap kunci terkelola pelanggan Anda untuk memvalidasi bahwa kebijakan kunci memungkinkan Lambda memperoleh kunci data untuk konteks enkripsi fungsi ini. `KMSKeyArn` Dry-run tidak melakukan pekerjaan kriptografi tetapi merekam peristiwa lengkap. CloudTrail Contoh peristiwa berikut mencatat operasi dry-run`GenerateDataKey`:

```
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:example",
        "arn": "arn:aws:sts::111122223333:assumed-role/FunctionAuthor/example",
        "accountId": "111122223333",
        "accessKeyId": "ASIA123456789EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA123456789EXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/FunctionAuthor",
                "accountId": "111122223333",
                "userName": "FunctionAuthor"
            },
            "attributes": {
                "creationDate": "2026-01-15T16:54:42Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "lambda.amazonaws.com"
    },
    "eventTime": "2026-01-15T16:55:00Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "lambda.amazonaws.com",
    "userAgent": "lambda.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "encryptionContext": {
            "aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
        },
        "dryRun": true,
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/key-id",
        "keySpec": "AES_256"
    },
    "responseElements": null,
    "additionalEventData": {
        "keyMaterialId": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0EXAMPLE"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/key-id"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------
#### [ Decrypt ]

Saat Anda menyetel atau mengubah `KMSKeyArn` in`DurableConfig`, Lambda juga mengeluarkan dry-run `Decrypt` terhadap kunci terkelola pelanggan Anda untuk memvalidasi bahwa kebijakan kunci memungkinkan Lambda mendekripsi data untuk konteks enkripsi fungsi ini. Penggunaan dry-run`IGNORE_CIPHERTEXT`, jadi tidak diperlukan ciphertext nyata. Contoh peristiwa berikut mencatat operasi dry-run`Decrypt`:

```
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:example",
        "arn": "arn:aws:sts::111122223333:assumed-role/FunctionAuthor/example",
        "accountId": "111122223333",
        "accessKeyId": "ASIA123456789EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA123456789EXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/FunctionAuthor",
                "accountId": "111122223333",
                "userName": "FunctionAuthor"
            },
            "attributes": {
                "creationDate": "2026-01-15T16:54:42Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "lambda.amazonaws.com"
    },
    "eventTime": "2026-01-15T16:55:00Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "lambda.amazonaws.com",
    "userAgent": "lambda.amazonaws.com",
    "errorCode": "DryRunOperationException",
    "errorMessage": "The request would have succeeded, but the DryRun option is set.",
    "requestParameters": {
        "encryptionContext": {
            "aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:myDurableFunction"
        },
        "dryRun": true,
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/key-id",
        "dryRunModifiers": ["IGNORE_CIPHERTEXT"],
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "responseElements": null,
    "additionalEventData": {
        "keyMaterialId": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0EXAMPLE"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/key-id"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------
#### [ DescribeKey ]

Saat Anda mengatur atau mengubah`DurableConfig`, Lambda memanggil `DescribeKey` untuk mengonfirmasi bahwa kunci simetris dan diaktifkan sebelum menerima perubahan. `KMSKeyArn` Berbeda dengan `GenerateDataKey` dan `Decrypt` probe, ini adalah panggilan nyata, bukan dry-run. Contoh peristiwa berikut mencatat `DescribeKey` operasi:

```
{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:example",
        "arn": "arn:aws:sts::111122223333:assumed-role/FunctionAuthor/example",
        "accountId": "111122223333",
        "accessKeyId": "ASIA123456789EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA123456789EXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/FunctionAuthor",
                "accountId": "111122223333",
                "userName": "FunctionAuthor"
            },
            "attributes": {
                "creationDate": "2026-01-15T16:54:42Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "lambda.amazonaws.com"
    },
    "eventTime": "2026-01-15T16:55:00Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "DescribeKey",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "lambda.amazonaws.com",
    "userAgent": "lambda.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-east-1:111122223333:key/key-id"
    },
    "responseElements": null,
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-east-1:111122223333:key/key-id"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

------

## Topik enkripsi terkait
<a name="durable-encryption-related"></a>
+ [Enkripsi data saat istirahat untuk Lambda](security-encryption-at-rest.md)
+ [Mengamankan variabel lingkungan Lambda](configuration-envvars-encryption.md)
+ [Mengenkripsi paket deployment .zip Lambda](encrypt-zip-package.md)
+ [Model keamanan untuk Lambda SnapStart](snapstart-security.md)
+ [Konfigurasikan fungsi Lambda yang tahan lama](durable-configuration.md)