Autenticazione delle credenziali di accesso con Secrets Manager AWS - 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à.

Autenticazione delle credenziali di accesso con Secrets Manager AWS

Puoi controllare l'accesso ai tuoi cluster Amazon MSK utilizzando credenziali di accesso archiviate e protette tramite Secrets Manager. AWS L'archiviazione delle credenziali utente in Secrets Manager riduce il sovraccarico dell'autenticazione del cluster, ad esempio il controllo, l'aggiornamento e la rotazione delle credenziali. Secrets Manager consente inoltre di condividere le credenziali utente tra i cluster.

Come funziona

L'autenticazione delle credenziali di accesso di Amazon MSK supporta l'autenticazione SASL/SCRAM (Simple Authentication and Security Layer/Salted Challenge Response Authentication Mechanism). Per configurare l'autenticazione delle credenziali di accesso per un cluster, crea una risorsa segreta in AWS Secrets Manager e associa le credenziali di accesso a quel segreto.

SASL/SCRAM è definito in RFC 5802. SCRAM utilizza algoritmi di hashing protetti e non trasmette credenziali di accesso non crittografate tra client e server.

Nota

Quando configuri l'autenticazione SASL/SCRAM per il cluster, Amazon MSK attiva la crittografia TLS per tutto il traffico tra client e broker.

Configurazione dell'autenticazione SASL/SCRAM per un cluster Amazon MSK

Per impostare un segreto in AWS Secrets Manager, segui il tutorial Creazione e recupero di un segreto nella Guida per l'utente di AWS Secrets Manager.

Tieni presente i seguenti requisiti quando crei un segreto per un cluster Amazon MSK:

  • Per il tipo di segreto, scegli Altro tipo di segreto (es. chiave API).

  • Il nome del segreto deve iniziare con il prefisso AmazonMSK_.

  • È necessario utilizzare una AWS KMS chiave personalizzata esistente o creare una nuova AWS KMS chiave personalizzata per il segreto. Secrets Manager utilizza la AWS KMS chiave predefinita per un segreto per impostazione predefinita.

    Importante

    Un segreto creato con la AWS KMS chiave predefinita non può essere utilizzato con un cluster Amazon MSK.

  • I dati delle credenziali di accesso devono essere nel seguente formato per inserire coppie chiave-valore utilizzando l'opzione Non crittografato.

    { "username": "alice", "password": "alice-secret" }
  • Prendi nota del valore del nome della risorsa Amazon (ARN) del segreto.

  • Importante

    Non è possibile associare un segreto di Secrets Manager a un cluster che supera i limiti descritti in Dimensionamento corretto del cluster: numero di partizioni per broker.

  • Se si utilizza il AWS CLI per creare il segreto, specificare un ID chiave o un ARN per il kms-key-id parametro. Non specificare un alias.

  • Per associare il segreto al cluster, utilizza la console Amazon MSK o l' BatchAssociateScramSecretoperazione.

    Importante

    Quando associ un segreto a un cluster, Amazon MSK collega al segreto una policy delle risorse che consente al cluster di accedere e leggere i valori del segreto che hai definito. Questa policy delle risorse non dovrebbe essere modificata. In questo modo, è possibile impedire al cluster di accedere al segreto.

    L'esempio seguente di input JSON per l'operazione BatchAssociateScramSecret associa un segreto a un cluster:

    { "clusterArn" : "arn:aws:kafka:us-west-2:0123456789019:cluster/SalesCluster/abcd1234-abcd-cafe-abab-9876543210ab-4", "secretArnList": [ "arn:aws:secretsmanager:us-west-2:0123456789019:secret:AmazonMSK_MyClusterSecret" ] }

Connessione al cluster con credenziali di accesso

Dopo aver creato un segreto e averlo collegato al cluster, è possibile collegare il client al cluster. I seguenti passaggi di esempio mostrano come connettere un client a un cluster che utilizza l'autenticazione SASL/SCRAM e come produrre e utilizzare un argomento di esempio.

  1. Esegui il comando seguente su un computer su cui è installata la AWS CLI, sostituendo clusterARN con l'ARN del tuo cluster.

    aws kafka get-bootstrap-brokers --cluster-arn clusterARN
  2. Per creare un argomento di esempio, esegui il comando seguente, sostituendo BootstrapServerString con uno degli endpoint del broker ottenuti nel passaggio precedente.

    <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapServerString --replication-factor 3 --partitions 1 --topic ExampleTopicName
  3. Sul tuo computer client, crea un file di configurazione JAAS che contenga le credenziali utente archiviate nel tuo segreto. Ad esempio, per l'utente alice, crea un file chiamato users_jaas.conf con il seguente contenuto.

    KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule required username="alice" password="alice-secret"; };
  4. Utilizza il seguente comando per esportare il file di configurazione JAAS come parametro di ambiente KAFKA_OPTS.

    export KAFKA_OPTS=-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf
  5. Nella directory ./tmp, crea un file denominato kafka.client.truststore.jks.

  6. Utilizza il comando seguente per copiare il file dell'archivio chiavi JDK dalla cartella cacerts JVM nel file kafka.client.truststore.jks creato nel passaggio precedente. Sostituisci JDKFolder con il nome della cartella JDK sull'istanza. Ad esempio, la tua cartella JDK potrebbe avere il nome java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64.

    cp /usr/lib/jvm/JDKFolder/jre/lib/security/cacerts /tmp/kafka.client.truststore.jks
  7. Nella directory bin di installazione di Apache Kafka, crea un file delle proprietà del client chiamato client_sasl.properties con il seguente contenuto. Questo file definisce il meccanismo e il protocollo SASL.

    security.protocol=SASL_SSL sasl.mechanism=SCRAM-SHA-512 ssl.truststore.location=<path-to-keystore-file>/kafka.client.truststore.jks
  8. Recupera la stringa dei broker di bootstrap con il comando seguente. Sostituisci ClusterArncon l'Amazon Resource Name (ARN) del tuo cluster:

    aws kafka get-bootstrap-brokers --cluster-arn ClusterArn

    Dal risultato JSON del comando, salva il valore associato alla stringa denominata BootstrapBrokerStringSaslScram.

  9. Per produrre l'argomento di esempio che hai creato, esegui il comando seguente sul computer client. Sostituisci BootstrapBrokerStringSaslScram con il valore recuperato nel passaggio precedente.

    <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
  10. Per utilizzare l'argomento che hai creato, esegui il comando seguente sul tuo computer client. Sostituisci BootstrapBrokerStringSaslScram con il valore che hai ottenuto in precedenza.

    <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic ExampleTopicName --from-beginning --consumer.config client_sasl.properties

Operazioni con gli utenti

Creazione di utenti: crea utenti nel tuo segreto come coppie chiave-valore. Quando si utilizza l'opzione Non crittografato nella console Secrets Manager, è necessario specificare i dati delle credenziali di accesso nel formato seguente.

{ "username": "alice", "password": "alice-secret" }

Revoca dell'accesso utente: per revocare le credenziali di accesso a un cluster di un utente, si consiglia di rimuovere o applicare un'ACL al cluster e successivamente annullare l'associazione del segreto. Ciò può essere dovuto ai motivi seguenti:

  • La rimozione di un utente non chiude le connessioni esistenti.

  • La propagazione delle modifiche al segreto richiede fino a 10 minuti.

Per ulteriori informazioni sull'utilizzo delle ACL con Amazon MSK, consulta la pagina ACL Apache Kafka.

Per i cluster che utilizzano ZooKeeper la modalità, si consiglia di limitare l'accesso ai ZooKeeper nodi per impedire agli utenti di modificare gli ACL. Per ulteriori informazioni, consulta Controllo dell'accesso ad Apache ZooKeeper.

Limitazioni

Quando utilizzi i segreti SCRAM, tieni presente le limitazioni seguenti:

  • Amazon MSK supporta solo l'autenticazione SCRAM-SHA-512.

  • Un cluster Amazon MSK può avere fino a 1.000 utenti.

  • Devi usare an AWS KMS key con il tuo Secret. Non è possibile utilizzare un segreto che utilizza la chiave di crittografia Secrets Manager predefinita con Amazon MSK. Per ulteriori informazioni sulla creazione di una chiave KMS, consulta la pagina Creating symmetric encryption KMS keys.

  • Non è possibile utilizzare una chiave KMS asimmetrica con Secrets Manager.

  • È possibile associare fino a 10 segreti a un cluster alla volta utilizzando l' BatchAssociateScramSecretoperazione.

  • Il nome dei segreti associati a un cluster Amazon MSK deve avere il prefisso AmazonMSK_.

  • I segreti associati a un cluster Amazon MSK devono trovarsi nello stesso account e nella stessa AWS regione Amazon Web Services del cluster.