本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS Secrets Manager 登入認證
您可以使用 AWS Secrets Manager 儲存和保護登入資料來控制對 Amazon MSK 叢集的存取。將使用者憑證儲存在 Secrets Manager 中,可減少叢集身分驗證 (例如稽核、更新和輪換憑證) 的額外負荷。Secrets Manager 也可讓您跨叢集共用使用者憑證。
運作方式
Amazon 的登入憑證身份驗證MSK使用SASL/SCRAM(簡單身份驗證和安全層/鹽漬挑戰回應機制)身份驗證。若要設定叢集的登入憑證身分驗證,您可以在 AWS Secrets Manager 中建立秘密資源,並將登入憑證與該秘密建立關聯。
SASL/SCRAM是在 RFC5802
注意
為叢集設定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 或ARN
kms-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驗證的叢集,以及如何從範例主題產生和使用。
在已 AWS CLI安裝的電腦上執行下列命令,取代
clusterARN
與您ARN的叢集。aws kafka get-bootstrap-brokers --cluster-arn clusterARN
若要建立範例主題,請執行下列命令,取代
BootstrapServerString
使用您在上一個步驟中取得的其中一個 Broker 端點。<path-to-your-kafka-installation>
/bin/kafka-topics.sh --create --bootstrap-server BootstrapServerString --replication-factor 3 --partitions 1 --topic ExampleTopicName在用戶端電腦上,建立一個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
檔案中。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 在安裝 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使用以下命令擷取引導代理程式字符串。Replace (取代)
ClusterArn
使用您的群集的 Amazon 資源名稱(ARN):aws kafka get-bootstrap-brokers --cluster-arn
ClusterArn
從命令的JSON結果中,儲存與名為的字串相關聯的值
BootstrapBrokerStringSaslScram
。若要產生資料到您建立的範例主題,請在用戶端機器上執行下列命令。Replace (取代)
BootstrapBrokerStringSaslScram
使用您在上一個步驟中擷取的值。<path-to-your-kafka-installation>
/bin/kafka-console-producer.sh --broker-listBootstrapBrokerStringSaslScram
--topicExampleTopicName
--producer.config client_sasl.properties若要從您建立的主題取用資料,請在用戶端機器上執行下列命令。Replace (取代)
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,請參閱阿帕奇·卡夫卡 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 區域。