Authentification des identifiants de connexion avec AWS Secrets Manager - Amazon Managed Streaming for Apache Kafka

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Authentification des identifiants de connexion avec AWS Secrets Manager

Vous pouvez contrôler l'accès à vos clusters Amazon MSK à l'aide d'informations de connexion stockées et sécurisées à l'aide de AWS Secrets Manager. Le stockage des informations d'identification des utilisateurs dans Secrets Manager réduit les coûts liés à l'authentification du cluster, comme l'audit, la mise à jour et la rotation des informations d'identification. Secrets Manager vous permet également de partager les informations d'identification des utilisateurs entre les clusters.

Comment ça marche

L'authentification des informations d'identification pour Amazon MSK utilise l'authentification SASL/SCRAM (Simple Authentication and Security Layer/Salted Challenge Response Authentication Mechanism). Pour configurer l'authentification des informations d'identification de connexion pour un cluster, vous devez créer une ressource secrète dans AWS Secrets Manager et associer les informations d'identification de connexion à ce secret.

L'authentification SASL/SCRAM est définie dans RFC 5802. SCRAM utilise des algorithmes de hachage sécurisés et ne transmet pas d'informations d'identification de connexion en texte brut entre le client et le serveur.

Note

Lorsque vous configurez l'authentification SASL/SCRAM pour votre cluster, Amazon MSK active le chiffrement TLS pour tout le trafic entre les clients et les agents.

Configuration de l'authentification SASL/SCRAM pour un cluster Amazon MSK

Pour configurer un secret dans AWS Secrets Manager, suivez le didacticiel de création et de récupération d'un secret figurant dans le guide de l'utilisateur de AWS Secrets Manager.

Tenez compte des exigences suivantes lors de la création d'un secret pour un cluster Amazon MSK :

  • Choisissez Autre type de secrets (p. ex. clé d'API) pour le type de secret.

  • Votre nom secret doit commencer par le préfixe AmazonMSK_.

  • Vous devez soit utiliser une AWS KMS clé personnalisée existante, soit créer une nouvelle AWS KMS clé personnalisée pour votre secret. Secrets Manager utilise la AWS KMS clé par défaut pour un secret.

    Important

    Un secret créé avec la AWS KMS clé par défaut ne peut pas être utilisé avec un cluster Amazon MSK.

  • Vos informations d'identification de connexion doivent être au format suivant pour saisir des paires clé-valeur à l'aide de l'option Texte brut.

    { "username": "alice", "password": "alice-secret" }
  • Enregistrez la valeur ARN (Amazon Resource Name) de votre secret.

  • Important

    Vous ne pouvez pas associer un secret de Secrets Manager à un cluster qui dépasse les limites décrites dans Dimensionnez correctement votre cluster : nombre de partitions par agent.

  • Si vous utilisez le AWS CLI pour créer le secret, spécifiez un ID de clé ou un ARN pour le kms-key-id paramètre. Ne spécifiez pas d'alias.

  • Pour associer le secret à votre cluster, utilisez soit la console Amazon MSK, soit l' BatchAssociateScramSecretopération.

    Important

    Lorsque vous associez un secret à un cluster, Amazon MSK associe une politique de ressource au secret qui permet à votre cluster d'accéder aux valeurs secrètes que vous avez définies et de les lire. Vous ne devez pas modifier cette politique de ressource. Cela peut empêcher votre cluster d'accéder à votre secret.

    L'exemple d'entrée JSON suivant pour l'opération BatchAssociateScramSecret associe un secret à 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" ] }

Connexion à votre cluster à l'aide des informations d'identification de connexion

Après avoir créé un secret et l'avoir associé à votre cluster, vous pouvez connecter votre client au cluster. Les exemples d'étapes suivants montrent comment connecter un client à un cluster qui utilise l'authentification SASL/SCRAM, et comment produire vers et consommer à partir d'un exemple de rubrique.

  1. Exécutez la commande suivante sur une machine sur laquelle la AWS CLI est installée, en remplaçant ClusterArn par l'ARN de votre cluster.

    aws kafka get-bootstrap-brokers --cluster-arn clusterARN
  2. Pour créer un exemple de rubrique, exécutez la commande suivante en remplaçant BootstrapServerString par l'un des points de terminaison du broker que vous avez obtenus à l'étape précédente.

    <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapServerString --replication-factor 3 --partitions 1 --topic ExampleTopicName
  3. Sur votre ordinateur client, créez un fichier de configuration JAAS contenant les informations d'identification d'utilisateur stockées dans votre secret. Par exemple, pour l'utilisateur alice, créez un fichier appelé users_jaas.conf avec le contenu suivant.

    KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule required username="alice" password="alice-secret"; };
  4. Utilisez la commande suivante pour exporter votre fichier de configuration JAAS en tant que paramètre d'environnement KAFKA_OPTS.

    export KAFKA_OPTS=-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf
  5. Créez un fichier nommé kafka.client.truststore.jks dans un répertoire ./tmp.

  6. Utilisez la commande suivante pour copier le fichier de stockage de clés JDK de votre dossier cacerts JVM dans le fichier kafka.client.truststore.jks que vous avez créé à l'étape précédente. Remplacez JDKFolder par le nom du dossier JDK de votre instance. Par exemple, votre dossier JDK peut être nommé 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. Dans le répertoire bin de votre installation d'Apache Kafka, créez un fichier de propriétés client appelé client_sasl.properties avec le contenu suivant. Ce fichier définit le mécanisme et le protocole SASL.

    security.protocol=SASL_SSL sasl.mechanism=SCRAM-SHA-512 ssl.truststore.location=<path-to-keystore-file>/kafka.client.truststore.jks
  8. Récupérez la chaîne de votre agent d'amorçage à l'aide de la commande suivante. ClusterArnRemplacez-le par le Amazon Resource Name (ARN) de votre cluster :

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

    À partir du résultat JSON de la commande, enregistrez la valeur associée à la chaîne nommée BootstrapBrokerStringSaslScram.

  9. Pour produire un exemple de rubrique que vous avez créé, exécutez la commande suivante sur votre ordinateur client. Remplacez BootstrapBrokerStringSaslScram par la valeur que vous avez récupérée à l'étape précédente.

    <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
  10. Pour consommer à partir de la rubrique que vous avez créée, exécutez la commande suivante sur votre ordinateur client. Remplacez BootstrapBrokerStringSaslScram par la valeur que vous avez obtenue précédemment.

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

Utilisation des utilisateurs

Création d'utilisateurs : vous créez des utilisateurs dans votre secret sous forme de paires valeur-clé. Lorsque vous utilisez l'option Texte brut dans la console Secrets Manager, vous devez spécifier les informations d'identification de connexion au format suivant.

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

Révocation de l'accès utilisateur : pour révoquer les informations d'identification d'un utilisateur lui permettant d'accéder à un cluster, nous vous recommandons de supprimer ou d'appliquer une liste de contrôle d'accès (ACL) sur le cluster, puis de dissocier le secret. Ceci pour les raisons suivantes :

  • La suppression d'un utilisateur ne ferme pas les connexions existantes.

  • Les modifications de votre secret prennent jusqu'à 10 minutes pour se propager.

Pour en savoir plus sur l'utilisation d'une liste de contrôle d'accès (ACL) avec Amazon MSK, consultez Listes de contrôle d'accès (ACL) Apache Kafka.

Pour les clusters utilisant ZooKeeper le mode, nous vous recommandons de restreindre l'accès à vos ZooKeeper nœuds afin d'empêcher les utilisateurs de modifier les ACL. Pour de plus amples informations, consultez Contrôle de l'accès à Apache ZooKeeper.

Limites

Notez les limitations suivantes lorsque vous utilisez des secrets SCRAM :

  • Amazon MSK prend uniquement en charge l'authentification SCRAM-SHA-512.

  • Un cluster Amazon MSK peut avoir jusqu'à 1 000 utilisateurs.

  • Vous devez utiliser un AWS KMS key avec votre secret. Vous ne pouvez pas utiliser un secret qui utilise la clé de chiffrement par défaut de Secrets Manager avec Amazon MSK. Pour plus d'informations sur la création d'une clé KMS, consultez Création de clés de chiffrements symétriques.

  • Vous ne pouvez pas utiliser une clé KMS asymétrique avec Secrets Manager.

  • Vous pouvez associer jusqu'à 10 secrets à un cluster à la fois à l'aide de cette BatchAssociateScramSecretopération.

  • Le nom des secrets associés à un cluster Amazon MSK doit comporter le préfixe AmazonMSK_.

  • Les secrets associés à un cluster Amazon MSK doivent se trouver dans le même compte Amazon Web Services et dans la même AWS région que le cluster.