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
Dengan fungsi yang AWS Lambda tahan lama, 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
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 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
Apa yang dienkripsi
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
Invokepermintaan.Data pos pemeriksaan disimpan oleh
CheckpointDurableExecutionAPI, termasuk hasil langkah, kesalahan langkah, dan input pemanggilan berantai.Hasil eksekusi dan kesalahan.
Hasil callback dan kesalahan yang Anda kirimkan melalui
SendDurableExecutionCallbackSuccessdanSendDurableExecutionCallbackFailure.
Function-level dan kunci eksekusi yang tahan lama bersifat independen
Tingkat fungsi KMSKeyArn yang mengenkripsi variabel lingkungan, paket penerapan .zip, dan SnapStartsnapshot 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
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
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 PengembangAWS Key Management Service .
Izin
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
Kebijakan utama 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:GenerateDataKeyLambda dan.kms:DecryptIzinkan peran eksekusi fungsi untuk mendekripsi data eksekusi yang tahan lama. Memberikan peran eksekusi
kms:Decryptuntuk membaca status dan memajukan eksekusi.Izinkan penulis fungsi untuk mendeskripsikan kunci ini. Memberikan
kms:DescribeKeysehingga Lambda dapat memvalidasi bahwa kuncinya simetris dan diaktifkan selama atau.CreateFunctionUpdateFunctionConfigurationIzinkan pembuat fungsi untuk memvalidasi kunci ini untuk fungsi tertentu. Hibah
kms:GenerateDataKeydankms:DecryptLambda dapat memvalidasi izin kunci dan akses dengan konteks enkripsi fungsi selama atau.CreateFunctionUpdateFunctionConfigurationIni mengonfirmasi kebijakan kunci menerima panggilan untuk fungsi khusus ini sebelum fungsi dibuat atau diperbarui.Izinkan operator eksekusi yang tahan lama. Memberikan operator
kms:Decryptuntuk panggilan keGetDurableExecution,GetDurableExecutionHistorydenganIncludeExecutionData=true,,GetDurableExecutionStateStopDurableExecution, 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:
kms:ViaServicemembatasi 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.aws:SourceArndanaws:SourceAccountmelindungi dari masalah wakil lintas layanan yang membingungkan. 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.kms:EncryptionContext:aws:lambda:FunctionArnmencakup 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.
contoh 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 di Panduan AWS Key Management Service Pengembang.
Konfigurasikan kunci yang dikelola pelanggan pada fungsi yang tahan lama
Anda mengonfigurasi kunci terkelola pelanggan untuk data eksekusi yang tahan lama melalui KMSKeyArn bidang DurableConfig objek. Atur saat Anda membuat fungsi dengan CreateFunction; perbarui pada fungsi tahan lama yang ada dengan UpdateFunctionConfiguration.
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
Dua API baca mengembalikan data eksekusi yang tahan lama:
GetDurableExecutionmengembalikan keadaan saat ini dari eksekusi tunggal, termasuk muatan masukan, data pos pemeriksaan terbaru, dan informasi hasil atau kesalahan.GetDurableExecutionHistorymengembalikan 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. IncludeExecutionDataKapantrue, Lambda menggunakan kredensi pemanggil untuk memanggil kunci yang dikelola pelanggankms:Decrypt. Lambda kemudian mengembalikan data eksekusi yang didekripsi dalam respons. Identitas penelepon harus ada kms:Decrypt pada kunci yang dikelola pelanggan.
IncludeExecutionDataKapanfalse, Lambda tidak memanggil AWS KMS atau mendekripsi data eksekusi, dan responsnya disetel ke. ExecutionDataIncluded false Tanggapan masih termasukDurableConfig, yang menggemakan ARN kunci yang dikelola pelanggan yang digunakan eksekusi. IncludeExecutionDatadefault kefalse, 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
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
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 misalnya acara.
Ketika kunci yang dikelola pelanggan tidak tersedia
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.DecryptKMSNotFoundException: 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.
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
Saat Anda menggunakan kunci yang dikelola pelanggan dengan fungsi tahan lama, Anda dapat menggunakannya AWS CloudTrailuntuk melacak AWS KMS panggilan yang dilakukan Lambda atas nama Anda. Untuk panduan umum tentang AWS KMS peristiwa penelusuran, lihat Menelusuri aktivitas AWS KMS API.
Untuk mengonfirmasi bahwa Lambda menggunakan kunci Anda sebagaimana dimaksud, cari bidang ini di setiap acara:
eventName: salah satuGenerateDataKey,Decrypt, atauDescribeKeyeventSource:kms.amazonaws.com.rproxy.goskope.comuserIdentity.invokedBy:lambda.amazonaws.com.rproxy.goskope.comrequestParameters.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: realDescribeKey, dan dry-run dan. GenerateDataKey Decrypt