Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
IAMZugriffskontrolle
IAMMSKMit der Zugriffskontrolle für Amazon können Sie sowohl die Authentifizierung als auch die Autorisierung für Ihren MSK Cluster durchführen. Dies macht die Verwendung eines Mechanismus für die Authentifizierung und einen anderen für die Autorisierung überflüssig. Wenn ein Client beispielsweise versucht, in Ihren Cluster zu schreiben, prüft Amazon MSK anhand dieser Methode, ob es sich bei diesem Client IAM um eine authentifizierte Identität handelt und ob er berechtigt ist, für Ihren Cluster zu produzieren. IAMDie Zugriffskontrolle funktioniert für Java- und Nicht-Java-Clients, einschließlich Kafka-Clients, die in Python JavaScript, Go und geschrieben sind. NET.
Amazon MSK protokolliert Zugriffsereignisse, sodass Sie sie überprüfen können. Weitere Informationen finden Sie unter APIAnrufe protokollieren mit AWS CloudTrail.
Um die IAM Zugriffskontrolle zu ermöglichen, MSK nimmt Amazon geringfügige Änderungen am Apache Kafka-Quellcode vor. Diese Änderungen werden keinen spürbaren Unterschied in Ihrem Apache-Kafka-Erlebnis bewirken.
Wichtig
IAMDie Zugriffskontrolle gilt nicht für ZooKeeper Apache-Knoten. Weitere Informationen zum Steuern des Zugriffs auf diese Knoten finden Sie unter Steuern des Zugriffs auf Apache ZooKeeper.
Wichtig
Die allow.everyone.if.no.acl.found
Apache Kafka-Einstellung hat keine Auswirkung, wenn Ihr Cluster die IAM Zugriffskontrolle verwendet.
Wichtig
Sie können Apache Kafka ACL APIs für einen MSK Cluster aufrufen, der Zugriffskontrolle verwendetIAM. Apache Kafka ACLs hat jedoch keine Auswirkung auf die Autorisierung von Rollen. IAM Sie müssen IAM Richtlinien verwenden, um den Zugriff auf IAM Rollen zu kontrollieren.
So MSK funktioniert die IAM Zugriffskontrolle für Amazon
Um die IAM Zugriffskontrolle für Amazon zu verwendenMSK, führen Sie die folgenden Schritte aus, die im Rest dieses Abschnitts ausführlich beschrieben werden.
Erstellen Sie einen Cluster, der die IAM Zugriffskontrolle verwendet
In diesem Abschnitt wird erklärt, wie Sie das verwenden können AWS Management Console, derAPI, oder der AWS CLI um einen Cluster zu erstellen, der die IAM Zugriffskontrolle verwendet. Informationen zum Aktivieren der IAM Zugriffskontrolle für einen vorhandenen Cluster finden Sie unterAktualisieren der Sicherheitseinstellungen eines Clusters.
Verwenden Sie den AWS Management Console um einen Cluster zu erstellen, der die IAM Zugriffskontrolle verwendet
Öffnen Sie die MSK Amazon-Konsole unterhttps://console.aws.amazon.com/msk/
. -
Wählen Sie Cluster erstellen.
-
Wählen Sie Cluster mit benutzerdefinierten Einstellungen erstellen.
-
Wählen Sie im Abschnitt Authentifizierung die Option IAMZugriffskontrolle aus.
-
Führen Sie den Rest des Workflows zum Erstellen eines Clusters aus.
Verwenden Sie das API oder das AWS CLI um einen Cluster zu erstellen, der die IAM Zugriffskontrolle verwendet
Um einen Cluster mit aktivierter IAM Zugriffskontrolle zu erstellen, verwenden Sie den Befehl CreateClusterAPIoder den CLI Befehl create-cluster
und übergeben Sie Folgendes JSON für den ClientAuthentication
Parameter:."ClientAuthentication": { "Sasl": { "Iam": { "Enabled": true } }
Konfigurieren Sie Clients für IAM die Zugriffskontrolle
Um Clients die Kommunikation mit einem MSK Cluster zu ermöglichen, der die IAM Zugriffskontrolle verwendet, können Sie einen der folgenden Mechanismen verwenden:
-
Konfiguration von Nicht-Java-Clients mit dem Mechanismus SASL _ OAUTHBEARER
-
Java-Client-Konfiguration mit SASL _ OAUTHBEARER Mechanism oder AWS_MSK _ IAM Mechanism
Verwenden des SASL OAUTHBEARER _-Mechanismus zur Konfiguration IAM
Bearbeiten Sie Ihre client.properties-Konfigurationsdatei und nehmen Sie dafür die hervorgehobene Syntax im Python-Kafka-Beispielclient unten als Leitfaden. Konfigurationsänderungen sind in anderen Sprachen ähnlich.
#!/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()
Laden Sie die Hilfsbibliothek für die von Ihnen gewählte Konfigurationssprache herunter und folgen Sie den Anweisungen im Abschnitt Erste Schritte auf der Homepage dieser Sprachbibliothek.
JavaScript: https://github.com/aws/aws-msk-iam-sasl-signer-js
#getting -gestartet Python: https://github.com/aws/aws-msk-iam-sasl-signer-python
#get -gestartet Gehe zu: -signer-go #getting -gestartet https://github.com/aws/ aws-msk-iam-sasl
. NET: https://github.com/aws/aws-msk-iam-sasl-signer-net
#getting -gestartet JAVA: SASL _ OAUTHBEARER Unterstützung für Java ist über die JAR-Datei verfügbar
aws-msk-iam-auth
Verwenden Sie den MSK benutzerdefinierten AWS_MSK IAM _-Mechanismus zur Konfiguration IAM
Fügen Sie der Datei
client.properties
Folgendes hinzu. Ersetzen<PATH_TO_TRUST_STORE_FILE>
mit dem vollqualifizierten Pfad zur Trust Store-Datei auf dem Client.Anmerkung
Wenn Sie ein bestimmtes Zertifikat nicht verwenden möchten, können Sie
ssl.truststore.location=
aus Ihrer<PATH_TO_TRUST_STORE_FILE>
client.properties
-Datei entfernen. Wenn Sie keinen Wert fürssl.truststore.location
angeben, verwendet der Java-Prozess das Standardzertifikat.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.IAMClientCallbackHandlerUm ein benanntes Profil zu verwenden, das Sie erstellt haben für AWS Anmeldeinformationen, fügen Sie sie
awsProfileName="
in Ihre Client-Konfigurationsdatei ein. Informationen zu benannten Profilen finden Sie unter Benannte Profile im AWS CLI -Dokumentation.your profile name
";Laden Sie die neueste stabile aws-msk-iam-auth
JARDatei herunter und platzieren Sie sie im Klassenpfad. Wenn Sie Maven verwenden, fügen Sie die folgende Abhängigkeit hinzu und passen Sie die Versionsnummer nach Bedarf an: <dependency> <groupId>software.amazon.msk</groupId> <artifactId>aws-msk-iam-auth</artifactId> <version>1.0.0</version> </dependency>
Das MSK Amazon-Client-Plugin ist unter der Apache 2.0-Lizenz als Open Source verfügbar.
Autorisierungsrichtlinien erstellen
Fügen Sie der IAM Rolle, die dem Client entspricht, eine Autorisierungsrichtlinie hinzu. In einer Autorisierungsrichtlinie geben Sie an, welche Aktionen für die Rolle erlaubt oder verweigert werden sollen. Wenn sich Ihr Kunde auf einer EC2 Amazon-Instance befindet, ordnen Sie die Autorisierungsrichtlinie der IAM Rolle für diese EC2 Amazon-Instance zu. Alternativ können Sie Ihren Client so konfigurieren, dass er ein benanntes Profil verwendet, und dann die Autorisierungsrichtlinie der Rolle für dieses benannte Profil zuordnen. Konfigurieren Sie Clients für IAM die Zugriffskontrolle beschreibt, wie ein Client für die Verwendung eines benannten Profils konfiguriert wird.
Informationen zum Erstellen einer IAM Richtlinie finden Sie unter IAMRichtlinien erstellen.
Im Folgenden finden Sie ein Beispiel für eine Autorisierungsrichtlinie für einen Cluster mit dem Namen MyTestCluster. Informationen zur Semantik der Action
- und Resource
-Elemente finden Sie unter Semantik von Aktionen und Ressourcen.
Wichtig
Änderungen, die Sie an einer IAM Richtlinie vornehmen, spiegeln sich in der IAM APIs und der wider AWS CLI sofort. Es kann jedoch einige Zeit dauern, bis die Änderung der Richtlinie wirksam wird. In den meisten Fällen werden Richtlinien-Änderungen in weniger als einer Minute wirksam. Netzwerkbedingungen können die Verzögerung manchmal erhöhen.
{ "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/*" ] } ] }
Informationen zum Erstellen einer Richtlinie mit Aktionselementen, die gängigen Anwendungsfällen von Apache Kafka entsprechen, wie z. B. das Erzeugen und Verbrauchen von Daten, finden Sie unter Häufige Anwendungsfälle.
Für Kafka-Versionen 2.8.0 und höher ist die WriteDataIdempotentlyBerechtigung veraltet (-679). KIPenable.idempotence = true
ist standardmäßig festgelegt. Daher bietet Kafka für die Versionen 2.8.0 und höher IAM nicht die gleiche Funktionalität wie Kafka. ACLs Es ist nicht möglich, WriteDataIdempotently
in einem Thema auszuführen, wenn nur WriteData
-Zugriff auf dieses Thema gewährt wird. Dies hat keinen Einfluss auf die Groß- und Kleinschreibung, in der es um WriteData
Themen geht. ALL In diesem Fall ist WriteDataIdempotently
erlaubt. Dies ist auf Unterschiede in der Implementierung der IAM Logik im Vergleich zur Implementierung von Kafka ACLs zurückzuführen.
Um dieses Problem zu umgehen, empfehlen wir, eine Richtlinie zu verwenden, die dem folgenden Beispiel ähnelt:
{ "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" ] } ] }
In diesem Fall erlaubt WriteData
Schreibvorgänge in TestTopic
, während WriteDataIdempotently
idempotente Schreibvorgänge in den Cluster erlaubt. Es ist wichtig zu beachten, dass WriteDataIdempotently
eine Berechtigung auf Cluster-Ebene ist. Sie kann nicht auf Themenebene verwendet werden. Wenn WriteDataIdempotently
auf die Themenebene beschränkt ist, funktioniert diese Richtlinie nicht.
Holen Sie sich die Bootstrap-Broker für die Zugriffskontrolle IAM
Siehe Die Bootstrap-Broker für einen Amazon-Cluster abrufen MSK.
Semantik von Aktionen und Ressourcen
In diesem Abschnitt wird die Semantik der Aktions- und Ressourcenelemente erläutert, die Sie in einer IAM Autorisierungsrichtlinie verwenden können. Eine Beispielrichtlinie finden Sie unter Autorisierungsrichtlinien erstellen.
Aktionen
In der folgenden Tabelle sind die Aktionen aufgeführt, die Sie in eine Autorisierungsrichtlinie aufnehmen können, wenn Sie die IAM Zugriffskontrolle für Amazon verwendenMSK. Wenn Sie in Ihre Autorisierungsrichtlinie eine Aktion aus der Spalte Aktion der Tabelle aufnehmen, müssen Sie auch die entsprechenden Aktionen aus der Spalte Erforderliche Aktionen angeben.
Aktion | Beschreibung | Erforderliche Aktionen | Erforderliche -Ressourcen | Gilt für Serverless-Cluster |
---|---|---|---|---|
kafka-cluster:Connect |
Gewährt die Berechtigung, sich mit dem Cluster zu verbinden und zu authentifizieren. | None | Cluster | Ja |
kafka-cluster:DescribeCluster |
Erteilt die Erlaubnis, verschiedene Aspekte des Clusters zu beschreiben, was dem von Apache Kafka entspricht. DESCRIBE CLUSTER ACL |
|
Cluster | Ja |
kafka-cluster:AlterCluster |
Erteilt die Erlaubnis, verschiedene Aspekte des Clusters zu ändern, was denen von Apache Kafka entspricht. ALTER CLUSTER ACL |
|
Cluster | Nein |
kafka-cluster:DescribeClusterDynamicConfiguration |
Erteilt die Erlaubnis, die dynamische Konfiguration eines Clusters zu beschreiben, was Apache Kafkas DESCRIBE _ entspricht. CONFIGS CLUSTER ACL |
|
Cluster | Nein |
kafka-cluster:AlterClusterDynamicConfiguration |
Erteilt die Erlaubnis, die dynamische Konfiguration eines Clusters zu ändern, was Apache Kafkas ALTER _ entspricht. CONFIGS CLUSTER ACL |
|
Cluster | Nein |
kafka-cluster:WriteDataIdempotently |
Erteilt die Erlaubnis, Daten unabhängig voneinander auf einen Cluster zu schreiben, was Apache Kafkas _ entspricht. IDEMPOTENT WRITE CLUSTER ACL |
|
Cluster | Ja |
kafka-cluster:CreateTopic |
Erteilt die Berechtigung zum Erstellen von Themen in einem Cluster, was Apache Kafkas/entspricht. CREATE CLUSTER TOPIC ACL |
|
Thema | Ja |
kafka-cluster:DescribeTopic |
Erteilt die Erlaubnis, Themen in einem Cluster zu beschreiben, was der von Apache Kafka entspricht. DESCRIBE TOPIC ACL |
|
Thema | Ja |
kafka-cluster:AlterTopic |
Erteilt die Erlaubnis, Themen in einem Cluster zu ändern, was der von Apache Kafka entspricht. ALTER TOPIC ACL |
|
Thema | Ja |
kafka-cluster:DeleteTopic |
Erteilt die Berechtigung zum Löschen von Themen in einem Cluster, was der von Apache Kafka entspricht. DELETE TOPIC ACL |
|
Thema | Ja |
kafka-cluster:DescribeTopicDynamicConfiguration |
Erteilt die Erlaubnis, die dynamische Konfiguration von Themen in einem Cluster zu beschreiben, was Apache Kafkas DESCRIBE _ entspricht. CONFIGS TOPIC ACL |
|
Thema | Ja |
kafka-cluster:AlterTopicDynamicConfiguration |
Erteilt die Erlaubnis, die dynamische Konfiguration von Themen in einem Cluster zu ändern, was Apache Kafkas ALTER _ entspricht. CONFIGS TOPIC ACL |
|
Thema | Ja |
kafka-cluster:ReadData |
Erteilt die Berechtigung zum Lesen von Daten aus Themen in einem Cluster, was der von Apache Kafka entspricht. READ TOPIC ACL |
|
Thema | Ja |
kafka-cluster:WriteData |
Erteilt die Berechtigung, Daten in Themen auf einem Cluster zu schreiben, was der von Apache Kafka entspricht WRITE TOPIC ACL |
|
Thema | Ja |
kafka-cluster:DescribeGroup |
Erteilt die Erlaubnis, Gruppen in einem Cluster zu beschreiben, was der von Apache Kafka entspricht. DESCRIBE GROUP ACL |
|
Gruppe | Ja |
kafka-cluster:AlterGroup |
Erteilt die Erlaubnis, Gruppen in einem Cluster beizutreten, was der von Apache Kafka entspricht. READ GROUP ACL |
|
Gruppe | Ja |
kafka-cluster:DeleteGroup |
Erteilt die Berechtigung zum Löschen von Gruppen auf einem Cluster, was der von Apache Kafka entspricht. DELETE GROUP ACL |
|
Gruppe | Ja |
kafka-cluster:DescribeTransactionalId |
Erteilt die Erlaubnis, Transaktionen IDs auf einem Cluster zu beschreiben, was der _ID von Apache Kafka entspricht. DESCRIBE TRANSACTIONAL ACL |
|
transactional-id | Ja |
kafka-cluster:AlterTransactionalId |
Erteilt die Erlaubnis, Transaktionen in einem Cluster zu ändern, was IDs der _ID von Apache Kafka entspricht. WRITE TRANSACTIONAL ACL |
|
transactional-id | Ja |
Sie können das Sternchen (*) als Platzhalter in einer Aktion hinter dem Doppelpunkt beliebig oft verwenden. Im Folgenden sind einige Beispiele aufgeführt.
kafka-cluster:*Topic
steht fürkafka-cluster:CreateTopic
,kafka-cluster:DescribeTopic
,kafka-cluster:AlterTopic
undkafka-cluster:DeleteTopic
. Es beinhaltet nichtkafka-cluster:DescribeTopicDynamicConfiguration
oderkafka-cluster:AlterTopicDynamicConfiguration
.-
kafka-cluster:*
steht für alle Berechtigungen.
Ressourcen
Die folgende Tabelle zeigt die vier Ressourcentypen, die Sie in einer Autorisierungsrichtlinie verwenden können, wenn Sie die IAM Zugriffskontrolle für Amazon verwendenMSK. Sie können den Cluster-Amazon-Ressourcennamen (ARN) von der AWS Management Console oder indem Sie den DescribeClusterAPIoder den Describe-Cluster
Ressource | ARNFormat |
---|---|
Cluster | arn:aws:kafka:region :account-id :Cluster/cluster-name /cluster-uuid |
Thema | arn:aws:kafka:region :account-id :thema/cluster-name /cluster-uuid /topic-name |
Gruppe | arn:aws:kafka:region :account-id :gruppe/cluster-name /cluster-uuid /group-name |
Transkaktions-ID | arn:aws:kafka:region :account-id : Transaktions-ID/cluster-name /cluster-uuid /transactional-id |
Sie können das Sternchen (*) als Platzhalter beliebig oft an beliebiger Stelle in dem Teil von verwenden, der nachARN,, und steht. :cluster/
:topic/
:group/
:transactional-id/
Im Folgenden finden Sie einige Beispiele dafür, wie Sie das Sternchen (*) als Platzhalter verwenden können, um auf mehrere Ressourcen zu verweisen:
-
arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/*
: alle Themen in einem beliebigen Cluster mit dem Namen MyTestCluster, unabhängig vom Namen des Clusters. UUID -
arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/*_test
: alle Themen, deren Name mit „_test“ endet, in dem Cluster, dessen Name MyTestCluster und dessen Name UUID abcd1234-0123-abcd-5678-1234abcd-1 ist. arn:aws:kafka:us-east-1:0123456789012:transactional-id/MyTestCluster/*/5555abcd-1111-abcd-1234-abcd1234-1
: alle Transaktionen, deren Transaktions-ID 5555abcd-1111-abcd-1234-abcd1234-1 lautet, in allen Inkarnationen eines Clusters, der in Ihrem Konto benannt ist. MyTestCluster Das heißt, wenn Sie einen Cluster mit dem Namen erstellen MyTestCluster, ihn dann löschen und dann einen weiteren Cluster mit demselben Namen erstellen, können Sie diese Ressource verwenden, um dieselbe Transaktions-ID auf beiden Clustern darzustellen. ARN Auf den gelöschten Cluster kann jedoch nicht zugegriffen werden.
Häufige Anwendungsfälle
Die erste Spalte der folgenden Tabelle zeigt einige gängige Anwendungsfälle. Um einen Client zur Ausführung eines bestimmten Anwendungsfalls zu autorisieren, nehmen Sie die für diesen Anwendungsfall erforderlichen Aktionen in die Autorisierungsrichtlinie des Clients auf und stellen Sie Effect
auf Allow
ein.
Informationen zu allen Aktionen, die Teil der IAM Zugriffskontrolle für Amazon sindMSK, finden Sie unterSemantik von Aktionen und Ressourcen.
Anmerkung
Aktionen werden standardmäßig verweigert. Sie müssen jede Aktion, zu deren Ausführung Sie den Client autorisieren möchten, ausdrücklich erlauben.
Anwendungsfall | Erforderliche Aktionen |
---|---|
Admin. |
|
Erstellen eines Themas |
|
Daten produzieren |
|
Daten verbrauchen |
|
Daten idempotent produzieren |
|
Daten transaktionell produzieren |
|
Die Konfiguration eines Clusters beschreiben |
|
Die Konfiguration eines Clusters aktualisieren |
|
Die Konfiguration eines Themas beschreiben |
|
Die Konfiguration eines Themas aktualisieren |
|
Ein Thema ändern |
|