Mengonfigurasi sumber MSK acara Amazon untuk Lambda - AWS Lambda

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

Mengonfigurasi sumber MSK acara Amazon untuk Lambda

Sebelum Anda membuat pemetaan sumber peristiwa untuk MSK klaster Amazon Anda, Anda perlu memastikan bahwa klaster Anda dan tempat VPC tinggalnya telah dikonfigurasi dengan benar. Anda juga perlu memastikan bahwa peran eksekusi fungsi Lambda Anda memiliki izin yang diperlukanIAM.

Ikuti petunjuk di bagian berikut untuk mengonfigurasi MSK klaster Amazon,VPC, dan fungsi Lambda. Untuk mempelajari cara membuat pemetaan sumber kejadian, lihatMenambahkan Amazon MSK sebagai sumber peristiwa.

MSKotentikasi klaster

Lambda memerlukan izin untuk mengakses MSK klaster Amazon, mengambil catatan, dan melakukan tugas lainnya. Amazon MSK mendukung beberapa opsi untuk mengontrol akses klien ke MSK cluster.

Akses yang Tidak Diautentikasi

Jika tidak ada klien yang mengakses cluster melalui internet, Anda dapat menggunakan akses yang tidak diautentikasi.

SASL/SCRAMotentikasi

Amazon MSK mendukung otentikasi Simple Authentication and SecurityLayer/Salted Challenge Response Authentication Mechanism (SASL/SCRAM) dengan enkripsi Transport Layer Security (TLS). Agar Lambda terhubung ke cluster, Anda menyimpan kredensyal otentikasi (nama pengguna dan kata sandi) secara rahasia. AWS Secrets Manager

Untuk informasi selengkapnya tentang penggunaan Secrets Manager, lihat Autentikasi nama pengguna dan kata sandi dengan AWS Secrets Manager di Panduan Developer Amazon Managed Streaming for Apache Kafka.

Amazon MSK tidak mendukungSASL/PLAINotentikasi.

IAMotentikasi berbasis peran

Anda dapat menggunakan IAM untuk mengautentikasi identitas klien yang terhubung ke MSK cluster. Jika IAM auth aktif di MSK klaster Anda, dan Anda tidak memberikan rahasia untuk autentikasi, Lambda secara otomatis default menggunakan auth. IAM Untuk membuat dan menerapkan kebijakan berbasis pengguna atau peran, gunakan konsol atau. IAM API Untuk informasi selengkapnya, lihat kontrol IAM akses di Panduan Developer Amazon Managed Streaming for Apache Kafka.

Untuk mengizinkan Lambda terhubung ke MSK klaster, membaca catatan, dan melakukan tindakan lain yang diperlukan, tambahkan izin berikut ke peran eksekusi fungsi Anda.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kafka-cluster:Connect", "kafka-cluster:DescribeGroup", "kafka-cluster:AlterGroup", "kafka-cluster:DescribeTopic", "kafka-cluster:ReadData", "kafka-cluster:DescribeClusterDynamicConfiguration" ], "Resource": [ "arn:aws:kafka:region:account-id:cluster/cluster-name/cluster-uuid", "arn:aws:kafka:region:account-id:topic/cluster-name/cluster-uuid/topic-name", "arn:aws:kafka:region:account-id:group/cluster-name/cluster-uuid/consumer-group-id" ] } ] }

Anda dapat membuat cakupan izin ini ke klaster, topik, dan grup tertentu. Untuk informasi selengkapnya, lihat tindakan Amazon MSK Kafka di Panduan Developer Amazon Managed Streaming for Apache Kafka.

TLSAutentikasi bersama

Mutual TLS (mTLS) menyediakan otentikasi dua arah antara klien dan server. Klien mengirimkan sertifikat ke server untuk server untuk memverifikasi klien, dan server mengirimkan sertifikat ke klien untuk klien untuk memverifikasi server.

Untuk AmazonMSK, Lambda bertindak sebagai klien. Anda mengonfigurasi sertifikat klien (sebagai rahasia di Secrets Manager) untuk mengautentikasi Lambda dengan broker di MSK klaster Anda. Sertifikat klien harus ditandatangani oleh CA di toko kepercayaan server. MSKCluster mengirimkan sertifikat server ke Lambda untuk mengautentikasi broker dengan Lambda. Sertifikat server harus ditandatangani oleh otoritas sertifikasi (CA) yang ada di toko AWS kepercayaan.

Untuk petunjuk tentang cara membuat sertifikat klien, lihat Memperkenalkan TLS autentikasi timbal balik untuk Amazon MSK sebagai sumber peristiwa.

Amazon MSK tidak mendukung sertifikat server yang ditandatangani sendiri, karena semua broker di Amazon MSK menggunakan sertifikat publik yang ditandatangani oleh Amazon Trust Services CAs, yang dipercaya Lambda secara default.

Untuk informasi selengkapnya tentang m TLS untuk AmazonMSK, lihat TLSAutentikasi Bersama di Panduan Developer Amazon Managed Streaming for Apache Kafka.

Mengkonfigurasi rahasia m TLS

AUTHRahasia CLIENT CERTIFICATE TLS _ _ memerlukan bidang sertifikat dan bidang kunci pribadi. Untuk kunci pribadi terenkripsi, rahasianya memerlukan kata sandi kunci pribadi. Sertifikat dan kunci privat harus dalam PEM format.

catatan

Lambda mendukung PBES1(tetapi tidakPBES2) algoritma enkripsi kunci pribadi.

Bidang sertifikat harus berisi daftar sertifikat, dimulai dengan sertifikat klien, diikuti oleh sertifikat perantara, dan diakhiri dengan sertifikat root. Setiap sertifikat harus dimulai pada baris baru dengan struktur berikut:

-----BEGIN CERTIFICATE----- <certificate contents> -----END CERTIFICATE-----

Secrets Manager mendukung rahasia hingga 65.536 byte, yang merupakan ruang yang cukup untuk rantai sertifikat yang panjang.

Kunci pribadi harus dalam format PKCS#8, dengan struktur berikut:

-----BEGIN PRIVATE KEY----- <private key contents> -----END PRIVATE KEY-----

Untuk kunci pribadi terenkripsi, gunakan struktur berikut:

-----BEGIN ENCRYPTED PRIVATE KEY----- <private key contents> -----END ENCRYPTED PRIVATE KEY-----

Contoh berikut ini menunjukkan konten dari rahasia untuk TLS otentikasi m menggunakan kunci privat terenkripsi. Untuk kunci pribadi terenkripsi, Anda menyertakan kata sandi kunci pribadi dalam rahasia.

{ "privateKeyPassword": "testpassword", "certificate": "-----BEGIN CERTIFICATE----- MIIE5DCCAsygAwIBAgIRAPJdwaFaNRrytHBto0j5BA0wDQYJKoZIhvcNAQELBQAw ... j0Lh4/+1HfgyE2KlmII36dg4IMzNjAFEBZiCRoPimO40s1cRqtFHXoal0QQbIlxk cmUuiAii9R0= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFgjCCA2qgAwIBAgIQdjNZd6uFf9hbNC5RdfmHrzANBgkqhkiG9w0BAQsFADBb ... rQoiowbbk5wXCheYSANQIfTZ6weQTgiCHCCbuuMKNVS95FkXm0vqVD/YpXKwA/no c8PH3PSoAaRwMMgOSA2ALJvbRz8mpg== -----END CERTIFICATE-----", "privateKey": "-----BEGIN ENCRYPTED PRIVATE KEY----- MIIFKzBVBgkqhkiG9w0BBQ0wSDAnBgkqhkiG9w0BBQwwGgQUiAFcK5hT/X7Kjmgp ... QrSekqF+kWzmB6nAfSzgO9IaoAaytLvNgGTckWeUkWn/V0Ck+LdGUXzAC4RxZnoQ zp2mwJn2NYB7AZ7+imp0azDZb+8YG2aUCiyqb6PnnA== -----END ENCRYPTED PRIVATE KEY-----" }

Bagaimana Lambda memilih broker bootstrap

Lambda memilih broker bootstrap berdasarkan metode otentikasi yang tersedia di cluster Anda, dan apakah Anda memberikan rahasia untuk otentikasi. Jika Anda memberikan rahasia untuk m TLS atauSASL/SCRAM, Lambda secara otomatis memilih metode autentikasi itu. Jika Anda tidak memberikan rahasia, Lambda memilih metode autentikasi terkuat yang aktif di cluster Anda. Berikut ini adalah urutan prioritas di mana Lambda memilih broker, dari autentikasi terkuat hingga terlemah:

  • m TLS (rahasia disediakan untuk mTLS)

  • SASL/SCRAM (secret provided for SASL/SCRAM)

  • SASLIAM(tidak ada rahasia yang disediakan, dan IAM auth aktif)

  • Tidak diautentikasi TLS (tidak ada rahasia yang disediakan, dan IAM autentikasi tidak aktif)

  • Plaintext (tidak ada rahasia yang diberikan, dan autentikasi dan tidak IAM diautentikasi tidak aktifTLS)

catatan

Jika Lambda tidak dapat terhubung ke jenis broker yang paling aman, Lambda tidak mencoba untuk terhubung ke jenis broker yang berbeda (lebih lemah). Jika Anda ingin Lambda memilih jenis broker yang lebih lemah, nonaktifkan semua metode autentikasi yang lebih kuat di cluster Anda.

Mengelola API akses dan izin

Selain mengakses MSK klaster Amazon, fungsi Anda memerlukan izin untuk melakukan berbagai tindakan Amazon MSKAPI. Anda menambahkan izin ini ke peran eksekusi fungsi. Jika pengguna Anda memerlukan akses ke salah satu MSK API tindakan Amazon, tambahkan izin yang diperlukan ke kebijakan identitas untuk pengguna atau peran.

Anda dapat menambahkan setiap izin berikut ke peran eksekusi Anda secara manual. Atau, Anda dapat melampirkan kebijakan AWS terkelola AWSLambdaMSKExecutionRoleke peran eksekusi Anda. AWSLambdaMSKExecutionRoleKebijakan ini berisi semua API tindakan dan VPC izin yang diperlukan yang tercantum di bawah ini.

Diperlukan izin peran eksekusi fungsi Lambda

Untuk membuat dan menyimpan log di grup log di Amazon CloudWatch Logs, fungsi Lambda Anda harus memiliki izin berikut di peran eksekusi:

Agar Lambda dapat mengakses MSK klaster Amazon Anda atas nama Anda, fungsi Lambda Anda harus memiliki izin berikut di peran eksekusi:

Anda hanya perlu menambahkan salah satu kafka:DescribeCluster ataukafka:DescribeClusterV2. Untuk MSK cluster yang disediakan, salah satu izin berfungsi. Untuk MSK cluster tanpa server, Anda harus menggunakan. kafka:DescribeClusterV2

catatan

Lambda akhirnya berencana untuk menghapus kafka:DescribeCluster izin dari kebijakan AWSLambdaMSKExecutionRole terkelola terkait. Jika Anda menggunakan kebijakan ini, Anda harus memigrasikan aplikasi apa pun yang digunakan kafka:DescribeCluster untuk digunakankafka:DescribeClusterV2.

VPCizin

Jika hanya pengguna dalam MSK klaster Amazon, fungsi Lambda Anda harus memiliki izin untuk mengakses sumber daya Amazon VPC Anda. VPC Sumber daya ini termasuk AndaVPC, subnet, grup keamanan, dan antarmuka jaringan. Untuk mengakses sumber daya ini, peran eksekusi fungsi Anda harus memiliki izin berikut: Izin ini disertakan dalam kebijakan yang AWSLambdaMSKExecutionRole AWS dikelola.

Izin fungsi Lambda opsional

Fungsi Lambda Anda mungkin juga memerlukan izin untuk:

  • Akses SCRAM rahasia Anda, jika menggunakanSASL/SCRAMotentikasi.

  • Jelaskan rahasia Secrets Manager Anda.

  • Akses AWS Key Management Service (AWS KMS) kunci terkelola pelanggan Anda.

  • Kirim catatan pemanggilan yang gagal ke tujuan.

Secrets Manager dan AWS KMS izin

Bergantung pada jenis kontrol akses yang Anda konfigurasi untuk MSK broker Amazon Anda, fungsi Lambda Anda mungkin memerlukan izin untuk mengakses rahasia Anda (jika SASL menggunakanSCRAM/otentikasi), atau rahasia Secrets Manager untuk mendekripsi AWS KMS kunci yang dikelola pelanggan SCRAM Anda. Untuk mengakses sumber daya ini, peran eksekusi fungsi Anda harus memiliki izin berikut:

Menambahkan izin ke peran eksekusi

Ikuti langkah-langkah ini untuk menambahkan kebijakan yang AWS dikelola AWSLambdaMSKExecutionRoleke peran eksekusi menggunakan IAM konsol.

Untuk menambahkan kebijakan yang AWS dikelola
  1. Buka halaman Kebijakan IAM konsol.

  2. Dalam kotak pencarian kebijakan, masukkan nama kebijakan (AWSLambdaMSKExecutionRole).

  3. Pilih kebijakan dari daftar, lalu pilih Tindakan kebijakan, Lampirkan.

  4. Di halaman Lampirkan kebijakan, pilih peran eksekusi Anda dari daftar, lalu pilih Lampirkan kebijakan.

Memberikan akses pengguna dengan kebijakan IAM

Secara default, pengguna dan peran tidak memiliki izin untuk melakukan MSK API operasi Amazon. Untuk memberikan akses ke pengguna di organisasi atau akun, Anda dapat menambahkan atau memperbarui kebijakan berbasis identitas. Untuk informasi selengkapnya, lihat Contoh Kebijakan MSK Berbasis Identitas Amazon di Panduan Developer Amazon Managed Streaming for Apache Kafka.

Kesalahan otentikasi dan otorisasi

Jika salah satu izin yang diperlukan untuk mengkonsumsi data dari MSK klaster Amazon tidak ada, Lambda menampilkan salah satu pesan galat berikut dalam pemetaan sumber peristiwa di bawah. LastProcessingResult

klaster gagal untuk otorisasi Lambda

UntukSASL/SCRAMatau mTLS, kesalahan ini menunjukkan bahwa pengguna yang disediakan tidak memiliki semua izin daftar kontrol akses (ACL) Kafka yang diperlukan berikut:

  • DescribeConfigs Cluster

  • Jelaskan Grup

  • Baca Grup

  • Jelaskan Topik

  • Baca Topik

Untuk kontrol IAM akses, peran eksekusi fungsi Anda tidak memiliki satu atau beberapa izin yang diperlukan untuk mengakses grup atau topik. Tinjau daftar izin yang diperlukan diIAMotentikasi berbasis peran.

Saat Anda membuat Kafka ACLs atau IAM kebijakan dengan izin klaster Kafka yang diperlukan, tentukan topik dan kelompokkan sebagai sumber daya. Nama topik harus cocok dengan topik dalam pemetaan sumber acara. Nama grup harus cocok dengan pemetaan sumber acara. UUID

Setelah Anda menambahkan izin yang diperlukan untuk peran eksekusi, diperlukan beberapa menit sampai perubahan diterapkan.

SASLAutentikasi gagal

UntukSASL/SCRAM, kesalahan ini menunjukkan bahwa nama pengguna dan kata sandi yang diberikan tidak valid.

Untuk kontrol IAM akses, peran eksekusi tidak memiliki kafka-cluster:Connect izin untuk MSK cluster. Tambahkan izin ini ke peran dan tentukan Amazon Resource Name (ARN) kluster sebagai sumber daya.

Anda mungkin melihat kesalahan ini terjadi sebentar-sebentar. Cluster menolak koneksi setelah jumlah TCP koneksi melebihi kuota MSK layanan Amazon. Lambda mundur dan mencoba lagi sampai koneksi berhasil. Setelah Lambda terhubung ke cluster dan polling untuk catatan, hasil pemrosesan terakhir berubah menjadi. OK

Server gagal mengautentikasi Lambda

Kesalahan ini menunjukkan bahwa broker Amazon MSK Kafka gagal mengautentikasi dengan Lambda. Hal ini dapat terjadi karena salah satu alasan berikut:

  • Anda tidak memberikan sertifikat klien untuk TLS otentikasi m.

  • Anda memberikan sertifikat klien, tetapi broker tidak dikonfigurasi untuk menggunakan mTLS.

  • Sertifikat klien tidak dipercaya oleh broker.

Sertifikat atau kunci pribadi yang diberikan tidak valid

Kesalahan ini menunjukkan bahwa MSK konsumen Amazon tidak dapat menggunakan sertifikat atau kunci pribadi yang disediakan. Pastikan bahwa sertifikat dan PEM format penggunaan kunci, dan bahwa enkripsi kunci pribadi menggunakan PBES1 algoritma.

Konfigurasikan keamanan jaringan

Untuk memberi Lambda akses penuh ke Amazon MSK melalui pemetaan sumber peristiwa, kluster Anda harus menggunakan titik akhir publik (alamat IP publik), atau Anda harus memberikan akses ke Amazon tempat VPC Anda membuat klaster.

Saat Anda menggunakan Amazon MSK dengan Lambda, buat AWS PrivateLink VPCtitik akhir yang menyediakan akses fungsi ke sumber daya di Amazon Anda. VPC

catatan

AWS PrivateLink VPCtitik akhir diperlukan untuk fungsi dengan pemetaan sumber peristiwa yang menggunakan mode default (sesuai permintaan) untuk poller acara. Jika pemetaan sumber peristiwa menggunakan mode yang disediakan, Anda tidak perlu mengonfigurasi titik akhir. AWS PrivateLink VPC

Buat titik akhir untuk menyediakan akses ke sumber daya berikut:

  • Lambda — Buat titik akhir untuk kepala layanan Lambda.

  • AWS STS — Buat titik akhir AWS STS untuk prinsipal layanan untuk mengambil peran atas nama Anda.

  • Secrets Manager - Jika klaster Anda menggunakan Secrets Manager untuk menyimpan kredensyal, buat endpoint untuk Secrets Manager.

Atau, konfigurasikan NAT gateway di setiap subnet publik di AmazonVPC. Untuk informasi selengkapnya, lihat Aktifkan akses internet untuk fungsi VPC Lambda yang terhubung.

Saat Anda membuat pemetaan sumber peristiwa untuk AmazonMSK, Lambda memeriksa apakah Elastic Network Interfaces ENIs () sudah ada untuk subnet dan grup keamanan yang dikonfigurasi untuk Amazon Anda. VPC Jika Lambda menemukan yang adaENIs, ia mencoba untuk menggunakannya kembali. Jika tidak, Lambda membuat yang baru ENIs untuk terhubung ke sumber acara dan memanggil fungsi Anda.

catatan

Fungsi Lambda selalu berjalan di dalam yang VPCs dimiliki oleh layanan Lambda. VPCKonfigurasi fungsi Anda tidak memengaruhi pemetaan sumber peristiwa. Hanya konfigurasi jaringan sumber acara yang menentukan bagaimana Lambda terhubung ke sumber acara Anda.

Konfigurasikan grup keamanan untuk Amazon VPC yang berisi cluster Anda. Secara default, Amazon MSK menggunakan port berikut: 9092 untuk teks biasa, 9094 untuk, untuk TLSSASL, 9096 9098 untuk. IAM

  • Aturan masuk — Izinkan semua lalu lintas di port klaster default untuk grup keamanan yang terkait dengan sumber peristiwa Anda.

  • Aturan keluar — Izinkan semua lalu lintas di port 443 untuk semua tujuan. Izinkan semua lalu lintas di port klaster default untuk grup keamanan yang terkait dengan sumber peristiwa Anda.

  • Aturan masuk VPC titik akhir Amazon — Jika Anda menggunakan VPC titik akhir Amazon, grup keamanan yang terkait dengan VPC titik akhir Amazon Anda harus mengizinkan lalu lintas masuk pada port 443 dari grup keamanan klaster.

Jika klaster menggunakan autentikasi, Anda juga dapat membatasi kebijakan endpoint untuk titik akhir Secrets Manager. Untuk memanggil Secrets ManagerAPI, Lambda menggunakan peran fungsi Anda, bukan kepala layanan Lambda.

contoh VPCkebijakan endpoint — titik akhir Secrets Manager
{ "Statement": [ { "Action": "secretsmanager:GetSecretValue", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws::iam::123456789012:role/my-role" ] }, "Resource": "arn:aws::secretsmanager:us-west-2:123456789012:secret:my-secret" } ] }

Saat Anda menggunakan VPC endpoint Amazon, AWS merutekan API panggilan Anda untuk menjalankan fungsi Anda menggunakan Elastic Network Interface () titik akhir. ENI Kepala layanan Lambda perlu memanggil lambda:InvokeFunction peran dan fungsi apa pun yang menggunakannya. ENIs

Secara default, VPC titik akhir Amazon memiliki IAM kebijakan terbuka yang memungkinkan akses luas ke sumber daya. Praktik terbaik adalah membatasi kebijakan ini untuk melakukan tindakan yang diperlukan menggunakan titik akhir tersebut. Untuk memastikan bahwa pemetaan sumber peristiwa Anda dapat menjalankan fungsi Lambda Anda, kebijakan VPC titik akhir harus mengizinkan kepala layanan Lambda untuk memanggil dan. sts:AssumeRole lambda:InvokeFunction Membatasi kebijakan VPC titik akhir Anda agar hanya mengizinkan API panggilan yang berasal dari organisasi Anda mencegah pemetaan sumber peristiwa berfungsi dengan baik, sehingga diperlukan dalam kebijakan "Resource": "*" ini.

Contoh kebijakan VPC endpoint berikut menunjukkan cara memberikan akses yang diperlukan ke prinsipal layanan Lambda untuk titik akhir AWS STS dan Lambda.

contoh VPCKebijakan titik akhir - AWS STS titik akhir
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
contoh VPCKebijakan titik akhir — Titik akhir Lambda
{ "Statement": [ { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }