Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pemicu Lambda pengirim email kustom
Saat Anda menetapkan pemicu pengirim email khusus ke kumpulan pengguna, Amazon Cognito akan memanggil fungsi Lambda, bukan perilaku defaultnya saat peristiwa pengguna mengharuskannya mengirim pesan email. Dengan pemicu pengirim khusus, AWS Lambda fungsi Anda dapat mengirim pemberitahuan email ke pengguna Anda melalui metode dan penyedia yang Anda pilih. Kode kustom fungsi Anda harus memproses dan mengirimkan semua pesan email dari kumpulan pengguna Anda.
Pemicu ini menyajikan skenario di mana Anda mungkin ingin memiliki kontrol yang lebih besar atas cara kumpulan pengguna Anda mengirim pesan email. Fungsi Lambda Anda dapat menyesuaikan panggilan ke SES API operasi Amazon, misalnya ketika Anda ingin mengelola beberapa identitas terverifikasi atau silang. Wilayah AWS Fungsi Anda juga dapat mengarahkan pesan ke media pengiriman lain atau layanan pihak ketiga.
catatan
Saat ini, Anda tidak dapat menetapkan pemicu pengirim khusus di konsol Amazon Cognito. Anda dapat menetapkan pemicu dengan LambdaConfig
parameter dalam UpdateUserPool
API permintaan CreateUserPool
atau.
Untuk mengatur pemicu ini, lakukan langkah-langkah berikut:
-
Buat kunci enkripsi simetris di AWS Key Management Service (AWS KMS). Amazon Cognito menghasilkan rahasia — kata sandi sementara, kode verifikasi, dan kode konfirmasi — kemudian menggunakan kunci ini untuk mengenkripsi rahasia. KMS Anda kemudian dapat menggunakan API operasi Dekripsi di fungsi Lambda Anda untuk mendekripsi rahasia dan mengirimkannya ke pengguna dalam plaintext. AWS Encryption SDKIni adalah alat yang berguna untuk AWS KMS operasi dalam fungsi Anda.
-
Buat fungsi Lambda yang ingin Anda tetapkan sebagai pemicu pengirim kustom Anda. Berikan
kms:Decrypt
izin untuk KMS kunci Anda ke peran fungsi Lambda. -
Berikan
cognito-idp.amazonaws.com
akses utama layanan Amazon Cognito untuk menjalankan fungsi Lambda. -
Tulis kode fungsi Lambda yang mengarahkan pesan Anda ke metode pengiriman khusus atau penyedia pihak ketiga. Untuk mengirimkan verifikasi atau kode konfirmasi pengguna Anda, Base64 mendekode dan mendekripsi nilai
code
parameter dalam permintaan. Operasi ini menghasilkan kode teks biasa atau kata sandi yang harus Anda sertakan dalam pesan Anda. -
Perbarui kumpulan pengguna sehingga menggunakan pemicu Lambda pengirim khusus. IAMPrinsipal yang memperbarui atau membuat kumpulan pengguna dengan pemicu pengirim khusus harus memiliki izin untuk membuat hibah untuk KMS kunci Anda.
LambdaConfig
Cuplikan berikut menetapkan fungsi kustom SMS dan pengirim email."LambdaConfig": { "KMSKeyID": "arn:aws:kms:
us-east-1
:123456789012
:key/a6c4f8e2-0c45-47db-925f-87854bc9e357
", "CustomEmailSender": { "LambdaArn": "arn:aws:lambda:us-east-1
:123456789012
:function:MyFunction
", "LambdaVersion": "V1_0" }, "CustomSMSSender": { "LambdaArn": "arn:aws:lambda:us-east-1
:123456789012
:function:MyFunction
", "LambdaVersion": "V1_0" }
Parameter pemicu Lambda pengirim email kustom
Permintaan yang diteruskan Amazon Cognito ke fungsi Lambda ini adalah kombinasi dari parameter di bawah ini dan parameter umum yang ditambahkan Amazon Cognito ke semua permintaan.
Parameter permintaan pengirim email kustom
- jenis
-
Versi permintaan. Untuk acara pengirim email kustom, nilai string ini selalu
customEmailSenderRequestV1
. - code
-
Kode terenkripsi yang fungsi Anda dapat mendekripsi dan mengirim ke pengguna Anda.
- clientMetadata
-
Satu atau beberapa pasangan nilai kunci yang dapat Anda berikan sebagai input khusus ke pemicu fungsi Lambda pengirim email kustom. Untuk meneruskan data ini ke fungsi Lambda Anda, Anda dapat menggunakan ClientMetadata parameter dalam AdminRespondToAuthChallengedan RespondToAuthChallengeAPItindakan. Amazon Cognito tidak menyertakan data dari ClientMetadata parameter AdminInitiateAuthdan InitiateAuthAPIoperasi dalam permintaan yang diteruskan ke fungsi otentikasi pos.
catatan
Amazon Cognito mengirim
ClientMetadata
ke fungsi pemicu email khusus dalam peristiwa dengan sumber pemicu berikut:-
CustomEmailSender_ForgotPassword
-
CustomEmailSender_SignUp
-
CustomEmailSender_Authentication
Amazon Cognito tidak mengirimkan
ClientMetadata
peristiwa pemicu dengan sumber.CustomEmailSender_AccountTakeOverNotification
-
- userAttributes
-
Satu atau lebih pasangan kunci-nilai yang mewakili atribut pengguna.
Parameter respons pengirim email kustom
Amazon Cognito tidak mengharapkan informasi pengembalian tambahan apa pun dalam respons pengirim email khusus. Fungsi Lambda Anda harus menafsirkan peristiwa dan mendekripsi kode, lalu mengirimkan konten pesan. Fungsi tipikal merakit pesan email dan mengarahkannya ke relay pihak ketigaSMTP.
Mengaktifkan pemicu Lambda pengirim email kustom
Untuk mengatur pemicu pengirim email kustom yang menggunakan logika kustom untuk mengirim pesan email ke kumpulan pengguna Anda, aktifkan pemicu sebagai berikut. Prosedur berikut ini menetapkan pemicu email khusus, SMS pemicu khusus, atau keduanya ke kumpulan pengguna Anda. Setelah Anda menambahkan pemicu pengirim email khusus Anda, Amazon Cognito selalu mengirimkan atribut pengguna, termasuk alamat email, dan kode satu kali ke fungsi Lambda Anda ketika seharusnya mengirim pesan email dengan Amazon Simple Email Service.
penting
Amazon Cognito HTML -escapes karakter yang dicadangkan seperti <
(<
) dan >
(>
) di kata sandi sementara pengguna Anda. Karakter ini mungkin muncul dalam kata sandi sementara yang dikirimkan Amazon Cognito ke fungsi pengirim email khusus Anda, tetapi tidak muncul dalam kode verifikasi sementara. Untuk mengirim kata sandi sementara, fungsi Lambda Anda harus melepaskan karakter ini setelah mendekripsi kata sandi, dan sebelum mengirim pesan ke pengguna Anda.
-
Buat sebuah kunci enkripsi di AWS KMS. Kunci ini mengenkripsi kata sandi sementara dan kode otorisasi yang dihasilkan Amazon Cognito. Anda kemudian dapat mendekripsi rahasia ini dalam fungsi Lambda pengirim khusus dan mengirimkannya ke pengguna Anda dalam teks biasa.
-
Berikan
cognito-idp.amazonaws.com
akses utama layanan Amazon Cognito untuk mengenkripsi kode dengan kunci. KMSTerapkan kebijakan berbasis sumber daya berikut ke kunci Anda. KMS
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "cognito-idp.amazonaws.com" }, "Action": "kms:CreateGrant", "Resource": "arn:aws:kms:
us-west-2
:111222333444
:key/1example-2222-3333-4444-999example
", "Condition": { "StringEquals": { "aws:SourceAccount": "111222333444
" }, "ArnLike": { "aws:SourceArn": "arn:aws:cognito-idp:us-west-2
:111222333444
:userpool/us-east-1_EXAMPLE
" } } }] } -
Buat fungsi Lambda untuk pemicu pengirim kustom. Amazon Cognito menggunakan AWS enkripsi SDK untuk mengenkripsi rahasia, kata sandi sementara, dan kode yang mengotorisasi permintaan pengguna Anda. API
-
Tetapkan IAM peran ke fungsi Lambda Anda yang memiliki, setidaknya
kms:Decrypt
, izin untuk kunci Anda. KMS
-
-
Berikan
cognito-idp.amazonaws.com
akses utama layanan Amazon Cognito untuk menjalankan fungsi Lambda.AWS CLI Perintah berikut memberikan izin Amazon Cognito untuk menjalankan fungsi Lambda Anda:
aws lambda add-permission --function-name
lambda_arn
--statement-id "CognitoLambdaInvokeAccess
" --action lambda:InvokeFunction --principal cognito-idp.amazonaws.com -
Tulis kode fungsi Lambda Anda untuk mengirim pesan Anda. Amazon Cognito menggunakan AWS Encryption SDK untuk mengenkripsi rahasia sebelum Amazon Cognito mengirimkan rahasia ke fungsi Lambda pengirim khusus. Dalam fungsi Anda, dekripsi rahasia dan proses metadata yang relevan. Kemudian kirim kode, pesan kustom Anda sendiri, dan nomor telepon tujuan ke kustom API yang mengirimkan pesan Anda.
-
Tambahkan AWS Encryption SDK ke fungsi Lambda Anda. Untuk informasi selengkapnya, lihat Bahasa SDK pemrograman AWS enkripsi. Untuk memperbarui paket Lambda, selesaikan langkah-langkah berikut.
-
Ekspor fungsi Lambda Anda sebagai file.zip di file. AWS Management Console
-
Buka fungsi Anda dan tambahkan AWS Encryption SDK. Untuk informasi selengkapnya dan tautan unduhan, lihat bahasa AWS Encryption SDK pemrograman di Panduan AWS Encryption SDK Pengembang.
-
Zip fungsi Anda dengan SDK dependensi Anda, dan unggah fungsi ke Lambda. Untuk informasi selengkapnya, lihat Menerapkan fungsi Lambda sebagai arsip file.zip di AWS Lambda Panduan Pengembang.
-
-
Perbarui kumpulan pengguna Anda untuk menambahkan pemicu Lambda pengirim kustom. Sertakan
CustomEmailSender
parameterCustomSMSSender
atau dalamUpdateUserPool
API permintaan.UpdateUserPool
APIOperasi ini membutuhkan semua parameter kumpulan pengguna Anda dan parameter yang ingin Anda ubah. Jika Anda tidak memberikan semua parameter yang relevan, Amazon Cognito menetapkan nilai parameter yang hilang ke defaultnya. Seperti yang ditunjukkan dalam contoh berikut, sertakan entri untuk semua fungsi Lambda yang ingin Anda tambahkan atau simpan di kumpulan pengguna Anda. Untuk informasi selengkapnya, lihat Memperbarui kumpulan pengguna dan konfigurasi klien aplikasi.#Send this parameter in an 'aws cognito-idp update-user-pool' CLI command, including any existing #user pool configurations. --lambda-config "PreSignUp=
lambda-arn
, \ CustomSMSSender={LambdaVersion=V1_0,LambdaArn=lambda-arn
}, \ CustomEmailSender={LambdaVersion=V1_0,LambdaArn=lambda-arn
}, \ KMSKeyID=key-id
"
Untuk menghapus pemicu Lambda pengirim kustom dengan update-user-pool
AWS CLI, hilangkan CustomSMSSender
parameter CustomEmailSender
atau --lambda-config
dari, dan sertakan semua pemicu lain yang ingin Anda gunakan dengan kumpulan pengguna Anda.
Untuk menghapus pemicu Lambda pengirim kustom dengan UpdateUserPool
API permintaan, hilangkan CustomSMSSender
parameter CustomEmailSender
atau dari badan permintaan yang berisi konfigurasi kumpulan pengguna lainnya.
Contoh kode
Contoh Node.js berikut memproses peristiwa pesan email dalam fungsi Lambda pengirim email kustom Anda. Contoh ini mengasumsikan fungsi Anda memiliki dua variabel lingkungan yang ditentukan.
KEY_ALIAS
-
Alias KMS kunci yang ingin Anda gunakan untuk mengenkripsi dan mendekripsi kode pengguna Anda.
KEY_ARN
-
Amazon Resource Name (ARN) dari KMS kunci yang ingin Anda gunakan untuk mengenkripsi dan mendekripsi kode pengguna Anda.
const AWS = require('aws-sdk'); const b64 = require('base64-js'); const encryptionSdk = require('@aws-crypto/client-node'); //Configure the encryption SDK client with the KMS key from the environment variables. const { encrypt, decrypt } = encryptionSdk.buildClient(encryptionSdk.CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT); const generatorKeyId = process.env.KEY_ALIAS; const keyIds = [ process.env.KEY_ARN ]; const keyring = new encryptionSdk.KmsKeyringNode({ generatorKeyId, keyIds }) exports.handler = async (event) => { //Decrypt the secret code using encryption SDK. let plainTextCode; if(event.request.code){ const { plaintext, messageHeader } = await decrypt(keyring, b64.toByteArray(event.request.code)); plainTextCode = plaintext } //PlainTextCode now contains the decrypted secret. if(event.triggerSource == 'CustomEmailSender_SignUp'){ //Send an email message to your user via a custom provider. //Include the temporary password in the message. } else if(event.triggerSource == 'CustomEmailSender_Authentication'){ //Send an MFA message. } else if(event.triggerSource == 'CustomEmailSender_ResendCode'){ //Send a message with next steps for password reset. } else if(event.triggerSource == 'CustomEmailSender_ForgotPassword'){ //Send a message with next steps for password reset. } else if(event.triggerSource == 'CustomEmailSender_UpdateUserAttribute'){ //Send a message with next steps for confirming the new attribute. } else if(event.triggerSource == 'CustomEmailSender_VerifyUserAttribute'){ //Send a message with next steps for confirming the new attribute. } else if(event.triggerSource == 'CustomEmailSender_AdminCreateUser'){ //Send a message with next steps for signing in with a new user profile. } else if(event.triggerSource == 'CustomEmailSender_AccountTakeOverNotification'){ //Send a message describing the threat protection event and next steps. } return; };
Sumber pemicu Lambda pengirim email khusus
Tabel berikut menunjukkan peristiwa pemicu untuk sumber pemicu email kustom dalam kode Lambda Anda.
TriggerSource value |
Peristiwa |
---|---|
CustomEmailSender_SignUp |
Seorang pengguna mendaftar dan Amazon Cognito mengirimkan pesan selamat datang. |
CustomEmailSender_Authentication |
Pengguna masuk dan Amazon Cognito mengirimkan kode otentikasi () multi-faktor. MFA |
CustomEmailSender_ForgotPassword |
Seorang pengguna meminta kode untuk mengatur ulang kata sandi mereka. |
CustomEmailSender_ResendCode |
Seorang pengguna meminta kode konfirmasi akun pengganti. |
CustomEmailSender_UpdateUserAttribute |
Pengguna memperbarui alamat email atau atribut nomor telepon dan Amazon Cognito mengirimkan kode untuk memverifikasi atribut. |
CustomEmailSender_VerifyUserAttribute |
Pengguna membuat atribut alamat email atau nomor telepon baru dan Amazon Cognito mengirimkan kode untuk memverifikasi atribut. |
CustomEmailSender_AdminCreateUser |
Anda membuat pengguna baru di kumpulan pengguna Anda dan Amazon Cognito mengirimi mereka kata sandi sementara. |
CustomEmailSender_AccountTakeOverNotification |
Amazon Cognito mendeteksi upaya untuk mengambil alih akun pengguna dan mengirimkan pemberitahuan kepada pengguna. |