本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用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
当您为集群设置 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 身份验证的集群,以及如何生成和使用示例主题。
使用以下命令检索集群详细信息。
ClusterArn
替换为集群的 Amazon Resource (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 配置文件,其中包含存储在您的密钥中的用户证书。例如,对于用户 al ice,使用以下内容创建一个名为
users_jaas.conf
alice 的文件。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
文件。将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 在 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 Resource (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 控制台中使用 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区域中。