Mengonfigurasi autentikasi SASL

Klien dapat terhubung ke cluster Managed Service for Apache Kafka menggunakan API Apache Kafka open source. Semua koneksi harus dienkripsi menggunakan TLS; komunikasi plaintext tidak didukung. Autentikasi ditangani melalui salah satu dari dua mekanisme yang didukung, masing-masing dengan jenis kredensial yang berbeda: SASL atau mTLS.

Dokumen ini menjelaskan cara melakukan autentikasi menggunakan metode SASL. Klien melakukan autentikasi menggunakan kredensial akun utama Identity and Access Management yang diotorisasi, seperti akun layanan. Managed Service for Apache Kafka mengelola sertifikat broker sisi server untuk semua koneksi.

Sebelum memulai

Pelajari lebih lanjut hal-hal berikut:

Memberikan peran klien Managed Kafka ke akun layanan

Anda harus memberikan peran IAM roles/managedkafka.client pada project yang berisi cluster ke akun layanan yang akan Anda gunakan untuk terhubung ke cluster.

Peran klien Managed Kafka mencakup izin managedkafka.clusters.connect yang diperlukan untuk semua koneksi. Untuk memberikan peran klien Managed Kafka ke akun layanan, ikuti langkah-langkah berikut:

Konsol

  1. Di konsol Google Cloud , buka halaman IAM.
    Buka IAM
  2. Pastikan project ditetapkan ke project konsumen yang akan diakses oleh klien Managed Service for Apache Kafka.
  3. Klik Grant access.
  4. Di halaman baru, untuk Add Principals, masukkan alamat email akun layanan yang Anda gunakan.
  5. Untuk Assign roles, pilih peran Managed Kafka client.
  6. Klik Simpan.

gcloud CLI

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Jalankan perintah gcloud projects add-iam-policy-binding:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
      --role roles/managedkafka.client

    Ganti kode berikut:

    • PROJECT_ID adalah project ID.

    • SERVICE_ACCOUNT_EMAIL adalah alamat email akun layanan.

Konfigurasi klien Kafka untuk melakukan autentikasi ke Google Cloud

Anda dapat mengautentikasi klien Kafka ke Google Cloud dengan menggunakan salah satu mekanisme berikut:

OAUTHBEARER (Direkomendasikan): Mekanisme ini mengharuskan penggunaan Kredensial Default Aplikasi (ADC). ADC adalah strategi yang digunakan oleh library autentikasi untuk menemukan kredensial secara otomatis berdasarkan lingkungan aplikasi. Untuk mengetahui informasi selengkapnya tentang tempat ADC mencari kredensial dan urutannya, lihat Cara kerja Kredensial Default Aplikasi.

SASL/PLAIN: Mekanisme ini mengharuskan penggunaan nama pengguna dan sandi yang dapat diperoleh dari file JSON kunci akun layanan, atau token akses.

Secara umum, OAUTHBEARER adalah opsi yang direkomendasikan. Namun, SASL/PLAIN mungkin merupakan mekanisme yang lebih mudah untuk pengujian.

Autentikasi OAuthBearer

Untuk mengetahui informasi tentang cara mengautentikasi ke Kafka API open source, lihat dokumentasi di GitHub.

Autentikasi SASL/PLAIN

Managed Service for Apache Kafka mendukung autentikasi SASL/PLAIN dengan file JSON kunci akun layanan, atau token akses.

File JSON kunci akun layanan

Metode ini berlaku untuk semua klien Kafka.

  1. Download file JSON kunci akun layanan untuk akun layanan yang ingin Anda gunakan untuk klien Anda.

  2. Enkode file akun layanan menggunakan base64-encode untuk digunakan sebagai string autentikasi Anda. Asumsikan nama file sebagai my_service_account_key.json.

    Pada sistem Linux atau macOS, gunakan perintah base64 (sering diinstal secara default) sebagai berikut:

    base64 -w 0 < my_service_account_key.json > password.txt
    

    Perintah ini melakukan tindakan berikut:

    • base64 < my_service_account_key.json: Membaca konten file bernama my_service_account_key.json.

    • Mengenkode konten file menggunakan encoding base64. Encoding Base64 adalah cara untuk merepresentasikan data biner (seperti data JSON dalam file akun layanan Anda) sebagai teks ASCII. Hal ini sering digunakan untuk mengirimkan data melalui saluran yang dirancang untuk teks.

    • > password.txt: Mengalihkan output perintah base64 (versi file akun layanan Anda yang dienkode base64) ke file baru bernama password.txt.

  3. Anda dapat menggunakan konten file sandi untuk autentikasi dengan parameter berikut.

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="SERVICE_ACCOUNT_EMAIL_ADDRESS" \
    password="CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE";
    

    Ganti kode berikut:

    • SERVICE_ACCOUNT_EMAIL_ADDRESS: Alamat email akun layanan yang ingin Anda gunakan untuk autentikasi.
    • CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE: Isi file sandi berenkode base64 yang Anda peroleh pada langkah sebelumnya. Ini harus berupa satu baris.

Saat mengautentikasi koneksi masuk ke cluster, Managed Service for Apache Kafka akan memeriksa hal berikut:

  1. Nama pengguna yang diberikan cocok dengan akun layanan yang kuncinya digunakan dalam sandi.

  2. Principal akun layanan yang diberikan memiliki izin managedkafka.clusters.connect (termasuk dalam peran IAM roles/managedkafka.client) di cluster.

Token akses

  1. Dapatkan token akses untuk akun utama yang ingin Anda gunakan untuk autentikasi. Misalnya, dapatkan token akses untuk prinsipal gcloud CLI saat ini:

    gcloud auth print-access-token
    
  2. Anda dapat menggunakan token akses untuk autentikasi dengan parameter berikut.

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="PRINCIPAL_EMAIL_ADDRESS" \
    password="ACCESS_TOKEN_VALUE";
    
    

    Ganti kode berikut:

    • PRINCIPAL_EMAIL_ADDRESS: Alamat email principal yang Anda gunakan untuk mendapatkan token akses.
    • ACCESS_TOKEN_VALUE: Nilai token akses yang Anda peroleh pada langkah sebelumnya.

Saat mengautentikasi koneksi masuk ke cluster, Managed Service for Apache Kafka akan memeriksa hal berikut:

  1. Token akses valid dan belum habis masa berlakunya.

  2. Nama pengguna yang diberikan cocok dengan email utama yang terkait dengan token akses.

  3. Akun utama token akses memiliki izin managedkafka.clusters.connect (termasuk dalam peran IAM roles/managedkafka.client) di cluster.

Workload Identity Federation untuk GKE

Managed Service untuk Apache Kafka mendukung autentikasi ke Apache Kafka API open source menggunakan Workload Identity Federation for GKE. Autentikasi didukung untuk SASL/PLAIN dan SASL/OAUTHBEARER.

Untuk menggunakan Workload Identity Federation untuk GKE dengan Managed Service for Apache Kafka, Anda harus mematuhi persyaratan berikut:

  1. Gunakan GKE versi 1.31.1-gke.1241000 atau yang lebih tinggi.
  2. Anotasikan akun layanan Kubernetes Anda dengan iam.gke.io/return-principal-id-as-email: "true". Contoh:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: kafka-service-account
      annotations:
        iam.gke.io/return-principal-id-as-email: "true"
    
  3. Jika Anda menggunakan server autentikasi lokal, pastikan Anda juga menggunakan paket google-auth versi 2.40.3 atau yang lebih tinggi.

Pastikan akun utama GKE memiliki izin managedkafka.clusters.connect (termasuk dalam peran IAM roles/managedkafka.client).

Managed Service for Apache Kafka tidak mendukung autentikasi ke Apache Kafka API open source menggunakan Fleet workload identity. Sebagai alternatif, Anda dapat menautkan akun layanan Kubernetes ke akun layanan IAM.

Memecahkan masalah error autentikasi

Jika klien Managed Service for Apache Kafka tidak dapat melakukan autentikasi ke Managed Service for Apache Kafka, Anda akan melihat pesan error yang mirip dengan berikut ini:

Exception in thread "main" java.util.concurrent.ExecutionException:
org.apache.kafka.common.errors.SaslAuthenticationException:
Authentication failed: Invalid username or password

Untuk mengatasi masalah ini, periksa penyebab berikut:

  • Sandi salah bentuk, dan tidak merepresentasikan blob JSON kunci akun layanan yang valid saat didekodekan base64, atau token akses yang valid.

  • Akun utama yang mengautentikasi tidak memiliki izin managedkafka.clusters.connect di cluster.

  • Nama pengguna yang diberikan tidak cocok dengan akun utama kredensial.

Jika klien sering mengalami pemutusan koneksi setiap 30 menit, hal ini dapat disebabkan oleh klien yang tidak mendukung autentikasi ulang berkala. Broker Managed Service untuk Apache Kafka mewajibkan klien melakukan autentikasi ulang setiap 30 menit, yang diterapkan oleh properti broker connections.max.reauth.ms. Verifikasi bahwa versi library klien Kafka Anda adalah 2.2.0 atau yang lebih baru, dan mendukung autentikasi ulang.

Langkah berikutnya

Apache Kafka® adalah merek dagang terdaftar milik The Apache Software Foundation atau afiliasinya di Amerika Serikat dan/atau negara lain.