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 AWS Lambda tahan lama, Anda dapat membangun aplikasi multi-langkah 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 tahan lama saat diam. Anda juga dapat mengonfigurasi kunci yang dikelola 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 tahan lama Lambda menggunakan kunci KMS yang sama dengan yang dimulai untuk seluruh masa pakainya. Mengubah atau menghapus kunci 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 yang dikelola pelanggan pada fungsi tahan lama, Lambda menggunakan kunci tersebut untuk mengenkripsi data eksekusi tahan lama berikut saat diam:
Muatan input yang Anda lewati dengan setiap
Invokepermintaan.Data pos pemeriksaan dipertahankan oleh
CheckpointDurableExecutionAPI, termasuk hasil langkah, kesalahan langkah, dan input pemanggilan beraneka.Hasil eksekusi dan kesalahan.
Hasil panggilan balik dan kesalahan yang Anda kirimkan melalui
SendDurableExecutionCallbackSuccessdanSendDurableExecutionCallbackFailure.
Function-level dan kunci eksekusi tahan lama bersifat independen
Tingkat fungsi KMSKeyArn yang mengenkripsi variabel lingkungan, paket penerap an .zip, dan SnapStart snapshot terpisah dari KMSKeyArn dalam DurableConfig yang mengenkripsi data eksekusi tahan lama. Mengatur satu tidak mengatur yang lain. Anda dapat menggunakan kunci KMS yang sama untuk keduanya, atau Anda dapat menggunakan kunci KMS yang berbeda.
Menyiapkan 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.
Membuat kunci yang dikelola pelanggan
Fungsi tahan lama mendukung kunci KMS enkripsi simetris di Wilayah yang sama AWS dengan fungsinya. Cross-Region kunci tidak didukung. Untuk membuat kunci yang dikelola pelanggan simetris, ikuti langkah-langkah untuk membuat kunci KMS enkripsi simetris di Panduan Peng AWS Key Management Service embang.
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 pemanggil; 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 tepat satu kebijakan kunci. Dalam kebijakan kunci, hanya Resource: "*" mengacu pada kunci KMS yang dilampirkan kebijakan, bukan ke semua kunci KMS di akun Anda.
Kebijakan utama fungsi yang 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 kepada root akun untuk mengelola kunci. Pernyataan ini tidak menggunakan kondisi karena cakupannya akan mencegah Anda memutar, memperbarui, atau menghapus kunci.
Izinkan Lambda menggunakan tombol ini untuk fungsi yang tahan lama. Memberikan prinsip layanan Lambda
kms:GenerateDataKeydankms:Decrypt.Izinkan peran eksekusi fungsi untuk mendekripsi data eksekusi yang tahan lama. Memberikan peran eksekusi
kms:Decryptuntuk membaca status dan memajukan eksekusi.Izinkan penulis fungsi untuk menjelaskan kunci ini. Hibah
kms:DescribeKeysehingga Lambda dapat memvalidasi bahwa kunci simetris dan diaktifkan selamaCreateFunctionatau.UpdateFunctionConfigurationIzinkan penulis fungsi untuk memvalidasi kunci ini untuk fungsi tertentu. Grants
kms:GenerateDataKeykms:Decryptdan Lambda dapat memvalidasi izin kunci dan akses dengan konteks enkripsi fungsi selamaCreateFunctionatauUpdateFunctionConfiguration. Ini 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,GetDurableExecutionState,StopDurableExecution,, dan API panggilan balik.
Sebagai praktik terbaik, gunakan prinsip terpisah untuk peran eksekusi, penulis fungsi, dan operator eksekusi tahan lama sehingga setiap identitas hanya memiliki kemampuan yang dibutuhkannya.
Ketentuan kebijakan yang disarankan
Kebijakan ini menggunakan ketentuan berikut untuk mengurangkan akses:
kms: ViaService membatasi penggunaan kunci untuk permintaan yang dialihkan melalui Lambda. Menerapkan ini ke peran eksekusi, penulis fungsi, dan pernyataan operator mencegah mereka menggunakan kunci secara langsung AWS KMS.
aws: SourceArn dan aws: SourceAccount lindungi dari masalah wakil yang membingungkan lintas layanan. Lambda meneruskan nilai-nilai ini saat memanggil AWS KMS menggunakan kredentif layanannya sendiri. Kondisi ini hanya berlaku untuk pernyataan utama layanan Lambda. Peran eksekusi, penulis fungsi, dan pernyataan operator memang AWS KMS gil dengan kredentif sesi akses maju pemanggil, yang tidak membawa header ini.
kms: EncryptionContext:aws:lambda:FunctionArn cakupan kunci untuk 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 selengkap AWS KMS nya tentang kebijakan utama, lihat Cara mengubah kebijakan utama di Panduan Peng AWS Key Management Service embang.
Mengkonfigurasi kunci yang dikelola pelanggan pada fungsi yang tahan lama
Anda mengonfigurasi kunci yang dikelola 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 gunakan hingga selesai atau gagal.
Membaca data eksekusi yang tahan lama
Dua API baca mengembalikan data eksekusi yang tahan lama:
GetDurableExecutionmengembalikan status saat ini dari satu eksekusi, 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 berrantai, dan hasil akhir.
Kedua API menerima parameter IncludeExecutionData permintaan. IncludeExecutionDataKapan yatrue, Lambda menggunakan kredenSIAL penelepon untuk memanggil kunci kms:Decrypt yang dikelola pelanggan. Lambda kemudian mengembalikan data eksekusi yang didekripsi dalam respons. Identitas penelepon harus ada kms:Decrypt pada kunci yang dikelola pelanggan.
IncludeExecutionDataKapan yafalse, Lambda tidak memanggil AWS KMS atau mendekripsi data eksekusi, dan respons ditetapkan ExecutionDataIncluded kefalse. Tanggapan masih termasukDurableConfig, yang menggemakan kunci ARN yang dikelola pelanggan yang digunakan eksekusi. IncludeExecutionDatadefaultnyafalse, sehingga penelepon yang hanya membutuhkan metadata tidak memerlukan AWS KMS izin.
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 yang dirantai
Ketika fungsi tahan lama menggunakan panggilan rantai untuk memanggil fungsi tahan lama lainnya, Lambda memperlakukan eksekusi anak sebagai eksekusi tahan lama yang independen: ia memiliki ID eksekusi sendiri, aliran pos pemeriksaan sendiri, dan kunci yang dikelola pelanggan sendiri. Konfigurasi kunci yang dikelola pelanggan orang tua tidak berpengaruh pada data anak, dan konfigurasi kunci yang dikelola pelanggan anak tidak berpengaruh pada data orang tua.
Izin
Prinsip layanan Lambda harus memiliki kms:GenerateDataKey dan kms:Decrypt pada kunci yang dikelola pelanggan fungsi anak. Jika fungsi induk dan anak menggunakan kunci yang dikelola pelanggan yang berbeda, Anda memberikan akses utama layanan pada setiap kunci secara terpisah. Peran eksekusi fungsi induk tidak memerlukan izin pada kunci yang dikelola pelanggan anak.
Mengidentifikasi kunci mana yang dienkripsi eksekusi
Kedu GetDurableExecution anya dan ListDurableExecutionsByFunction mengembalikan kunci ARN yang dikelola 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 hingga 15 menit. Sementara cache hangat, Lambda menggunakan kembali kunci data yang sama di seluruh operasi dalam eksekusi dan di seluruh eksekusi yang dimulai selama jendela cache.
Biaya
Per-execution AWS KMS biaya tetap rendah karena Lambda memanggil paling banyak GenerateDataKey sekali per jendela cache, bukan sekali per pos pemeriksaan. Pada tingkat permintaan yang 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 tombol KMS untuk fungsi tahan lama misalnya acara.
Ketika kunci yang dikelola pelanggan tidak tersedia
Jika kunci yang dikelola pelanggan yang dimulai dengan eksekusi dinonaktifkan, dijadwalkan untuk dihapus, atau aksesnya dicabut melalui kebijakan kunci, eksekusi tidak dapat membuat kemajuan lebih lanjut. Pada pos pemeriksaan berikutnya, Lambda gagal dalam eksekusi dengan kesalahan yang tidak AWS KMS dapat dicoba ulang. Memulihkan akses ke kunci tidak secara otomatis melanjutkan eksekusi. Anda harus memulai eksekusi baru.
API yang membaca atau menulis payload juga gagal saat kunci tidak tersedia. Mereka dapat mengembalikan salah satu pengecualian berikut:
KMSAccessDeniedException: Lambda tidak dapat mendekripsi data eksekusi tahan lama karena akses ke kunci KMS ditolak.KMSDisabledException: Lambda tidak dapat mendekripsi data eksekusi tahan lama karena kunci KMS dinonaktifkan.KMSInvalidStateException: Lambda tidak dapat mendekripsi data eksekusi tahan lama karena status kunci KMS tidak valid untuk.DecryptKMSNotFoundException: Lambda tidak dapat mendekripsi data eksekusi tahan lama karena kunci KMS tidak ditemukan.
Memulihkan akses ke kunci KMS memungkinkan API baca ini berhasil lagi untuk eksekusi yang sudah gagal. Eksekusi yang gagal tetap gagal; Anda harus memulai eksekusi baru.
Untuk memeriksa metadata eksekusi saat kunci KMS tidak tersedia, panggil GetDurableExecution denganIncludeExecutionData=false. Ini mengembalikan status eksekusi, cap waktu, dan DurableConfig (termasuk kunci KMS ARN) 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 masih bergantung pada eksekusi dalam penerbangan atau eksekusi yang dipertahankan secara permanen akan menghancurkan eksekusi tersebut dan sejarahnya.
Memantau tombol KMS untuk fungsi tahan lama
Bila Anda menggunakan kunci yang dikelola pelanggan dengan fungsi tahan lama, Anda dapat menggunakannya AWS CloudTrail untuk melacak AWS KMS panggilan yang dilakukan Lambda atas nama Anda. Untuk panduan umum tentang menelus AWS KMS uri acara, lihat Aktiv AWS KMS itas API Pencarian.
Untuk mengonfirmasi bahwa Lambda menggunakan kunci Anda sebagaimana dimaksud, cari bidang ini di setiap acara:
eventName: salah satu dariGenerateDataKey,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 tahan lama. Lambda mengeluarkan tiga AWS KMS panggilan untuk memvalidasi kunci: realDescribeKey, dan dry- GenerateDataKey run and. Decrypt