翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Secrets Manager でのサインイン認証情報認証
AWS Secrets Manager を使用して保存および保護されるサインイン認証情報を使用して、Amazon MSK クラスターへのアクセスを制御できます。ユーザーの認証情報を Secrets Manager に保存すると、認証情報の監査、更新、ローテーションなど、クラスター認証のオーバーヘッドが削減されます。Secrets Manager を使用すると、クラスター間でユーザーの認証情報を共有することもできます。
このトピックには、次のセクションが含まれています。
仕組み
Amazon MSK のサインイン認証情報認証では、SASL/SCRAM (Simple Authentication and Security Layer/Salted Challenge Response Mechanism) 認証を使用します。クラスターのサインイン認証情報認証を設定するには、「AWS Secrets Manager」でシークレットリソースを作成し、サインイン認証情報をそのシークレットに関連付けます。
SASL/SCRAMは、RFC 5802
注記
クラスターに SASL/SCRAM 認証を設定すると、Amazon MSK はクライアントとブローカー間のすべてのトラフィックに対して TLS 暗号化をオンにします。
Amazon MSK クラスターの SASL/SCRAM 認証の設定
AWS Secrets Manager でシークレットを設定するには、Secrets Manager ユーザーガイドの「シークレットの作成と取得」チュートリアルに従います。 AWS
Amazon MSK クラスターのシークレットを作成するときは、次の要件に注意してください。
シークレットタイプには、他のタイプのシークレット (API キーなど) を選択します。
シークレット名は、プレフィックス AmazonMSK_ から始まる必要があります。
既存のカスタム AWS KMS キーを使用するか、シークレットの新しいカスタム AWS KMS キーを作成する必要があります。Secrets Manager は、デフォルトでシークレットのデフォルト AWS KMS キーを使用します。
重要
デフォルト AWS KMS キーで作成されたシークレットは、Amazon MSK クラスターでは使用できません。
[プレーンテキスト] オプションを使用してキーと値のペアを入力するには、サインイン認証情報データは次の形式である必要があります。
{ "username": "alice", "password": "alice-secret" }
シークレットの ARN (Amazon リソース名) 値をレコードします。
-
重要
「 クラスターの適切なサイズ設定: ブローカーあたりのパーティション数」で説明されている制限を超えるクラスターに Secrets Manager シークレットを関連付けることはできません。
を使用してシークレット AWS 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 認証を使用するクラスターにクライアントを接続する方法と、サンプルトピックのデータを生成したり消費したりする方法を示します。
AWS CLI がインストールされているマシンで次のコマンドを実行し、
clusterARN
をクラスターの ARN に置き換えます。aws kafka get-bootstrap-brokers --cluster-arn clusterARN
サンプルトピックを作成するには、次のコマンドを実行し、
BootstrapServer文字列
を前のステップで取得したブローカーエンドポイントの 1 つに置き換えます。<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
という名前のファイルを作成します。-
次のコマンドを使用して、JVM
cacerts
フォルダの JDK キーストアファイルを、前のステップで作成したkafka.client.truststore.jks
ファイルにコピーします。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次のコマンドを使用して、ブートストラップブローカーの文字列を取得します。をクラスターの Amazon リソースネーム (ARN)
ClusterArn
に置き換えます。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 コンソールで [プレーンテキスト] オプションを使用する場合は、サインイン認証情報データを次の形式で指定する必要があります。
{ "username": "alice", "password": "alice-secret" }
ユーザーアクセスの取り消し:クラスターにアクセスするためのユーザーの認証情報を取り消すには、最初にクラスターの ACL を削除または適用してから、シークレットの関連付けを解除することをお勧めします。これは、次の理由によるものです。
ユーザーを削除しても既存の接続は閉じられません。
シークレットへの変更が反映されるまでに最大 10 分かかります。
Amazon MSK で ACL を使用する方法については、「Apache Kafka ACL」を参照してください。
ZooKeeper モードを使用するクラスターでは、 ZooKeeper ノードへのアクセスを制限して、ユーザーが ACLs を変更できないようにすることをお勧めします。詳細については、「Apache へのアクセスの制御 ZooKeeper」を参照してください。
制限事項
SCRAM シークレットを使用する場合は、次の制限に注意してください。
Amazon MSK は、SCRAM-SHA-512 認証のみをサポートします。
Amazon MSK クラスターには、最大 1000 人のユーザーを含めることができます。
シークレット AWS KMS key で を使用する必要があります。デフォルトの Secrets Manager 暗号化キーを使用するシークレットを Amazon MSK で使用することはできません。KMS キーの作成については、「対称暗号化 KMS キーの作成」を参照してください。
Secrets Manager で非対称 KMS キーを使用することはできません。
BatchAssociateScramSecret オペレーションを使用して、一度に最大 10 個のシークレットをクラスターに関連付けることができます。
Amazon MSK クラスターに関連付けられているシークレットの名前には、プレフィックス Amazon MSK_ が必要です。
Amazon MSK クラスターに関連付けられたシークレットは、クラスターと同じ Amazon Web Services アカウントと AWS リージョンに存在する必要があります。