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

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

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

您可以使用 Security Manager 存储和保护的用户名和密码,从而控制使用SAmazon ecrets Manager 存储和保护的 Amazon MSK 集群的权限。将用户凭证存储在 Secrets Manager 中可以减少集群身份验证(例如审计、更新和轮换凭据)的开销。Secrets Manager 还允许您在集群之间共享用户证书。

工作原理

Amazon MSK 的用户名和密码身份验证使用 SASL/SECRAM(简单身份验证、安全层和安全层的挑战响应机制)身份验证。要为集群设置用户名和密码身份验证,您可以在 Secr Amazonets Manager 中创建密钥资源,并将用户名和密码与该密钥关联起来。

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

注意

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

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

要在密钥SecrAmazon ets Manager 中设置密钥,请按照密钥管理器用户指南中的创建和检索Amazon密钥教程进行操作。

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

  • 为密钥类型选择其他类型的密钥(例如 API 密钥)

  • 您的机密名称必须以前缀 Amazonmsk_ 开头。

  • 您必须使用现有的自定义Amazon KMS密钥或为密Amazon KMS钥创建新的自定义密钥。默认情况下,密Amazon KMS钥管理器使用默认密钥作为密钥。

    重要

    使用默认密钥创建的密Amazon KMS钥不能用于 Amazon MSK 集群。

  • 要使用 P laintex t 选项输入键值对,您的用户和密码数据必须采用以下格式。

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

  • 重要

    您无法将 Secrets Manager 密钥与超过中所述限制的集群相关联 调整集群规模:每个代理的分区数量

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

  • 要将密钥与您的集群关联,请使用 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 Resource (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 配置文件,其中包含存储在您的密钥中的用户证书。例如,对于用户 al ice,使用以下内容创建一个名为users_jaas.conf alice 的文件。

    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 密钥存储文件从 JVMcacerts 文件夹中复制到您在上一步中创建的kafka.client.truststore.jks文件。将 jdkFol der 替换为实例上 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 Resource (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 控制台中使用 Plaintext 选项时,应按以下格式指定用户名和密码数据。

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

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

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

  • 对密钥的更改最多需要 10 分钟才能生效。

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

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

限制

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

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

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

  • 你必须使用Amazon KMS key与你的密钥搭配使用。您不能在 Amazon MSK 中使用使用默认密钥管理器加密密钥的密钥。有关创建 KMS 密钥的信息,请参阅创建对称加密 KMS 密钥

  • 您无法在密钥管理器中使用非对称 KMS 密钥。

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

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

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