本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
如何开始使用加密?
创建 MSK 集群时,您可以使用 JSON 格式指定加密设置。以下是示例。
{ "EncryptionAtRest": { "DataVolumeKMSKeyId": "arn:aws:kms:us-east-1:123456789012:key/abcdabcd-1234-abcd-1234-abcd123e8e8e" }, "EncryptionInTransit": { "InCluster": true, "ClientBroker": "TLS" } }
对于 DataVolumeKMSKeyId
,您可以为账户 (alias/aws/kafka
) 中的 MSK 指定客户托管密钥或 Amazon 托管式密钥 。如果您未指定EncryptionAtRest
,Amazon MSK 仍会对您的静态数据进行加密。 Amazon 托管式密钥要确定您的集群使用的密钥,请发送 GET
请求或调用 DescribeCluster
API 操作。
对于 EncryptionInTransit
,InCluster
的默认值为 true,但是如果您不想在代理之间传递数据时让 Amazon MSK 加密数据,则可以将此项设置为 false。
要为客户端和代理之间传输的数据指定加密模式,请将 ClientBroker
设置为以下三个值之一:TLS
、TLS_PLAINTEXT
或 PLAINTEXT
。
创建集群时指定加密设置
将上一示例的内容保存在文件中,并为该文件指定所需的任何名称。例如,将其命名为
encryption-settings.json
。-
运行
create-cluster
命令并使用encryption-info
选项指向您保存配置 JSON 的文件。以下是示例。将{YOUR MSK VERSION}
替换为与 Apache Kafka 客户端版本相匹配的版本。有关如何查找 MSK 集群版本的信息,请参阅 To find the version of your MSK cluster。请注意,使用与 MSK 集群版本不同的 Apache Kafka 客户端版本,可能会导致 Apache Kafka 数据损坏、丢失和停机。aws kafka create-cluster --cluster-name "ExampleClusterName" --broker-node-group-info file://brokernodegroupinfo.json --encryption-info file://encryptioninfo.json --kafka-version "
{YOUR MSK VERSION}
" --number-of-broker-nodes 3以下是运行此命令后的成功响应示例。
{ "ClusterArn": "arn:aws:kafka:us-east-1:123456789012:cluster/SecondTLSTest/abcdabcd-1234-abcd-1234-abcd123e8e8e", "ClusterName": "ExampleClusterName", "State": "CREATING" }
测试 TLS 加密
按照步骤 3:创建客户端计算机中的指导创建客户端计算机。
-
在客户端计算机上安装 Apache Kafka。
-
在 Amazon CLI 安装了的计算机上运行以下命令,将
clusterArn
替换为您的集群(与前面过程中的示例一样,使用TLS
设置为ClientBroker
创建的集群)的 ARN。aws kafka describe-cluster --cluster-arn
clusterARN
在结果中,查找
ZookeeperConnectString
的值并保存它,因为您需要在下一步中使用该值。 -
在您的客户端计算机上运行以下命令以创建主题。
ZookeeperConnectString
替换为您在上一步ZookeeperConnectString
中获得的值。<path-to-your-kafka-installation>
/bin/kafka-topics.sh --create --zookeeperZookeeperConnectString
--replication-factor 3 --partitions 1 --topic TLSTestTopic -
在本示例中,我们使用 JVM 信任库与 MSK 集群通信。为此,请首先在客户端计算机上创建一个名为
/tmp
的文件夹。然后,转到 Apache Kafka 安装的bin
文件夹,并运行以下命令。(您的 JVM 路径可能不相同。)cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64/jre/lib/security/cacerts /tmp/kafka.client.truststore.jks
-
仍在客户端计算机上的 Apache Kafka 安装的
bin
文件夹中,创建一个名为client.properties
的文本文件,该文件包含以下内容。security.protocol=SSL ssl.truststore.location=/tmp/kafka.client.truststore.jks
-
在 Amazon CLI 安装了的计算机上运行以下命令,将 c
lusterArn
替换为集群的 ARN。aws kafka get-bootstrap-brokers --cluster-arn
clusterARN
成功结果如下所示。保存此结果,因为您需要在下一步中使用它。
{ "BootstrapBrokerStringTls": "a-1.example.g7oein.c2.kafka.us-east-1.amazonaws.com:0123,a-3.example.g7oein.c2.kafka.us-east-1.amazonaws.com:0123,a-2.example.g7oein.c2.kafka.us-east-1.amazonaws.com:0123" }
-
运行以下命令,在客户端计算机上创建控制台生成器。
BootstrapBrokerStringTls
用您在上一步中获得的值替换。保持运行此生成器命令。<path-to-your-kafka-installation>
/bin/kafka-console-producer.sh --broker-listBootstrapBrokerStringTls
--producer.config client.properties --topic TLSTestTopic -
打开新的命令窗口并连接到同一台客户端计算机。然后,运行以下命令以创建控制台使用器。
<path-to-your-kafka-installation>
/bin/kafka-console-consumer.sh --bootstrap-serverBootstrapBrokerStringTls
--consumer.config client.properties --topic TLSTestTopic -
在生成器窗口中,输入文本消息后点击回车键,并在使用器窗口中查找相同消息。Amazon MSK 对传输中的此消息进行了加密。
有关配置 Apache Kafka 客户端以使用加密数据的更多信息,请参阅配置 Kafka 客户端