使用 S Amazon ecrets Manager 进行登录凭据身份验证 - Amazon Managed Streaming for Apache Kafka
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 S Amazon ecrets Manager 进行登录凭据身份验证

您可以使用使用 S Amazon ecrets Manager 存储和保护的登录凭证来控制对您的 Amazon MSK 集群的访问权限。将用户凭证存储在 Secrets Manager 中可以减少集群身份验证的开销,例如审计、更新和轮换凭证。Secrets Manager 还让您能够跨集群共享用户凭证。

工作方式

Amazon MSK 的登录凭证身份验证使用 SASL/SCRAM(Simple Authentication and Security Layer/ Salted Challenge Response Mechanism)身份验证。要为集群设置登录凭证身份验证,您可以在 Amazon Secrets Manager 中创建密钥资源,并将登录凭证与该密钥关联。

SASL/SCRAM 在 RFC 5802 中定义。SCRAM 使用安全哈希算法,不会在客户端和服务器之间传输明文登录凭证。

注意

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

为 Amazon MSK 集群设置 SASL/SCRAM 身份验证

要在 Secr Amazon ets Manager 中设置密钥,请按照 Secrets Man ager 用户指南中的创建和检索密Amazon 钥教程进行操作。

在为 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 密钥与超出 调整集群的大小:每个代理的分区数量 中所述限制的集群关联。

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

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

    重要

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

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

    { "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. 使用以下命令检索集群详细信息。ClusterArn替换为集群的 Amazon 资源名称 (ARN):

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

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

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

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

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

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

  6. 使用以下命令将 JDK 密钥存储文件从 JVM cacerts 文件夹复制到您在上一步中创建的 kafka.client.truststore.jks 文件。将 JDKFolder 替换为实例上 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. 在 Apache Kafka 安装的 bin 目录中,创建一个名为 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. 使用以下命令检索引导代理字符串。ClusterArn替换为集群的 Amazon 资源名称 (ARN):

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

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

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

    <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
  10. 要使用您创建的主题,在您的客户端计算机上运行以下命令。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 分钟才能传播。

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

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

限制

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

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

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

  • 你必须在你的密钥中 Amazon KMS key 使用。您不能将使用默认 Secrets Manager 加密密钥的密钥与 Amazon MSK 一起使用。有关创建 KMS 密钥的信息,请参阅 Creating symmetric encryption KMS keys

  • 您无法在 Secrets Manager 中使用非对称 KMS 密钥。

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

  • 与 Amazon MSK 集群关联的密钥的名称必须带有前缀 AmazonMSK_

  • 与 Amazon MSK 集群关联的密钥必须与集群位于相同的 Amazon Web Services 账户和 Amazon 区域中。