IAMkontrol akses - Amazon Managed Streaming untuk Apache Kafka

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

IAMkontrol akses

IAMkontrol akses untuk Amazon MSK memungkinkan Anda menangani otentikasi dan otorisasi untuk klaster AndaMSK. Ini menghilangkan kebutuhan untuk menggunakan satu mekanisme untuk otentikasi dan satu lagi untuk otorisasi. Misalnya, ketika klien mencoba menulis ke klaster Anda, Amazon MSK menggunakan IAM untuk memeriksa apakah klien tersebut adalah identitas yang diautentikasi dan juga apakah itu diizinkan untuk diproduksi ke cluster Anda. IAMkontrol akses berfungsi untuk klien Java dan non-Java, termasuk klien Kafka yang ditulis dengan Python, Go, dan. JavaScript NET.

Amazon MSK mencatat peristiwa akses sehingga Anda dapat mengaudit mereka. Untuk informasi selengkapnya, lihat Pencatatan API panggilan dengan AWS CloudTrail.

Untuk memungkinkan kontrol IAM akses, Amazon MSK membuat modifikasi kecil pada kode sumber Apache Kafka. Modifikasi ini tidak akan menyebabkan perbedaan nyata dalam pengalaman Apache Kafka Anda.

penting

IAMkontrol akses tidak berlaku untuk ZooKeeper node Apache. Untuk informasi tentang bagaimana Anda dapat mengontrol akses ke node tersebut, lihatMengontrol akses ke Apache ZooKeeper.

penting

Pengaturan allow.everyone.if.no.acl.found Apache Kafka tidak berpengaruh jika cluster Anda menggunakan kontrol IAM akses.

penting

Anda dapat memanggil Apache Kafka ACL APIs untuk MSK cluster yang menggunakan IAM kontrol akses. Namun, Apache Kafka tidak ACLs berpengaruh pada otorisasi untuk peran. IAM Anda harus menggunakan IAM kebijakan untuk mengontrol akses IAM peran.

Cara MSK kerja kontrol IAM akses untuk Amazon

Untuk menggunakan kontrol IAM akses untuk AmazonMSK, lakukan langkah-langkah berikut, yang dijelaskan secara rinci di bagian ini.

Buat cluster yang menggunakan kontrol IAM akses

Bagian ini menjelaskan bagaimana Anda dapat menggunakan AWS Management Console, theAPI, atau AWS CLI untuk membuat klaster yang menggunakan kontrol IAM akses. Untuk informasi tentang cara mengaktifkan kontrol IAM akses untuk klaster yang ada, lihatMemperbarui pengaturan keamanan klaster.

Gunakan AWS Management Console untuk membuat klaster yang menggunakan kontrol IAM akses
  1. Buka MSK konsol Amazon dihttps://console.aws.amazon.com/msk/.

  2. Pilih Buat klaster.

  3. Pilih Buat cluster dengan pengaturan khusus.

  4. Di bagian Otentikasi, pilih kontrol IAM akses.

  5. Selesaikan sisa alur kerja untuk membuat cluster.

Gunakan API atau AWS CLI untuk membuat cluster yang menggunakan kontrol IAM akses
  • Untuk membuat klaster dengan kontrol IAM akses diaktifkan, gunakan CLI perintah CreateClusterAPIatau create-cluster, dan teruskan yang berikut ini JSON untuk parameter:. ClientAuthentication "ClientAuthentication": { "Sasl": { "Iam": { "Enabled": true } }

Konfigurasikan klien untuk kontrol IAM akses

Untuk memungkinkan klien berkomunikasi dengan MSK klaster yang menggunakan kontrol IAM akses, Anda dapat menggunakan salah satu dari mekanisme ini:

  • Konfigurasi klien non-Java menggunakan mekanisme SASL _ OAUTHBEARER

  • Konfigurasi klien Java menggunakan SASL _ OAUTHBEARER mekanisme atau AWS _ MSK _ IAM mekanisme

Menggunakan OAUTHBEARER mekanisme SASL _ untuk mengkonfigurasi IAM

  1. Edit file konfigurasi client.properties Anda menggunakan sintaks yang disorot dalam contoh klien Python Kafka di bawah ini sebagai panduan. Perubahan konfigurasi serupa dalam bahasa lain.

    #!/usr/bin/python3from kafka import KafkaProducer from kafka.errors import KafkaError import socket import time from aws_msk_iam_sasl_signer import MSKAuthTokenProvider class MSKTokenProvider(): def token(self): token, _ = MSKAuthTokenProvider.generate_auth_token('<my aws region>') return token tp = MSKTokenProvider() producer = KafkaProducer( bootstrap_servers='<my bootstrap string>', security_protocol='SASL_SSL', sasl_mechanism='OAUTHBEARER', sasl_oauth_token_provider=tp, client_id=socket.gethostname(), ) topic = "<my-topic>" while True: try: inp=input(">") producer.send(topic, inp.encode()) producer.flush() print("Produced!") except Exception: print("Failed to send message:", e) producer.close()
  2. Unduh pustaka pembantu untuk bahasa konfigurasi yang Anda pilih dan ikuti petunjuk di bagian Memulai di beranda perpustakaan bahasa tersebut.

Menggunakan IAM mekanisme AWS _ MSK _ MSK khusus untuk mengonfigurasi IAM

  1. Tambahkan yang berikut ini ke client.properties file. Ganti <PATH_TO_TRUST_STORE_FILE> dengan jalur yang sepenuhnya memenuhi syarat ke file toko kepercayaan pada klien.

    catatan

    Jika Anda tidak ingin menggunakan sertifikat tertentu, Anda dapat menghapus ssl.truststore.location=<PATH_TO_TRUST_STORE_FILE> dari client.properties file Anda. Bila Anda tidak menentukan nilai untukssl.truststore.location, proses Java menggunakan sertifikat default.

    ssl.truststore.location=<PATH_TO_TRUST_STORE_FILE> security.protocol=SASL_SSL sasl.mechanism=AWS_MSK_IAM sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required; sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler

    Untuk menggunakan profil bernama yang Anda buat untuk AWS kredensi, sertakan awsProfileName="your profile name"; dalam file konfigurasi klien Anda. Untuk informasi tentang profil bernama, lihat Profil bernama dalam AWS CLI dokumentasi.

  2. Unduh aws-msk-iam-authJARfile stabil terbaru, dan letakkan di jalur kelas. Jika Anda menggunakan Maven, tambahkan dependensi berikut, sesuaikan nomor versi sesuai kebutuhan:

    <dependency> <groupId>software.amazon.msk</groupId> <artifactId>aws-msk-iam-auth</artifactId> <version>1.0.0</version> </dependency>

Plugin MSK klien Amazon bersumber terbuka di bawah lisensi Apache 2.0.

Buat kebijakan otorisasi

Lampirkan kebijakan otorisasi ke IAM peran yang sesuai dengan klien. Dalam kebijakan otorisasi, Anda menentukan tindakan mana yang akan diizinkan atau ditolak untuk peran tersebut. Jika klien Anda menggunakan EC2 instans Amazon, kaitkan kebijakan otorisasi dengan IAM peran untuk EC2 instans Amazon tersebut. Atau, Anda dapat mengonfigurasi klien Anda untuk menggunakan profil bernama, dan kemudian Anda mengaitkan kebijakan otorisasi dengan peran untuk profil bernama tersebut. Konfigurasikan klien untuk kontrol IAM aksesmenjelaskan cara mengkonfigurasi klien untuk menggunakan profil bernama.

Untuk informasi tentang cara membuat IAM kebijakan, lihat Membuat IAM kebijakan.

Berikut ini adalah contoh kebijakan otorisasi untuk klaster bernama MyTestCluster. Untuk memahami semantik Action dan Resource elemen, lihat. Semantik tindakan dan sumber daya

penting

Perubahan yang Anda buat pada suatu IAM kebijakan tercermin dalam IAM APIs dan AWS CLI segera. Namun, perlu waktu yang nyata agar perubahan kebijakan berlaku. Dalam kebanyakan kasus, perubahan kebijakan berlaku dalam waktu kurang dari satu menit. Kondisi jaringan terkadang dapat meningkatkan penundaan.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kafka-cluster:Connect", "kafka-cluster:AlterCluster", "kafka-cluster:DescribeCluster" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:cluster/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1" ] }, { "Effect": "Allow", "Action": [ "kafka-cluster:*Topic*", "kafka-cluster:WriteData", "kafka-cluster:ReadData" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/*" ] }, { "Effect": "Allow", "Action": [ "kafka-cluster:AlterGroup", "kafka-cluster:DescribeGroup" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:group/MyTestCluster/*" ] } ] }

Untuk mempelajari cara membuat kebijakan dengan elemen tindakan yang sesuai dengan kasus penggunaan Apache Kafka yang umum, seperti memproduksi dan mengkonsumsi data, lihat. Kasus penggunaan umum

Untuk Kafka versi 2.8.0 dan di atasnya, WriteDataIdempotentlyizin tidak digunakan lagi (-679). KIP Secara default, enable.idempotence = true diatur. Oleh karena itu, untuk Kafka versi 2.8.0 ke atas, IAM tidak menawarkan fungsi yang sama dengan Kafka. ACLs Tidak mungkin WriteDataIdempotently untuk topik dengan hanya menyediakan WriteData akses ke topik itu. Ini tidak mempengaruhi kasus ketika WriteData disediakan untuk ALLtopik. Dalam hal ini, WriteDataIdempotently diperbolehkan. Hal ini disebabkan perbedaan dalam implementasi IAM logika versus bagaimana Kafka ACLs diimplementasikan.

Untuk mengatasi hal ini, sebaiknya gunakan kebijakan yang mirip dengan contoh di bawah ini:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kafka-cluster:Connect", "kafka-cluster:AlterCluster", "kafka-cluster:DescribeCluster", "kafka-cluster:WriteDataIdempotently" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:cluster/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1" ] }, { "Effect": "Allow", "Action": [ "kafka-cluster:*Topic*", "kafka-cluster:WriteData", "kafka-cluster:ReadData" ], "Resource": [ "arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/TestTopic" ] } ] }

Dalam hal ini, WriteData memungkinkan menulis keTestTopic, sementara WriteDataIdempotently memungkinkan penulisan idempoten ke cluster. Penting untuk dicatat bahwa itu WriteDataIdempotently adalah izin tingkat cluster. Itu tidak dapat digunakan di tingkat topik. Jika WriteDataIdempotently dibatasi pada tingkat topik, kebijakan ini tidak akan berfungsi.

Dapatkan broker bootstrap untuk kontrol IAM akses

Lihat Mendapatkan broker bootstrap untuk MSK cluster Amazon.

Semantik tindakan dan sumber daya

Bagian ini menjelaskan semantik elemen tindakan dan sumber daya yang dapat Anda gunakan dalam kebijakan IAM otorisasi. Untuk contoh kebijakan, lihat Buat kebijakan otorisasi.

Tindakan

Tabel berikut mencantumkan tindakan yang dapat Anda sertakan dalam kebijakan otorisasi saat Anda menggunakan kontrol IAM akses untuk AmazonMSK. Bila Anda menyertakan dalam kebijakan otorisasi tindakan dari kolom Tindakan tabel, Anda juga harus menyertakan tindakan terkait dari kolom Tindakan yang diperlukan.

Tindakan Deskripsi Tindakan yang diperlukan Sumber daya yang dibutuhkan Berlaku untuk cluster tanpa server
kafka-cluster:Connect Memberikan izin untuk menghubungkan dan mengautentikasi ke cluster. Tidak ada cluster Ya
kafka-cluster:DescribeCluster Memberikan izin untuk mendeskripsikan berbagai aspek cluster, setara dengan Apache Kafka. DESCRIBE CLUSTER ACL

kafka-cluster:Connect

cluster Ya
kafka-cluster:AlterCluster Memberikan izin untuk mengubah berbagai aspek cluster, setara dengan Apache Kafka. ALTER CLUSTER ACL

kafka-cluster:Connect

kafka-cluster:DescribeCluster

cluster Tidak
kafka-cluster:DescribeClusterDynamicConfiguration Memberikan izin untuk mendeskripsikan konfigurasi dinamis sebuah cluster, setara dengan Apache Kafka's _. DESCRIBE CONFIGS CLUSTER ACL

kafka-cluster:Connect

cluster Tidak
kafka-cluster:AlterClusterDynamicConfiguration Memberikan izin untuk mengubah konfigurasi dinamis cluster, setara dengan _ Apache Kafka. ALTER CONFIGS CLUSTER ACL

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

cluster Tidak
kafka-cluster:WriteDataIdempotently Memberikan izin untuk menulis data idempotently pada sebuah cluster, setara dengan Apache Kafka _. IDEMPOTENT WRITE CLUSTER ACL

kafka-cluster:Connect

kafka-cluster:WriteData

cluster Ya
kafka-cluster:CreateTopic Memberikan izin untuk membuat topik di cluster, setara dengan Apache Kafka/. CREATE CLUSTER TOPIC ACL

kafka-cluster:Connect

topik Ya
kafka-cluster:DescribeTopic Memberikan izin untuk mendeskripsikan topik di cluster, setara dengan Apache Kafka. DESCRIBE TOPIC ACL

kafka-cluster:Connect

topik Ya
kafka-cluster:AlterTopic Memberikan izin untuk mengubah topik di cluster, setara dengan Apache Kafka. ALTER TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

topik Ya
kafka-cluster:DeleteTopic Memberikan izin untuk menghapus topik di cluster, setara dengan Apache Kafka. DELETE TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

topik Ya
kafka-cluster:DescribeTopicDynamicConfiguration Memberikan izin untuk mendeskripsikan konfigurasi dinamis topik pada sebuah cluster, setara dengan Apache Kafka _. DESCRIBE CONFIGS TOPIC ACL

kafka-cluster:Connect

topik Ya
kafka-cluster:AlterTopicDynamicConfiguration Memberikan izin untuk mengubah konfigurasi dinamis topik pada sebuah cluster, setara dengan Apache Kafka _. ALTER CONFIGS TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

topik Ya
kafka-cluster:ReadData Memberikan izin untuk membaca data dari topik di cluster, setara dengan Apache Kafka. READ TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:AlterGroup

topik Ya
kafka-cluster:WriteData Memberikan izin untuk menulis data ke topik di cluster, setara dengan Apache Kafka WRITE TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

topik Ya
kafka-cluster:DescribeGroup Memberikan izin untuk mendeskripsikan grup di cluster, setara dengan Apache Kafka. DESCRIBE GROUP ACL

kafka-cluster:Connect

grup Ya
kafka-cluster:AlterGroup Memberikan izin untuk bergabung dengan grup di cluster, setara dengan Apache Kafka. READ GROUP ACL

kafka-cluster:Connect

kafka-cluster:DescribeGroup

grup Ya
kafka-cluster:DeleteGroup Memberikan izin untuk menghapus grup di cluster, setara dengan Apache Kafka. DELETE GROUP ACL

kafka-cluster:Connect

kafka-cluster:DescribeGroup

grup Ya
kafka-cluster:DescribeTransactionalId Memberikan izin untuk mendeskripsikan transaksional IDs pada cluster, setara dengan _ID Apache Kafka. DESCRIBE TRANSACTIONAL ACL

kafka-cluster:Connect

transaksional-id Ya
kafka-cluster:AlterTransactionalId Memberikan izin untuk mengubah transaksional IDs pada cluster, setara dengan _ID Apache Kafka. WRITE TRANSACTIONAL ACL

kafka-cluster:Connect

kafka-cluster:DescribeTransactionalId

kafka-cluster:WriteData

transaksional-id Ya

Anda dapat menggunakan wildcard asterisk (*) beberapa kali dalam tindakan setelah titik dua. Berikut ini adalah beberapa contohnya.

  • kafka-cluster:*Topicsingkatan darikafka-cluster:CreateTopic,kafka-cluster:DescribeTopic,kafka-cluster:AlterTopic, dankafka-cluster:DeleteTopic. Itu tidak termasuk kafka-cluster:DescribeTopicDynamicConfiguration ataukafka-cluster:AlterTopicDynamicConfiguration.

  • kafka-cluster:*singkatan dari semua izin.

Sumber daya

Tabel berikut menunjukkan empat jenis sumber daya yang dapat Anda gunakan dalam kebijakan otorisasi saat Anda menggunakan kontrol IAM akses untuk AmazonMSK. Anda bisa mendapatkan klaster Amazon Resource Name (ARN) dari AWS Management Console atau dengan menggunakan DescribeClusterAPIatau perintah AWS CLI describe-cluster. Anda kemudian dapat menggunakan cluster ARN untuk membangun topik, grup, dan ID transaksional. ARNs Untuk menentukan sumber daya dalam kebijakan otorisasi, gunakan sumber daya tersebut. ARN

Sumber Daya ARNformat
Klaster arn:aws:kafka:region:account-id:kluster/cluster-name/cluster-uuid
Topik arn:aws:kafka:region:account-id:topik/cluster-name/cluster-uuid/topic-name
Grup arn:aws:kafka:region:account-id:kelompok/cluster-name/cluster-uuid/group-name
ID Transaksional arn:aws:kafka:region:account-id:transaksional-id/cluster-name/cluster-uuid/transactional-id

Anda dapat menggunakan wildcard asterisk (*) beberapa kali di mana saja di bagian ARN yang muncul setelah:cluster/,, :topic/:group/, dan. :transactional-id/ Berikut ini adalah beberapa contoh bagaimana Anda dapat menggunakan wildcard asterisk (*) untuk merujuk ke beberapa sumber daya:

  • arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/*: semua topik di cluster mana pun bernama MyTestCluster, terlepas dari klasterUUID.

  • arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/*_test: semua topik yang namanya diakhiri dengan “_test” di cluster yang namanya MyTestCluster dan yang UUID abcd1234-0123-abcd-5678-1234abcd-1.

  • arn:aws:kafka:us-east-1:0123456789012:transactional-id/MyTestCluster/*/5555abcd-1111-abcd-1234-abcd1234-1: semua transaksi yang ID transaksionalnya adalah 5555abcd-1111-abcd-1234-abcd1234-1, di semua inkarnasi klaster yang disebutkan di akun Anda. MyTestCluster Ini berarti bahwa jika Anda membuat klaster bernama MyTestCluster, lalu menghapusnya, dan kemudian membuat cluster lain dengan nama yang sama, Anda dapat menggunakan sumber daya ini ARN untuk mewakili ID transaksi yang sama pada kedua cluster. Namun, cluster yang dihapus tidak dapat diakses.

Kasus penggunaan umum

Kolom pertama dalam tabel berikut menunjukkan beberapa kasus penggunaan umum. Untuk mengotorisasi klien untuk melaksanakan kasus penggunaan tertentu, sertakan tindakan yang diperlukan untuk kasus penggunaan tersebut dalam kebijakan otorisasi klien, dan atur Effect ke. Allow

Untuk informasi tentang semua tindakan yang merupakan bagian dari kontrol IAM akses untuk AmazonMSK, lihatSemantik tindakan dan sumber daya.

catatan

Tindakan ditolak secara default. Anda harus secara eksplisit mengizinkan setiap tindakan yang ingin Anda berikan otorisasi kepada klien untuk dilakukan.

Kasus penggunaan Tindakan yang diperlukan
Admin

kafka-cluster:*

Buat topik

kafka-cluster:Connect

kafka-cluster:CreateTopic

Menghasilkan data

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

Konsumsi data

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:DescribeGroup

kafka-cluster:AlterGroup

kafka-cluster:ReadData

Menghasilkan data secara idempotently

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

kafka-cluster:WriteDataIdempotently

Menghasilkan data secara transaksional

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

kafka-cluster:DescribeTransactionalId

kafka-cluster:AlterTransactionalId

Jelaskan konfigurasi cluster

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

Perbarui konfigurasi cluster

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

kafka-cluster:AlterClusterDynamicConfiguration

Jelaskan konfigurasi suatu topik

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

Perbarui konfigurasi topik

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

kafka-cluster:AlterTopicDynamicConfiguration

Mengubah topik

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:AlterTopic