用户名和密码身份验证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(简单身份验证和安全层/盐渍质询响应机制)身份验证。要为集群设置用户名和密码身份验证,请在AmazonSecrets Manager,并将用户名和密码与密码与密码关联起来。

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

注意

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

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

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

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

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

  • 你的秘密名字必须有前缀亚马逊SK_.

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

    重要

    使用默认设置创建的秘密Amazon KMSAmazon MSK 集群无法与 Amazon MSK 集群结合使用。

  • 您的用户和密码数据必须采用以下格式:

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

重要

您不能将 Secret Secrets Manager 钥与超出中所述限制的集群关联起来 每个代理的分区数.

如果您将Amazon CLI要创建密钥 ARN 请为kms-key-id参数。不要指定别名。

要将密钥与您的集群关联,请使用 Amazon MSK 控制台或批量关联 CramSecretoperation.

以下示例 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" ] }

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

创建密码并将其与集群关联后,请执行以下操作以将客户端连接到集群:

  1. 运行以下命令,替换:ClusterArn使用集群的 Amazon 资源名称 (ARN):

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

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

  2. 在集群中运行以下命令以在集群中创建主题:bin客户端计算机中的目录,替换ZookeeperConnectString使用您在上一条命令中记录的字符串。您可以为主题指定不同的名称,但如果这样做,请记住使用在本过程的其余部分中选择的名称。

    ./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. 使用以下命令将此 JAAS 配置文件导出为 KAFKA_OPTS 环境参数:

    export KAFKA_OPTS=-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf
  5. 将 JDK 密钥存储文件从 JVM 复制到。 /tmp 目录。有关此步骤的详细信息,请参阅第 4 步:生成和使用数据中的入门教程。

  6. 创建一个名为client_sasl.properties包含以下内容。该文件定义了 SASL 机制和协议。

    security.protocol=SASL_SSL sasl.mechanism=SCRAM-SHA-512 ssl.truststore.location=<path-to-keystore-file>/kafka.client.truststore.jks
  7. 运行以下命令,替换:ClusterArn使用集群的 Amazon 资源名称 (ARN):

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

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

  8. 要为您创建的主题生成,请在bin客户端计算机中的目录,替换Bootstrap 经纪人 SaslScram运行上一条命令时获得的值。

    ./kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
  9. 要使用您创建的主题,请在bin客户端计算机中的目录,替换Bootstrap 经纪人 SaslScram与之前获得的值相同。

    ./kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic ExampleTopicName --from-beginning --consumer.config client_sasl.properties

使用用户

创建用户:您将在密钥中创建用户,作为键值对。用户名和密码数据必须采用以下格式:

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

撤消用户访问权限:要撤消用户访问集群的凭据,我们建议您首先删除或强制对集群的 ACL,然后取消关联密钥。出现上述情况是因为以下原因:

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

  • 对秘密的更改需要长达 10 分钟才能传播。

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

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

限制

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

  • 亚马逊 MSK 仅支持 SCRAM-SHA-512 身份验证。

  • Amazon MSK 集群最多可包含 1000 个用户。

  • 您必须将客户主密钥 (CMK) 与 Secret 结合使用。不能将默认秘密管理器加密密钥与 Amazon MSK 结合使用的密钥。有关创建 CMK 的信息,请参阅创建对称 CMK.

  • 你不能在 Secrets Manager 中使用不对称的 CMK。

  • 您最多可以使用将 10 个密钥与集群关联。批量关联 CramSecretoperation.

  • 与 Amazon MSK 集群关联的密钥的名称必须具有前缀。亚马逊SK_.

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