Set up a client to use authentication
This process describes how to set up an Amazon EC2 instance to use as a client to use authentication.
This process describes how to produce and consume messages using authentication by creating a client machine, creating a topic, and configuring the required security settings.
-
Create an Amazon EC2 instance to use as a client machine. For simplicity, create this instance in the same VPC you used for the cluster. See Step 3: Create a client machine for an example of how to create such a client machine.
-
Create a topic. For an example, see the instructions under Step 4: Create a topic in the Amazon MSK cluster.
-
On a machine where you have the Amazon CLI installed, run the following command to get the bootstrap brokers of the cluster. Replace
Cluster-ARNwith the ARN of your cluster.aws kafka get-bootstrap-brokers --cluster-arnCluster-ARNSave the string associated with
BootstrapBrokerStringTlsin the response. -
On your client machine, run the following command to use the JVM trust store to create your client trust store. If your JVM path is different, adjust the command accordingly.
cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64/jre/lib/security/cacerts kafka.client.truststore.jks -
On your client machine, run the following command to create a private key for your client. Replace
Distinguished-Name,Example-Alias,Your-Store-Pass, andYour-Key-Passwith strings of your choice.keytool -genkey -keystore kafka.client.keystore.jks -validity 300 -storepassYour-Store-Pass-keypassYour-Key-Pass-dname "CN=Distinguished-Name" -aliasExample-Alias-storetype pkcs12 -keyalg rsa -
On your client machine, run the following command to create a certificate request with the private key you created in the previous step.
keytool -keystore kafka.client.keystore.jks -certreq -file client-cert-sign-request -aliasExample-Alias-storepassYour-Store-Pass-keypassYour-Key-Pass -
Open the
client-cert-sign-requestfile and ensure that it starts with-----BEGIN CERTIFICATE REQUEST-----and ends with-----END CERTIFICATE REQUEST-----. If it starts with-----BEGIN NEW CERTIFICATE REQUEST-----, delete the wordNEW(and the single space that follows it) from the beginning and the end of the file. -
On a machine where you have the Amazon CLI installed, run the following command to sign your certificate request. Replace
Private-CA-ARNwith the ARN of your PCA. You can change the validity value if you want. Here we use 300 as an example.aws acm-pca issue-certificate --certificate-authority-arnPrivate-CA-ARN--csr fileb://client-cert-sign-request --signing-algorithm "SHA256WITHRSA" --validity Value=300,Type="DAYS"Save the certificate ARN provided in the response.
Note
To retrieve your client certificate, use the
acm-pca get-certificatecommand and specify your certificate ARN. For more information, see get-certificatein the Amazon CLI Command Reference. -
Run the following command to get the certificate that Amazon Private CA signed for you. Replace
Certificate-ARNwith the ARN you obtained from the response to the previous command.aws acm-pca get-certificate --certificate-authority-arnPrivate-CA-ARN--certificate-arnCertificate-ARN -
From the JSON result of running the previous command, copy the strings associated with
CertificateandCertificateChain. Paste these two strings in a new file named signed-certificate-from-acm. Paste the string associated withCertificatefirst, followed by the string associated withCertificateChain. Replace the\ncharacters with new lines. The following is the structure of the file after you paste the certificate and certificate chain in it.-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -
Run the following command on the client machine to add this certificate to your keystore so you can present it when you talk to the MSK brokers.
keytool -keystore kafka.client.keystore.jks -import -file signed-certificate-from-acm -aliasExample-Alias-storepassYour-Store-Pass-keypassYour-Key-Pass -
Create a file named
client.propertieswith the following contents. Adjust the truststore and keystore locations to the paths where you savedkafka.client.truststore.jks. Substitute your Kafka client version for the{YOUR KAFKA VERSION}placeholders.security.protocol=SSL ssl.truststore.location=/tmp/kafka_2.12-{YOUR KAFKA VERSION}/kafka.client.truststore.jks ssl.keystore.location=/tmp/kafka_2.12-{YOUR KAFKA VERSION}/kafka.client.keystore.jks ssl.keystore.password=Your-Store-Passssl.key.password=Your-Key-Pass