使用 AWS Secrets Manager 登入認證 - Amazon Managed Streaming for Apache Kafka

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 AWS Secrets Manager 登入認證

您可以使用 AWS Secrets Manager 儲存和保護登入資料來控制對 Amazon MSK 叢集的存取。將使用者憑證儲存在 Secrets Manager 中,可減少叢集身分驗證 (例如稽核、更新和輪換憑證) 的額外負荷。Secrets Manager 也可讓您跨叢集共用使用者憑證。

運作方式

Amazon 的登入憑證身份驗證MSK使用SASL/SCRAM(簡單身份驗證和安全層/鹽漬挑戰回應機制)身份驗證。若要設定叢集的登入憑證身分驗證,您可以在 AWS Secrets Manager 中建立秘密資源,並將登入憑證與該秘密建立關聯。

SASL/SCRAM是在 RFC5802 中定義的。SCRAM使用安全的雜湊演算法,且不會在用戶端和伺服器之間傳輸純文字登入憑證。

注意

為叢集設定SASL/SCRAM身份驗證時,Amazon 會為用戶端和代理程式之間的所有流量MSK開啟TLS加密。

為Amazon MSK 集SASL群設定/身份SCRAM驗證

若要在 Secret Manager 中設定密碼,請遵循 AWS Secrets Manager 使用者指南中的〈建立和擷取AWS 密〉教學課程。

為 Amazon MSK 叢集建立密碼時,請注意以下要求:

  • 密碼類型選擇其他類型的密碼 (例如API金鑰)

  • 您的密碼名稱必須以前綴 Amazon MSK _ 開頭。

  • 您必須使用現有的自訂 AWS KMS 金鑰,或為密碼建立新的自訂 AWS KMS 金鑰。根據預設,Secrets Manager 會使用預設 AWS KMS 金鑰做為密碼。

    重要

    使用預設 AWS KMS 金鑰建立的密碼無法與 Amazon MSK 叢集搭配使用。

  • 您的登入憑證資料必須採用下列格式,才能使用純文字選項輸入鍵值對。

    { "username": "alice", "password": "alice-secret" }
  • 記錄您密碼的 ARN (Amazon 資源名稱) 值。

  • 重要

    您無法將 Secret Manager 秘密與超過 適當調整叢集大小:每個代理程式的分區數量 中所述限制的叢集建立關聯。

  • 如果您使 AWS CLI 用建立密碼,請指定金鑰 ID 或ARNkms-key-id參數。請勿指定別名。

  • 若要將密碼與叢集建立關聯,請使用 Amazon MSK 主控台或 BatchAssociateScramSecret操作。

    重要

    當您將密碼與叢集建立關聯時,Amazon 會將資源政策MSK附加至密碼,讓叢集能夠存取和讀取您定義的密碼值。您不應該修改此資源政策。這樣做可以防止您的叢集存取您的秘密。

    下列範例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" ] }

使用登入憑證連線至叢集

建立秘密並將其與叢集建立關聯後,即可將用戶端連線至叢集。下列範例步驟示範如何將用戶端連線至使用SASL/SCRAM驗證的叢集,以及如何從範例主題產生和使用。

  1. 在已 AWS CLI安裝的電腦上執行下列命令,取代 clusterARN 與您ARN的叢集。

    aws kafka get-bootstrap-brokers --cluster-arn clusterARN
  2. 若要建立範例主題,請執行下列命令,取代 BootstrapServerString 使用您在上一個步驟中取得的其中一個 Broker 端點。

    <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapServerString --replication-factor 3 --partitions 1 --topic ExampleTopicName
  3. 在用戶端電腦上,建立一個JAAS組態檔,其中包含儲存在密碼中的使用者認證。例如,為使用者 alice,建立一個名為 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. ./tmp 目錄中,建立名為 kafka.client.truststore.jks 的檔案。

  6. 使用以下指令將JDK金鑰存放區檔案從JVMcacerts資料夾複製到您在上一個步驟中建立的kafka.client.truststore.jks檔案中。Replace (取代) 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
  7. 在安裝 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
  8. 使用以下命令擷取引導代理程式字符串。Replace (取代) ClusterArn 使用您的群集的 Amazon 資源名稱(ARN):

    aws kafka get-bootstrap-brokers --cluster-arn ClusterArn

    從命令的JSON結果中,儲存與名為的字串相關聯的值BootstrapBrokerStringSaslScram

  9. 若要產生資料到您建立的範例主題,請在用戶端機器上執行下列命令。Replace (取代) BootstrapBrokerStringSaslScram 使用您在上一個步驟中擷取的值。

    <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
  10. 若要從您建立的主題取用資料,請在用戶端機器上執行下列命令。Replace (取代) BootstrapBrokerStringSaslScram 與您之前獲得的值。

    <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic ExampleTopicName --from-beginning --consumer.config client_sasl.properties

使用使用者

建立使用者:您可以在秘密中將使用者建立鍵值對。當您在 Secrets Manager 主控台中使用純文字選項時,您應該以下列格式指定登入憑證資料。

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

撤銷使用者存取權:若要撤銷使用者的認證以存取叢集,建議您先移除或強制執行叢集ACL上的認證,然後取消密碼的關聯。其原因如下:

  • 移除使用者並不會關閉現有的連線。

  • 對秘密等變更最多需要 10 分鐘的時間傳播。

如需ACL與 Amazon 搭配使用的相關資訊MSK,請參閱阿帕奇·卡夫卡 ACLs

對於使用 ZooKeeper 模式的叢集,建議您限制 ZooKeeper 節點的存取權限,以防止使用者修改ACLs。如需詳細資訊,請參閱控制對阿帕奇的存取 ZooKeeper

限制

使用SCRAM密碼時,請注意下列限制:

  • Amazon MSK 僅支持 SCRAM SHA -512 身份驗證。

  • 一個 Amazon MSK 叢集最多可以有 1000 個使用者。

  • 你必須使用你 AWS KMS key 的秘密。您無法在 Amazon 上使用使用預設秘密 Secrets Manager 加密金鑰的密碼MSK。如需建立金KMS鑰的相關資訊,請參閱建立對稱加密KMS金鑰

  • 您無法搭配 Secrets Manager 使用非對稱KMS金鑰。

  • 使用此 BatchAssociateScramSecret作業一次最多可以關聯 10 個密碼與叢集。

  • 與 Amazon MSK 叢集關聯的密碼名稱必須有前綴 Amazon MSK _

  • 與 Amazon MSK 叢集相關聯的機密必須與叢集位於相同的 Amazon Web Services 帳戶和 AWS 區域。