用户名和密码身份验证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 KMS密钥不能与 Amazon MSK 集群一起使用。

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

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

如果您将Amazon CLI要创建密钥,请指定密钥 ID 或 ARNkms-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 --region us-west-2 --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 目录。有关此步骤的详细信息,请参阅第 6 步:生成和使用数据中的入门教程。

  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 --region us-west-2 --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

使用用户

创建用户:在密钥中创建用户为键-值对。Amazon KMS要求用户名和密码数据采用以下格式:

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

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

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

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

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

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

Limitations

使用 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区域作为集群。