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 (Simple Authentication and Security Layer/Salted Challenge Response Mechanism) 認証を使用します。クラスターのサインイン認証情報認証を設定するには、「AWS Secrets Manager」でシークレットリソースを作成し、サインイン認証情報をそのシークレットに関連付けます。

SASL/SCRAMは、RFC 5802で定義されています。SCRAM は、セキュリティで保護されたハッシュアルゴリズムを使用し、クライアントとサーバー間でプレーンテキストのサインイン認証情報を送信しません。

注記

クラスターに 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 認証を使用するクラスターにクライアントを接続する方法と、サンプルトピックのデータを生成したり消費したりする方法を示します。

  1. AWS CLI がインストールされているマシンで次のコマンドを実行し、clusterARN をクラスターの ARN に置き換えます。

    aws kafka get-bootstrap-brokers --cluster-arn clusterARN
  2. サンプルトピックを作成するには、次のコマンドを実行し、BootstrapServer文字列を前のステップで取得したブローカーエンドポイントの 1 つに置き換えます。

    <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. 次のコマンドを使用して、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
  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. 次のコマンドを使用して、ブートストラップブローカーの文字列を取得します。をクラスターの Amazon リソースネーム (ARN) ClusterArnに置き換えます。

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

    コマンドの JSON 結果から、BootstrapBrokerStringSaslScram という名前の文字列に関連付けられた値を保存します。

  9. 作成したサンプルトピックにデータを生成するには、クライアントマシンで次のコマンドを実行します。BootstrapBrokerStringSaslScram を前のステップで取得した値に置き換えます。

    <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic ExampleTopicName --producer.config client_sasl.properties
  10. 作成したトピックからデータを消費するには、クライアントマシンで次のコマンドを実行します。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 分かかります。

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 リージョンに存在する必要があります。