IAMcontrollo degli accessi - Amazon Managed Streaming per Apache Kafka

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

IAMcontrollo degli accessi

IAMil controllo degli accessi per Amazon ti MSK consente di gestire sia l'autenticazione che l'autorizzazione per il tuo MSK cluster. Ciò elimina la necessità di utilizzare meccanismi separati per l'autenticazione e l'autorizzazione. Ad esempio, quando un client tenta di scrivere sul tuo cluster, MSK Amazon IAM verifica se quel client è un'identità autenticata e anche se è autorizzato a produrre sul tuo cluster. IAMil controllo degli accessi funziona per client Java e non Java, inclusi i client Kafka scritti in Python, Go e. JavaScript NET.

Amazon MSK registra gli eventi di accesso in modo che tu possa controllarli. Per ulteriori informazioni, consulta Registrazione delle chiamate con API AWS CloudTrail.

Per rendere possibile il controllo degli IAM accessi, Amazon MSK apporta piccole modifiche al codice sorgente di Apache Kafka. Queste modifiche non causeranno differenze evidenti nella tua esperienza con Apache Kafka.

Importante

IAMil controllo degli accessi non si applica ai nodi Apache. ZooKeeper Per ulteriori informazioni sul controllo degli accessi a tali nodi, consulta la pagina Controllo dell'accesso ad Apache ZooKeeper.

Importante

L'impostazione di allow.everyone.if.no.acl.found Apache Kafka non ha effetto se il cluster utilizza il controllo degli accessi. IAM

Importante

È possibile richiamare Apache Kafka ACL APIs per un cluster che utilizza il controllo degli accessi. MSK IAM Tuttavia, Apache Kafka non ha alcun effetto sull'autorizzazione per ACLs i ruoli. IAM È necessario utilizzare IAM le politiche per controllare l'accesso ai ruoli. IAM

Come funziona il controllo degli IAM accessi per Amazon MSK

Per utilizzare il controllo degli IAM accessi per AmazonMSK, esegui i seguenti passaggi, descritti in dettaglio nel resto di questa sezione.

Crea un cluster che utilizza il controllo IAM degli accessi

Questa sezione spiega come utilizzare il AWS Management Console, il o il API AWS CLI per creare un cluster che utilizza il controllo degli IAM accessi. Per informazioni su come attivare il controllo degli IAM accessi per un cluster esistente, vedereAggiornamento delle impostazioni di sicurezza di un cluster.

Utilizzare il AWS Management Console per creare un cluster che utilizza il controllo degli IAM accessi
  1. Apri la MSK console Amazon all'indirizzohttps://console.aws.amazon.com/msk/.

  2. Scegli Create cluster (Crea cluster).

  3. Scegli Crea cluster con impostazioni personalizzate.

  4. Nella sezione Autenticazione, scegli il controllo IAM degli accessi.

  5. Completa il resto del flusso di lavoro per creare un cluster.

Usa API o AWS CLI per creare un cluster che utilizza il controllo degli IAM accessi
  • Per creare un cluster con il controllo degli IAM accessi abilitato, usa il comando CreateClusterAPIo il CLI comando create-cluster e passa quanto segue JSON per il ClientAuthentication parametro:. "ClientAuthentication": { "Sasl": { "Iam": { "Enabled": true } }

Configura i client per il controllo degli accessi IAM

Per consentire ai client di comunicare con un MSK cluster che utilizza il controllo degli IAM accessi, puoi utilizzare uno di questi meccanismi:

  • Configurazione client non Java utilizzando SASL _ mechanism OAUTHBEARER

  • Configurazione del client Java utilizzando SASL _ OAUTHBEARER mechanism o AWS _ MSK _ IAM

Utilizzo del OAUTHBEARER meccanismo SASL _ per configurare IAM

  1. Modifica il tuo file di configurazione client.properties usando la sintassi evidenziata nel client Python Kafka di esempio riportato di seguito come guida. Le modifiche alla configurazione sono simili in altri linguaggi.

    #!/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. Scarica la libreria di supporto per il linguaggio di configurazione scelto e segui le istruzioni nella sezione Nozioni di base sulla home page della libreria del linguaggio.

Utilizzo del IAM meccanismo MSK personalizzato AWS _ MSK _ per la configurazione IAM

  1. Aggiungi quanto segue al file client.properties. Replace (Sostituisci) <PATH_TO_TRUST_STORE_FILE> con il percorso completo del file trust store sul client.

    Nota

    Se non desideri utilizzare un certificato specifico, puoi rimuovere ssl.truststore.location=<PATH_TO_TRUST_STORE_FILE> dal tuo file client.properties. Se non specifichi un valore per ssl.truststore.location, il processo Java utilizza il certificato predefinito.

    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

    Per utilizzare un profilo denominato creato per AWS le credenziali, includilo awsProfileName="your profile name"; nel file di configurazione del client. Per informazioni sui profili denominati, consulta Profili denominati nella AWS CLI documentazione.

  2. Scaricate il aws-msk-iam-authJARfile stabile più recente e inseritelo nel percorso della classe. Se utilizzi Maven, aggiungi la seguente dipendenza, modificando il numero di versione secondo necessità:

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

Il plug-in MSK client Amazon è open source con licenza Apache 2.0.

Creazione di policy di autorizzazione

Allega una politica di autorizzazione al IAM ruolo che corrisponde al client. In una policy di autorizzazione, specifichi quali operazioni consentire o rifiutare per il ruolo. Se il tuo cliente utilizza un'EC2istanza Amazon, associa la politica di autorizzazione al IAM ruolo per quell'EC2istanza Amazon. In alternativa, puoi configurare il client per utilizzare un profilo denominato e quindi associare la policy di autorizzazione al ruolo per quel profilo denominato. Configura i client per il controllo degli accessi IAM descrive come configurare un client per utilizzare un profilo denominato.

Per informazioni su come creare una IAM politica, consulta Creazione IAM di politiche.

Di seguito è riportato un esempio di politica di autorizzazione per un cluster denominato MyTestCluster. Per comprendere la semantica degli elementi Action e Resource, consulta la pagina Semantica delle operazioni e delle risorse.

Importante

Le modifiche apportate a una IAM politica si IAM APIs riflettono AWS CLI immediatamente. Tuttavia, può trascorrere molto tempo prima che la modifica della policy abbia effetto. Nella maggior parte dei casi, le modifiche alle policy entrano in vigore in meno di un minuto. A volte le condizioni della rete possono aumentare il ritardo.

{ "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/*" ] } ] }

Per informazioni su come creare una policy con elementi di operazione che corrispondano ai casi d'uso comuni di Apache Kafka, come la produzione e l'utilizzo di dati, consulta la pagina Casi di utilizzo comune.

Per le versioni di Kafka 2.8.0 e successive, l'WriteDataIdempotentlyautorizzazione è obsoleta (-679). KIP Per impostazione predefinita, viene utilizzato enable.idempotence = true. Pertanto, per le versioni di Kafka 2.8.0 e successive, non offre le stesse funzionalità di Kafka. IAM ACLs Non è possibile eseguire l'operazione WriteDataIdempotently su un argomento fornendo l'accesso WriteData solo a quell'argomento. Ciò non influisce sul caso in cui venga fornito un argomento. WriteData ALL In tal caso, l'operazione WriteDataIdempotently è consentita. Ciò è dovuto alle differenze nell'implementazione della IAM logica rispetto al modo in cui vengono implementati i KafkaACLs.

Per ovviare a questo problema, consigliamo di utilizzare una policy simile all'esempio seguente:

{ "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 questo caso, WriteData consente le scritture sul TestTopic, mentre WriteDataIdempotently consente le scritture idempotenti sul cluster. È importante notare che WriteDataIdempotently è un'autorizzazione a livello di cluster. Non può essere utilizzata a livello di argomento. Se WriteDataIdempotently è limitato al livello di argomento, questa policy non funzionerà.

Procurati i broker bootstrap per il controllo degli accessi IAM

Per informazioni, consulta Ottenere i broker bootstrap per un cluster Amazon MSK.

Semantica delle operazioni e delle risorse

Questa sezione spiega la semantica degli elementi di azione e risorsa che è possibile utilizzare in una politica di autorizzazione. IAM Per un esempio di policy, consulta Creazione di policy di autorizzazione.

Azioni

La tabella seguente elenca le azioni che puoi includere in una politica di autorizzazione quando utilizzi il controllo degli IAM accessi per AmazonMSK. Quando includi nella tua policy di autorizzazione un'operazione dalla colonna Operazione della tabella, devi includere anche le operazioni corrispondenti dalla colonna Operazioni richieste.

Azione Descrizione Operazioni necessarie Risorse obbligatorie Applicabile ai cluster serverless
kafka-cluster:Connect Concede l'autorizzazione per connettersi e autenticarsi al cluster. Nessuno cluster
kafka-cluster:DescribeCluster Concede l'autorizzazione a descrivere vari aspetti del cluster, equivalenti a quelli di Apache Kafka. DESCRIBE CLUSTER ACL

kafka-cluster:Connect

cluster
kafka-cluster:AlterCluster Concede il permesso di modificare vari aspetti del cluster, equivalente a quello di Apache Kafka. ALTER CLUSTER ACL

kafka-cluster:Connect

kafka-cluster:DescribeCluster

cluster No
kafka-cluster:DescribeClusterDynamicConfiguration Concede l'autorizzazione a descrivere la configurazione dinamica di un cluster, equivalente a _ di Apache Kafka. DESCRIBE CONFIGS CLUSTER ACL

kafka-cluster:Connect

cluster No
kafka-cluster:AlterClusterDynamicConfiguration Concede l'autorizzazione a modificare la configurazione dinamica di un cluster, equivalente a _ di Apache Kafka. ALTER CONFIGS CLUSTER ACL

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

cluster No
kafka-cluster:WriteDataIdempotently Concede l'autorizzazione a scrivere dati in modo idempotente su un cluster, equivalente a _ di Apache Kafka. IDEMPOTENT WRITE CLUSTER ACL

kafka-cluster:Connect

kafka-cluster:WriteData

cluster
kafka-cluster:CreateTopic Concede l'autorizzazione a creare argomenti su un cluster, equivalente a/di Apache Kafka. CREATE CLUSTER TOPIC ACL

kafka-cluster:Connect

topic
kafka-cluster:DescribeTopic Concede l'autorizzazione a descrivere argomenti in un cluster, equivalente a quella di Apache Kafka. DESCRIBE TOPIC ACL

kafka-cluster:Connect

topic
kafka-cluster:AlterTopic Concede l'autorizzazione a modificare gli argomenti in un cluster, equivalente a quella di Apache Kafka. ALTER TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

topic
kafka-cluster:DeleteTopic Concede l'autorizzazione a eliminare argomenti su un cluster, equivalente a quella di Apache Kafka. DELETE TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

topic
kafka-cluster:DescribeTopicDynamicConfiguration Concede l'autorizzazione a descrivere la configurazione dinamica degli argomenti in un cluster, equivalente a _ di Apache Kafka. DESCRIBE CONFIGS TOPIC ACL

kafka-cluster:Connect

topic
kafka-cluster:AlterTopicDynamicConfiguration Concede l'autorizzazione a modificare la configurazione dinamica degli argomenti su un cluster, equivalente a _ di Apache Kafka. ALTER CONFIGS TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

topic
kafka-cluster:ReadData Concede l'autorizzazione a leggere i dati dagli argomenti di un cluster, equivalente a quella di Apache Kafka. READ TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:AlterGroup

topic
kafka-cluster:WriteData Concede l'autorizzazione a scrivere dati su argomenti di un cluster, equivalente a quella di Apache Kafka WRITE TOPIC ACL

kafka-cluster:Connect

kafka-cluster:DescribeTopic

topic
kafka-cluster:DescribeGroup Concede l'autorizzazione a descrivere i gruppi in un cluster, equivalente a quella di Apache Kafka. DESCRIBE GROUP ACL

kafka-cluster:Connect

gruppo
kafka-cluster:AlterGroup Concede l'autorizzazione a partecipare a gruppi in un cluster, equivalente a quella di Apache Kafka. READ GROUP ACL

kafka-cluster:Connect

kafka-cluster:DescribeGroup

gruppo
kafka-cluster:DeleteGroup Concede l'autorizzazione a eliminare gruppi in un cluster, equivalente a quella di Apache Kafka. DELETE GROUP ACL

kafka-cluster:Connect

kafka-cluster:DescribeGroup

gruppo
kafka-cluster:DescribeTransactionalId Concede l'autorizzazione a descrivere le transazioni IDs su un cluster, equivalente a _ID di Apache Kafka. DESCRIBE TRANSACTIONAL ACL

kafka-cluster:Connect

transactional-id
kafka-cluster:AlterTransactionalId Concede l'autorizzazione a modificare le transazioni IDs su un cluster, equivalente a _ID di Apache Kafka. WRITE TRANSACTIONAL ACL

kafka-cluster:Connect

kafka-cluster:DescribeTransactionalId

kafka-cluster:WriteData

transactional-id

In un'operazione, dopo i due punti, è possibile utilizzare qualsiasi quantità di caratteri jolly asterisco (*). Di seguito vengono mostrati gli esempi.

  • kafka-cluster:*Topic sta per kafka-cluster:CreateTopic, kafka-cluster:DescribeTopic, kafka-cluster:AlterTopic e kafka-cluster:DeleteTopic. Non include kafka-cluster:DescribeTopicDynamicConfiguration o kafka-cluster:AlterTopicDynamicConfiguration.

  • kafka-cluster:* indica tutte le autorizzazioni.

Risorse

La tabella seguente mostra i quattro tipi di risorse che puoi utilizzare in una politica di autorizzazione quando utilizzi il controllo degli IAM accessi per AmazonMSK. Puoi ottenere il cluster Amazon Resource Name (ARN) da AWS Management Console o utilizzando il comando DescribeClusterAPIo AWS CLI describe-cluster. Puoi quindi utilizzare il cluster ARN per creare un argomento, un gruppo e un ID transazionale. ARNs Per specificare una risorsa in una politica di autorizzazione, utilizza quella di quella risorsa. ARN

Risorsa ARN formato
Cluster arn:aws:kafka:region:account-id: cluster/cluster-name/cluster-uuid
Argomento arn:aws:kafka:region:account-id: argomento/cluster-name/cluster-uuid/topic-name
Group (Gruppo) arn:aws:kafka:region:account-id: gruppo/cluster-name/cluster-uuid/group-name
ID transazionale arn:aws:kafka:region:account-id: id transazionale/cluster-name/cluster-uuid/transactional-id

Puoi usare il carattere jolly asterisco (*) un numero qualsiasi di volte in qualsiasi punto della parte che segue,, e. ARN :cluster/ :topic/ :group/ :transactional-id/ Di seguito sono riportati alcuni esempi di come utilizzare il carattere jolly asterisco (*) per fare riferimento a più risorse:

  • arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/*: tutti gli argomenti di qualsiasi cluster denominato MyTestCluster, indipendentemente da quello del cluster. UUID

  • arn:aws:kafka:us-east-1:0123456789012:topic/MyTestCluster/abcd1234-0123-abcd-5678-1234abcd-1/*_test: tutti gli argomenti il cui nome termina con «_test» nel cluster il cui nome è MyTestCluster e il cui nome è UUID abcd1234-0123-abcd-5678-1234abcd-1.

  • arn:aws:kafka:us-east-1:0123456789012:transactional-id/MyTestCluster/*/5555abcd-1111-abcd-1234-abcd1234-1: tutte le transazioni il cui ID transazionale è 5555abcd-1111-abcd-1234-abcd1234-1, in tutte le incarnazioni di un cluster denominato nel tuo account. MyTestCluster Ciò significa che se si crea un cluster denominato MyTestCluster, lo si elimina e quindi si crea un altro cluster con lo stesso nome, è possibile utilizzare questa risorsa per rappresentare lo stesso ID di transazioni su entrambi i cluster. ARN Tuttavia, il cluster eliminato non è accessibile.

Casi di utilizzo comune

La prima colonna della tabella seguente mostra alcuni casi d'uso comuni. Per autorizzare un client a eseguire un determinato caso d'uso, includi le operazioni richieste per tale caso d'uso nella policy di autorizzazione del client e imposta Effect su Allow.

Per informazioni su tutte le azioni che fanno parte del controllo degli IAM accessi per AmazonMSK, consultaSemantica delle operazioni e delle risorse.

Nota

Le operazioni non sono consentite per impostazione predefinita. È necessario consentire esplicitamente ogni operazione che si desidera autorizzare il client a eseguire.

Caso d'uso Operazioni necessarie
Admin

kafka-cluster:*

Creazione di un argomento

kafka-cluster:Connect

kafka-cluster:CreateTopic

Produzione di dati

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

Utilizzo di dati

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:DescribeGroup

kafka-cluster:AlterGroup

kafka-cluster:ReadData

Produzione di dati in modo idempotente

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

kafka-cluster:WriteDataIdempotently

Produzione di dati in modo transazionale

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:WriteData

kafka-cluster:DescribeTransactionalId

kafka-cluster:AlterTransactionalId

Descrizione della configurazione di un cluster

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

Aggiornamento della configurazione di un cluster

kafka-cluster:Connect

kafka-cluster:DescribeClusterDynamicConfiguration

kafka-cluster:AlterClusterDynamicConfiguration

Descrizione della configurazione di un argomento

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

Aggiornamento della configurazione di un argomento

kafka-cluster:Connect

kafka-cluster:DescribeTopicDynamicConfiguration

kafka-cluster:AlterTopicDynamicConfiguration

Modifica di un argomento

kafka-cluster:Connect

kafka-cluster:DescribeTopic

kafka-cluster:AlterTopic