Kontrol akses untuk Managed Service for Apache Kafka

Dokumen ini menjelaskan cara kerja kontrol akses di Managed Service untuk Apache Kafka.

Agen Layanan Kafka Terkelola

Managed Service untuk Apache Kafka menggunakan agen layanan untuk mengakses Google Cloud resource. Setelah Anda mengaktifkan Managed Kafka API, Managed Kafka Service Agent akan dibuat.

Agen Layanan Kafka Terkelola adalah pokok dengan ID service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com, dengan PROJECT_NUMBER adalah nomor project Google Cloud Anda.

Agen layanan ini memerlukan peran IAM Managed Kafka Service Agent (roles/managedkafka.serviceAgent) di project. Peran ini diberikan secara otomatis saat Anda mengaktifkan API. Jika Anda mencabut peran ini, Managed Service untuk Apache Kafka tidak dapat membuat, memperbarui, atau menghapus cluster.

Untuk beberapa tugas, Agen Layanan Kafka Terkelola memerlukan peran tambahan. Misalnya, jika Anda menggunakan Kafka Connect, Anda mungkin perlu memberikan izin kepada agen layanan untuk mengakses sumber dan tujuan, seperti Pub/Sub atau BigQuery.

Kontrol akses untuk klien

Secara umum, ada dua cara untuk melakukan operasi pada resource Managed Service untuk Apache Kafka:

  • Managed Kafka API. Opsi ini mencakup pemanggilan REST API secara langsung, serta penggunaan Google Cloud CLI, konsol Google Cloud , atau library klien.

  • API Apache Kafka open source. Banyak klien Kafka open source yang menggunakan API ini.

Kontrol akses menggunakan Managed Kafka API

Saat menggunakan Managed Kafka API, otorisasi dilakukan oleh Identity and Access Management (IAM). Untuk melakukan operasi pada resource, prinsipal harus memiliki izin Managed Kafka API yang diperlukan untuk operasi tersebut. Dokumentasi untuk setiap tugas mencantumkan peran IAM yang diperlukan untuk tugas tersebut. Misalnya, untuk mengizinkan akun utama membuat topik Kafka, berikan peran Managed Kafka Topic Editor kepada akun utama.

Kontrol akses menggunakan Apache Kafka API

Klien yang menggunakan Apache Kafka API melakukan autentikasi dengan menggunakan autentikasi SASL atau mutual TLS (mTLS).

  • Jika klien terhubung dengan SASL, akun utama yang melakukan autentikasi memerlukan izin IAM managedkafka.clusters.connect. Untuk memberikan izin ini, Anda dapat memberikan peran Managed Kafka Client (roles/managedkafka.client) pada akun utama.

  • Jika klien terhubung dengan mTLS, izin managedkafka.clusters.connect tidak diperlukan. Sebagai gantinya, klien menggunakan sertifikat klien untuk melakukan autentikasi.

Setelah klien terhubung, layanan akan menggunakan ACL Kafka untuk mengizinkan operasi klien, seperti membaca atau mengubah resource.

Kontrol akses gabungan

Untuk keamanan yang komprehensif, Anda harus mengonfigurasi hal berikut:

  • Izin IAM untuk akses pengelolaan.

  • Izin IAM untuk terhubung ke cluster, jika klien menggunakan SASL.

  • ACL Kafka untuk akses dan operasi data dalam cluster dari klien Apache Kafka open source, terlepas dari metode autentikasinya.

Misalnya, anggap Anda ingin mencegah principal mengedit topik. Untuk melakukannya, Anda harus menyiapkan kontrol akses berikut:

  • Tolak izin managedkafka.topics.update untuk prinsipal, guna mencegah prinsipal menggunakan Managed Kafka API untuk memperbarui topik (misalnya, dengan menggunakan konsol Google Cloud ).

  • Secara opsional, tolak izin managedkafka.clusters.connect untuk akun utama, guna mencegah akun utama terhubung ke cluster dengan autentikasi SASL.

  • Jika akun utama memerlukan akses SASL karena alasan lain, atau jika akun utama terhubung menggunakan mTLS, buat ACL Kafka yang menolak operasi ALTER, ALTER_CONFIGS, dan DELETE pada topik. Untuk contoh spesifik, lihat Menolak modifikasi semua topik.

Kontrol akses tingkat resource

Untuk membatasi izin IAM entitas ke resource Managed Service untuk Apache Kafka tertentu dalam project, seperti cluster atau topik individual, gunakan IAM Condition.

Contoh berikut menunjukkan kondisi IAM yang mengizinkan akses hanya jika jenis resource adalah managedkafka.googleapis.com/Topic dan nama resource diakhiri dengan "test-topic":

{
    "expression": "resource.name.endsWith(\"topic-1\") &&\nresource.type == \"managedkafka.googleapis.com/Topic\"",
    "title": "topic-1",
    "description": "Grant access only to topic-1"
}

Beberapa permintaan Managed Service untuk Apache Kafka, seperti pembuatan atau pembaruan cluster, menampilkan operasi yang berjalan lama. Jika Anda memberikan akses di tingkat cluster, sertakan akses untuk semua resource jenis managedkafka.googleapis.com/Operation, selain kondisi resource per cluster. Izin ini memastikan bahwa prinsipal dapat memulai operasi dan memantau progresnya.

Langkah berikutnya

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