使用用户名和密码进行身份验证AmazonSecrets Manager - Amazon Managed Streaming for Apache Kafka
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用用户名和密码进行身份验证AmazonSecrets Manager

您可以使用来存储和保护用户名和密码,从而控制使用这些用户名和密码访问 Amazon MSK 集群的权限AmazonSecrets Manager。在 Secrets Manager 中存储用户凭证可以减少审计、更新和轮换凭证等群集身份验证的开销。Secrets Manager 还允许您在集群之间共享用户证书。

工作原理

Amazon MSK 的用户名和密码身份验证使用 SASL/SCRAM(简单身份验证和安全层/Salted Challenge Response Authentication 要为集群设置用户名和密码身份验证,请在中创建密钥资源AmazonSecrets Manager,并将用户名和密码与该密钥相关联。

SASL/SCRAM 定义于RFC 5802. SCRAM 使用安全哈希算法,不会在客户端和服务器之间传输纯文本密码。

注意

当您为集群设置 SASL/SCRAM 身份验证时,Amazon MSK 会为客户端和代理之间的所有流量开启 TLS 加密。

为亚马逊 MSK 集群设置 SASL/SCRAM 身份验证

在中设置密钥AmazonSecrets Manager,关注创建和检索密钥教程AmazonSecrets Manager 用户指南.

为 Amazon MSK 集群创建密钥时,请注意以下要求:

  • 选择其他密钥类型(例如 API 密钥)对于密钥类型。

  • 您的密钥名称必须以前缀开头amazonmsk_.

  • 您必须使用现有的自定义Amazon KMS键入或创建新的自定义Amazon KMS你的秘密的钥匙。Secrets Manager 使用默认设置Amazon KMS默认情况下是密钥的密钥。

    重要

    使用默认值创建的密钥Amazon KMS密钥不能与 Amazon MSK 集群结合使用。

  • 您的用户和密码数据必须采用以下格式才能使用键值对输入纯文本选项。

    { "username": "alice", "password": "alice-secret" }
  • 记录您的密钥的 ARN(Amazon 资源名称)值。

  • 重要

    您不能将 Secrets Manager 密钥与超过中所述限制的集群相关联 将集群设置为正确大小:每个代理的分区数.

  • 如果您将Amazon CLI要创建密钥,请为指定密钥 ID 或 ARNkms-key-id参数。不要指定别名。

  • 要将密钥与您的集群关联起来,请使用 Amazon MSK 控制台或 BatchAssociateScramSecret操作。

    重要

    当您将密钥与集群关联时,Amazon MSK 会向密钥附加资源策略,允许您的集群访问和读取您定义的密钥值。您不应修改此资源策略。这样做可以防止您的集群访问您的密钥。

    以下示例 JSON 输入BatchAssociateScramSecret操作将密钥与集群相关联:

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

使用用户名和密码连接到集群

创建密钥并将其与集群相关联后,您可以将客户端连接到集群。以下示例步骤演示如何将客户端连接到使用 SASL/SCRAM 身份验证的集群,以及如何从示例主题中生成和使用。

  1. 使用以下命令检索集群详细信息。Replace(替换)ClusterArn使用集群的 Amazon 资源名称 (ARN):

    aws kafka describe-cluster --cluster-arn "ClusterArn"

    从命令的 JSON 结果中,保存与名为的字符串关联的值ZookeeperConnectString.

  2. 要创建示例主题,请在您的客户端计算机上运行以下命令。Replace(替换)ZookeeperConnectString使用您在上一步中记录的字符串。

    <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --zookeeper ZookeeperConnectString --replication-factor 3 --partitions 1 --topic ExampleTopicName
  3. 在您的客户端计算机上,创建一个 JAAS 配置文件,其中包含存储在您的密钥中的用户证书。例如,对于用户爱丽丝,创建一个名为users_jaas.conf具有以下内容。

    KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule required username="alice" password="alice-secret"; };
  4. 使用以下命令将您的 JAS 配置文件导出为KAFKA_OPTS环境参数。

    export KAFKA_OPTS=-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf
  5. 创建一个名为的文件kafka.client.truststore.jks在一个./tmp目录。

  6. 使用以下命令可从 JVM 复制 JDK 密钥存储文件cacerts文件夹转录kafka.client.truststore.jks您在上一步中创建的文件。Replace(替换)jdk 文件夹使用您的实例上的 JDK 文件夹的名称。例如,您的 JDK 文件夹可能被命名为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. 在里面bin你的 Apache Kafka 安装目录,创建一个名为client_sasl.properties具有以下内容。此文件定义了 SASL 机制和协议。

    security.protocol=SASL_SSL sasl.mechanism=SCRAM-SHA-512 ssl.truststore.location=<path-to-keystore-file>/kafka.client.truststore.jks
  8. 使用以下命令检索您的引导代理字符串。Replace(替换)ClusterArn使用集群的 Amazon 资源名称 (ARN):

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

    从命令的 JSON 结果中,保存与名为的字符串关联的值BootstrapBrokerStringSaslScram.

  9. 要生成您创建的示例主题,请在您的客户端计算机上运行以下命令。Replace(替换)BootstrapBrokerStringSaslScram使用您在上一步中检索的值。

    <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
  10. 要使用您创建的主题中的内容,请在您的客户端计算机上运行以下命令。Replace(替换)BootstrapBrokerStringSaslScram使用您之前获得的值。

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

使用用户

创建用户:您在密钥中创建用户。当您使用以下应用程序时:纯文本选项在 Secrets Manager 控制台中,应按以下格式指定用户名和密码数据。

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

撤消用户访问权限:要撤消用户访问集群的证书,我们建议您首先删除或强制使用集群上的 ACL,然后取消关联密钥。这是因为以下原因:

  • 删除用户不会关闭现有连接。

  • 对您的密钥所做的更改最多需要 10 分钟才能传播。

有关结合 Amazon MSK 使用 ACL 的更多信息,请参阅Apache Kafka ACL.

我们建议您限制对 zookeeper 节点的访问,以防止用户修改 ACL。有关更多信息,请参阅 控制对 Apache 的访问 ZooKeeper

限制

使用 SCRAM 密钥时,请注意以下限制:

  • Amazon MSK 仅支持 SCRAM-SHA-512 身份验证。

  • 一个 Amazon MSK 集群最多可拥有 1000 个用户。

  • 您必须使用Amazon KMS key用你的秘密。您不能将使用默认 Secrets Manager 加密密钥的密钥与 Amazon MSK 一起使用。有关创建 KMS 密钥的信息,请参阅创建对称加密 KMS 密钥.

  • 您不能在 Secrets Managed 中使用非对称 KMS 密钥。

  • 您可以一次将最多 10 个密钥与集群关联 BatchAssociateScramSecret操作。

  • 与 Amazon MSK 集群关联的密钥的名称必须具有前缀amazonmsk_.

  • 与 Amazon MSK 集群关联的密钥必须位于同一Amazon Web Services 账户中,并且Amazon区域作为集群。