本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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
注意
当您为集群设置 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 身份验证的集群,以及如何通过示例主题生成和使用。
使用以下命令检索集群详细信息。
ClusterArn
替换为集群的 Amazon 资源名称 (ARN):aws kafka describe-cluster --cluster-arn "
ClusterArn
"从命令的 JSON 结果中,保存与名为
ZookeeperConnectString
的字符串关联的值。要创建示例主题,在您的客户端计算机上运行以下命令。
ZookeeperConnectString
替换为您在上一步中录制的字符串。<path-to-your-kafka-installation>
/bin/kafka-topics.sh --create --zookeeperZookeeperConnectString
--replication-factor 3 --partitions 1 --topicExampleTopicName
在您的客户端计算机上,创建一个 JAAS 配置文件,其中包含存储在密钥中的用户凭证。例如,对于用户 alice,使用以下内容创建一个名为
users_jaas.conf
的文件。KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule required username="alice" password="alice-secret"; };
使用以下命令将 JAAS 配置文件导出为
KAFKA_OPTS
环境参数。export KAFKA_OPTS=-Djava.security.auth.login.config=
<path-to-jaas-file>
/users_jaas.conf在
./tmp
目录中创建一个名为kafka.client.truststore.jks
的文件。-
使用以下命令将 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 在 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使用以下命令检索引导代理字符串。
ClusterArn
替换为集群的 Amazon 资源名称 (ARN):aws kafka get-bootstrap-brokers --cluster-arn
ClusterArn
从命令的 JSON 结果中,保存与名为
BootstrapBrokerStringSaslScram
的字符串关联的值。要生成您创建的示例主题,请在客户端计算机上运行以下命令。
BootstrapBrokerStringSaslScram
替换为您在上一步中检索到的值。<path-to-your-kafka-installation>
/bin/kafka-console-producer.sh --broker-listBootstrapBrokerStringSaslScram
--topicExampleTopicName
--producer.config client_sasl.properties要使用您创建的主题,在您的客户端计算机上运行以下命令。
BootstrapBrokerStringSaslScram
用您之前获得的值替换。<path-to-your-kafka-installation>
/bin/kafka-console-consumer.sh --bootstrap-serverBootstrapBrokerStringSaslScram
--topicExampleTopicName
--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 区域中。