シークレット管理

You can use Confluent Platform secrets to store and manage sensitive information, such as passwords and API tokens. Compliance requirements often dictate that services should not store sensitive data as clear text in files. This sensitive data can include passwords, such as the values for configuration parameters ssl.key.password, ssl.keystore.password, ssl.truststore.password, or any other sensitive data in configuration files or log files. Secrets are administered with the confluent secret commands.

confluent secret を実行すると、構成ファイルが変更され、シークレットプロバイダーから構成を取得するように構成解決システムに指示するコードが追加されます。暗号化されたシークレットを含む別ファイル(シークレットファイル)も作成されます。

シークレットでは "エンベロープ暗号化" が使用されます。これは、セキュアな手法で機密データを保護するための標準的な方法です。ユーザーが指定したマスターパスフレーズが、暗号化のソルト値とともに使用され、マスター暗号化キーが導出されます。このマスター暗号化キーは、個別のデータ暗号化キーを生成するために使用されます。

マスター暗号化キーとデータ暗号化キーは、構成ファイル内の機密データを暗号化するために使用されます。これらのキーは、後でサービスによって復号化できます。許可されていないユーザーが構成ファイルにアクセスしても、暗号化された値を見ることはできず、マスター暗号化キーが分からなければ復号化できません。

参考

シークレットの使用方法に関するチュートリアルについては、「チュートリアル: シークレットの保護」を参照してください。

シークレットで既存の Apache Kafka® セキュリティを拡張する方法

シークレットによって Apache Kafka® の保護機能を拡張でき、KIP-226 (ブローカー用)、KIP-297 (Connect 用)、および KIP-421 (外部コンポーネントの構成で指定されている変数の自動解決)で解説されています。

動的なブローカー構成のシークレット

以下のように、Apache Kafka® の動的なブローカー構成に対してシークレットによる保護(KIP-226)を使用できます。

  • キーストア構成は、必要な場合はすべて暗号化してファイルに保存できます。Kafka ブローカーは、パスワードの暗号化についてのみ、動的なブローカー構成の代わりにこのキーストア構成を使用できます。他のコンポーネントの場合と同様、このアプローチでは動的なアップデートは有効になりません。ZooKeeper は、このアプローチでは使用されません。
  • ブローカー用にのみパスワードを暗号化し、(SSL キーストアなどでは)動的なアップデートをサポートする必要があれば、シークレットによる新しい保護を伴わずに動的なブローカー構成を使用できます。このアプローチを使用する場合、暗号化されたパスワードは ZooKeeper に格納されます。
  • すべてのコンポーネントとブローカーの暗号化されたパスワードに対して共通ファイルを使用する場合は、ブローカーには動的な構成を使用する必要があります。この場合は、シークレットによる保護を KIP-226 と併用します。その際は、シークレットファイルと ZooKeeper の組み合わせが使用されます。

シークレットと構成変数

シークレットは、Connect (KIP-297)を含め、以下のように構成ファイルでの変数の保護を拡張できます(KIP-421)。

  • confluent secret コマンドを実行してシークレットを変数(タプル ${providerName:[path:]key} を使用し、providerName は ConfigProvider の名前、path はオプションの文字列、key は必須の文字列)と置き換えることによって、構成ファイルに保存されているシークレットを暗号化します。confluent secret を実行すると、復号化された実際の値を Kafka コンポーネントでフェッチするために必要な情報がすべて追加されます。シークレットは暗号化された形式で外部ファイルに保存されます。
  • 構成プロバイダー(KIP-421 で説明)を利用すると、起動時にすべてのコンポーネント(ブローカー、Connect、プロデューサー、コンシューマー、管理クライアントなど)が、非推奨のシークレットを外部ファイルから自動的にフェッチできます。
  • Kafka の動的構成 の暗号化にシークレットを使用する場合は、KIP-226 で説明されているように、AdminClient と kafka-configs.sh スクリプトを使用して構成を再読み込みする必要があります。

制限

Confluent のシークレットは、以下のファイルの暗号化には使用できません。

  • JAAS ファイル。また、JAAS 構成で参照されているファイルを暗号化することもできません。ただし、プロパティファイル内で宣言されている JAAS 構成パラメーターは暗号化できます。詳細については、「JAAS 構成パラメーターの暗号化」の例を参照してください。

  • password.properties ファイル(パスワードファイル内の認証情報を確認してユーザーを認証する Jetty PropertyFileLoginModule によって参照されます)

  • zookeeper.properties ファイル

  • 任意の librdkafka ベースのクライアント。librdkafka ベースのクライアントを暗号化するには、独自のソースライブラリ内にあるソリューションを使用する必要があります。

  • systemd の override.conf ファイル内のパスワード

  • 機密性の保持に Confluent CLI を使用する場合、暗号化するプロパティ値にバックスラッシュがエスケープされずに含まれていると、Error: properties: Line xxx: invalid unicode literal というエラーが発生します。xxx はバックスラッシュのある行です。

    Confluent Platform 構成ファイルに値を入力するときや Confluent CLI を使用するときは、バックスラッシュ文字をエスケープする必要があります。たとえば、パスワードプロパティの値が 1\o/-r@c6pD であり、有効なバックスラッシュ文字が含まれている場合、server.properties ファイルには 1\\o/-r@c6pD として入力する必要があります。

クイックスタート

前提条件
  1. security.properties ファイルを保管するためのディレクトリを作成します。以下に例を示します。

    mkdir /usr/secrets/
    
  2. パスフレーズに基づいてマスター暗号化キーを生成します。

    通常、パスフレーズはパスワードよりもずっと長く、単語を組み合わせた文字列として簡単に覚えることができます(Data in motion など)。パスフレーズは、コマンドラインから平文で指定するか、ファイルに保管することができます。ベストプラクティスは、このパスフレーズをファイルに入力してから CLI に渡すことです(--passphrase @<passphrase.txt> として指定)。ファイルを使用することで、ログ履歴にパスフレーズがプレーンテキストで表示される状況を回避できます。

    シークレットファイルの保存場所として、ローカルホスト上の場所を選択します(Confluent Platform サービスの実行場所ではありません)。シークレットファイルには、マスター暗号化キー、データ暗号化キー、構成パラメーターの暗号化済みシークレットが、暗号化に使用された暗号などのメタデータとともに含まれています。

    confluent secret master-key generate \
    --local-secrets-file /usr/secrets/security.properties  \
    --passphrase @<passphrase.txt>
    

    出力は以下のようになります。

    Save the master key. It cannot be retrieved later.
    +------------+----------------------------------------------+
    | Master Key | abC12DE+3fG45Hi67J8KlmnOpQr9s0Tuv+w1x2y3zab= |
    +------------+----------------------------------------------+
    
  3. マスターキーを保存します。後で取得することはできません。

  4. マスターキーを環境変数にエクスポートするか、bash スクリプトに追加します。

    重要

    環境変数が設定されていない場合、後続の confluent secret コマンドは失敗します。

    export CONFLUENT_SECURITY_MASTER_KEY=abC12DE+3fG45Hi67J8KlmnOpQr9s0Tuv+w1x2y3zab=
    
  5. 指定された構成パラメーターを暗号化します。

    このステップでは、--config-file で指定した構成ファイルに --config で指定されているプロパティを暗号化します。プロパティ値が構成ファイルから読み取られ、暗号化されて、--local-secrets-file で指定されているローカルシークレットファイルに書き込まれます。プロパティ値の代わりに、構成ファイルに指示を書き込むと、構成解決システムが実行時にシークレット値を取得できます。

    --remote-secrets-file で指定したファイルパスは、構成の指示に書き込まれます。この値により、実行時に解決システムがシークレットファイルを検出できる場所が特定されます。シークレットコマンドを一元的に実行して、シークレットファイルを各ノードに配布する場合は、シークレットファイルの最終的なパスを --remote-secrets-file に指定します。各ノードでシークレットコマンドを実行する場合、remote-secrets-file の値は、--local-secrets-file で指定されている場所に一致する必要があります。

    注釈

    --local-secrets-file フラグを使用して更新を指定すると、security.properties ファイルが変更されます。--local-secrets-file を指定する各ブローカーでは、security.properties ファイルを別の場所に保管して、その場所を --remote-secrets-file で指定することもできます。

    たとえば、ブローカーを暗号化する場合を考えます。

    • --local-secrets-file では、Confluent CLI が暗号化パラメーターを追加または変更するファイルを指定します。これにより、security.properties ファイルが変更されます。
    • --remote-secrets-file では、ブローカーが参照する security.properties ファイルの場所を指定します。

    --config フラグが指定されていない場合、文字列 password を含むプロパティはすべて、構成キーで暗号化されます。encrypt を実行するときは、コンマを使用して複数のキーを指定します(例: --config "config.storage.replication.factor,config.storage.topic")。add コマンドまたは update コマンドを使用する場合には、このオプションを使用できません。

    次の例のコマンドを使用して、パラメーター config.storage.replication.factor および config.storage.topic を暗号化します。

    confluent secret file encrypt --config-file /etc/kafka/connect-distributed.properties \
    --local-secrets-file /usr/secrets/security.properties \
    --remote-secrets-file /usr/secrets/security.properties \
    --config "config.storage.replication.factor,config.storage.topic"
    

    security.properties ファイルにも同様のエントリがあります。この例には、暗号化済みの config.storage.replication.factor パラメーターが示されています。

    config.storage.replication.factor = ${securepass:/usr/secrets/security.properties:connect-distributed.properties/config.storage.replication.factor}
    
  6. 暗号化された構成パラメーターを復号化します。

    confluent secret file decrypt \
    --local-secrets-file /usr/secrets/security.properties \
    --config-file /etc/kafka/connect-distributed.properties \
    --output-file decrypt.txt
    

    復号化されたパラメーターが表示されます。この例には、復号化済みの config.storage.replication.factor パラメーターが示されています。

    config.storage.replication.factor=1
    

ちなみに

security.properties ファイルの詳細については、「プロパティファイルリファレンス」を参照してください。

本稼働環境

このワークフローを実用化するには、オーケストレーションツールを拡張して、これを宛先のホストに配布します。これらのホストには、Kafka ブローカー、Connect ワーカー、Schema Registry インスタンス、ksqlDB サーバー、Control Center の他、パスワード暗号化を使用するあらゆるサービスが含まれます。confluent secret コマンドは、任意のシークレットディストリビューションモデルに合わせて柔軟に使用できます。シークレットの生成と構成の変更は、宛先の各ホストで直接行うことも、すべてを 1 つのホストで処理してから、シークレットデータを宛先のホストに配布することもできます。以下はシークレットデータを配布するタスクです。

  • 構成ファイルがパスワードで保護されているすべてのホスト環境に、マスター暗号化キーをエクスポートします。
  • シークレットファイルを配布: 作業中のローカルホストから宛先のホストの /path/to/security.properties に、シークレットファイル /path/to/security.properties をコピーします。
  • 必要な構成ファイルの変更を伝播: 構成パラメーターにシークレットのタプルが含まれるように、すべてのホストの構成ファイルをアップデートします。

使用例

confluent secret コマンドの使用例を以下に示します。

重要

Confluent CLI をインストールしておく必要があります。

ファイルからのリモート暗号化構成の追加

このコマンド では、新しい暗号化された構成パラメーター(--config)を指定されたファイル(--config-file)に追加します。暗号化されたシークレットは、ローカルシークレットファイル(--local-secrets-file)に保管されます。

ちなみに

各構成パラメーターを改行文字で区切ることにより、キーと値のペアを複数指定できます(例: --config "ssl.keystore.password = sslPassword \n ssl.truststore.password = password")。config group.id を含めて、キー/値ペアを含めなかった場合(空のリストを送信した場合)は、出力エラーが発生します。

confluent secret file add --config-file /etc/kafka/connect-distributed.properties \
--local-secrets-file /usr/secrets/security.properties \
--remote-secrets-file /usr/secrets/security.properties \
--config group.id=connect-cluster

このコマンドを実行した後、プロパティファイルは次のようになります。

group.id = ${securepass:/usr/secrets/security.properties:connect-distributed.properties/group.id}

シークレット構成でのプレフィックスの使用

シークレット config.providers は、client.* などのプレフィックスには伝播されません。このため、シークレットでプレフィックスを使用する場合は、config.providersconfig.providers.securepass.class を指定する必要があります。

client.config.providers=securepass
client.config.providers.securepass.class=io.confluent.kafka.security.config.provider.SecurePassConfigProvider

Control Center

セキュアな Control Center インスタンスと通信する各コンポーネントには、プレフィックスによって固有の構成が設定されている必要があります。Confluent Control Center シークレット構成の config.providersconfig.providers.securepass.class を構成する場合は、次のように指定します。

confluent.controlcenter.streams.client.config.providers=securepass
confluent.controlcenter.streams.client.config.providers.securepass.class=io.confluent.kafka.security.config.provider.SecurePassConfigProvider

Confluent Control Center が複数の Kafka クラスターと通信する場合は、次のように指定します。

confluent.controlcenter.kafka.<name>.client.config.providers=securepass
confluent.controlcenter.kafka.<name>.client.config.providers.securepass.class=io.confluent.kafka.security.config.provider.SecurePassConfigProvider

JAAS 構成パラメーターの暗号化

すべての Confluent Platform コンポーネントでは、組み込み JAAS 構成がサポートされており、これによって JAAS 構成を安全に指定できます。シークレットでも、組み込み JAAS 構成の使用がサポートされます。この構成方法により、シークレットの JAAS 構成のセキュリティレベルをより細かく設定できます。たとえば、組み込み JAAS 構成を使用する場合は、プロパティファイルを使用する場合のようにシークレットの JAAS 構成全体を暗号化するのではなく、パスワードのみを暗号化できます。この方法を使うと、シークレット構成の詳細はログに記録されますが、パスワードは記録されません。

シークレットでは、ブローカーの場合のような、実行時に渡される静的な JAAS の構成ファイルの使用がサポートされていません。

注釈

  • ZooKeeper クライアントの JAAS 構成は、機密性の保持でサポートされていません。
  • JAAS を暗号化するための Confluent CLI のシークレット暗号化コマンドを使用して、同じ JAAS 構成で複数のパスワードを暗号化することはできません。

JAAS 構成に対する操作を実行する前に、事前定義されたパスで構成キーを指定する必要があります(<entry name>/<LoginModule>/<key>)。

以下は、プロパティファイル(kafka/server.properties)内の JAAS 構成の例です。

sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required /
useKeyTab=false /
adminpassword=tempPass /
useTicketCache=true /
doNotPrompt=true;

注釈

adminpassword へのパスは、sasl.jaas.config/com.sun.security.auth.module.Krb5LoginModule/adminpassword のように指定できます

シークレットの JAAS 構成を暗号化、追加、またはアップデートするための標準 CLI 構文は次のとおりです。

confluent secret file encrypt --config-file
--local-secrets-file
--remote-secrets-file
–-config

encrypt は、実行する構成タスクに応じて add または update に置き換える必要があります。

この例では、シークレットの JAAS 構成でパスワードを暗号化するためのコマンドとオプションを示しています。

confluent secret file encrypt --config-file /etc/kafka/server.properties
--local-secrets-file /usr/secrets/security.properties
--remote-secrets-file /usr/secrets/security.properties
–-config sasl.jaas.config/com.sun.security.auth.module.Krb5LoginModule/adminpassword

この例では、パスワードを暗号化した新しいシークレットの JAAS 構成を追加するためのコマンドとオプションを示しています。

confluent secret file add --config-file /etc/kafka/server.properties
--local-secrets-file /usr/secrets/security.properties
--remote-secrets-file /usr/secrets/security.properties
–-config sasl.jaas.config/com.sun.security.auth.module.Krb5LoginModule/adminpassword

この例では、シークレットの JAAS 構成で暗号化されたパスワードをアップデートするためのコマンドとオプションを示しています。

confluent secret file update --config-file /etc/kafka/server.properties
--local-secrets-file /usr/secrets/security.properties
--remote-secrets-file /usr/secrets/security.properties
–-config sasl.jaas.config/com.sun.security.auth.module.Krb5LoginModule/adminpassword

前述のコマンドのいずれかを実行した後に表示される暗号化済みデータは、次のようになります。

_metadata.master_key.0.salt = 3B++ViaAMaSwOOnxYI2bbeCtvZXRV5mxEOfb2FO3DnU=
_metadata.symmetric_key.0.created_at = 2020-03-06 14:07:34.248521 -0700 MST m=+0.011810143
_metadata.symmetric_key.0.envvar = CONFLUENT_SECURITY_MASTER_KEY
_metadata.symmetric_key.0.length = 32
_metadata.symmetric_key.0.iterations = 1000
_metadata.symmetric_key.0.salt = 4aqTrl8kdnQdVbGwkbeQHUiLA235/RKGC8zOXTHwQaI=
_metadata.symmetric_key.0.enc = ENC[AES/GCM/NoPadding,data:bP93/lcsQVY5tzh4NWvD9tWO/yyTGwdAEgYHwpUokjiomma7QoH8X/jhlB7zibGd,iv:A7zk7hBwuataNy+ToT346w==,type:str]
server.properties/sasl.jaas.config/com.sun.security.auth.module.Krb5LoginModule/adminpassword = ENC[AES/GCM/NoPadding,data:KdjkpudhWKoVe+6G35OYDw==,iv:5MgMsMT1o8d1JlXE0966Bg==,type:str]

JSON 構成パラメーターの暗号化

シークレットでは、JSON 構成パラメーターの暗号化がサポートされます。

JSON 構成パラメーターに対する操作を実行する前に、構成キーを次のパスフォーマットで指定する必要があります。

{
    "name": "security configuration",
    "credentials": {
        "password": "password",
        "ssl.keystore.location": "/usr/ssl"
    }
}

パスは、次のように ssl.keystore.password に指定できます。

<entry-name>.<key> :
credentials.password
credentials.ssl\\.keystore\\.location

シークレットの JSON 構成を暗号化、追加、アップデート、または暗号化するための標準 CLI 構文は次のとおりです。

confluent secret file encrypt --config-file
--local-secrets-file
--remote-secrets-file
–-config

encrypt は、実行する構成タスクに応じて addupdate、または decrypt に置き換える必要があります。

この例では、シークレットの JSON 構成でパスワードを暗号化するためのコマンドとオプションを示しています。

./confluent secret file encrypt
--config-file /etc/kafka/sample.json
--local-secrets-file /usr/secrets/security.properties
--remote-secrets-file /usr/secrets/security.properties
--config credentials.password

注釈

JSON 構成の --config キーでは、パス構文を . で区切る必要があります。

この例では、パスワードを暗号化した新しいシークレットの JSON 構成を追加するためのコマンドとオプションを示しています。

./confluent secret file add
--config-file /etc/kafka/sample.json
--local-secrets-file /usr/secrets/security.properties
--remote-secrets-file /usr/secrets/security.properties
--config credentials.password

この例では、シークレットの JSON 構成で暗号化されたパスワードをアップデートするためのコマンドとオプションを示しています。

./confluent secret file update
--config-file /etc/kafka/sample.json
--local-secrets-file /usr/secrets/security.properties
--remote-secrets-file /usr/secrets/security.properties
--config credentials.password

前述のコマンドを実行した後に表示される暗号化済みデータは、次のようになります。

_metadata.master_key.0.salt = 3B++ViaAMaSwOOnxYI2bbeCtvZXRV5mxEOfb2FO3DnU=
_metadata.symmetric_key.0.created_at = 2020-03-06 14:07:34.248521 -0700 MST m=+0.011810143
_metadata.symmetric_key.0.envvar = CONFLUENT_SECURITY_MASTER_KEY
_metadata.symmetric_key.0.length = 32
_metadata.symmetric_key.0.iterations = 1000
_metadata.symmetric_key.0.salt = 4aqTrl8kdnQdVbGwkbeQHUiLA235/RKGC8zOXTHwQaI=
_metadata.symmetric_key.0.enc = ENC[AES/GCM/NoPadding,data:bP93/lcsQVY5tzh4NWvD9tWO/yyTGwdAEgYHwpUokjiomma7QoH8X/jhlB7zibGd,iv:A7zk7hBwuataNy+ToT346w==,type:str]
server.properties/sasl.jaas.config/com.sun.security.auth.module.Krb5LoginModule/adminpassword = ENC[AES/GCM/NoPadding,data:KdjkpudhWKoVe+6G35OYDw==,iv:5MgMsMT1o8d1JlXE0966Bg==,type:str]
sample.json/credentials.password = ENC[AES/GCM/NoPadding,data:4cCPvtf9Sgpf6amU358NDw==,iv:Aq/OmYfGIdbyw78LRe5gHQ==,type:str]

この例では、シークレットの JSON 構成でパスワードを復号化するためのコマンドとオプションを示しています。

./confluent secret file decrypt
--config-file /etc/kafka/sample.json
--local-secrets-file /usr/secrets/security.properties
--remote-secrets-file /usr/secrets/security.properties
--config credentials.password

キーのローテーション

キーは、単一のプロパティファイルを使用してローテーションすることを推奨します。

このコマンド は、マスターキーまたはデータキーをローテーションします。

  • マスターキー(--master-key)のローテーション: 新しいマスターキーを生成し、そのマスターキーでデータの再暗号化を行います。新しいマスターキーは、環境変数に保管されます。

    confluent secret file rotate --master-key \
    --local-secrets-file /usr/secrets/security.properties \
    -–passphrase @/User/bob/secret.properties
    --passphrase-new @/User/bob/secretNew.properties
    
  • データキー(--data-key)のローテーション: 新しいデータキーを生成し、そのデータキーでファイルの再暗号化を行います。

    confluent secret file rotate --data-key \
    --local-secrets-file /usr/secrets/security.properties \
    -–passphrase @/User/bob/secret.properties
    

Docker の構成

Confluent Platform のセキュリティを有効にする場合、シークレット(たとえば、認証情報、証明書、キータブ、Kerberos 構成)をコンテナーに渡す必要があります。イメージは、シークレットディレクトリで利用できる認証情報を使用してこれを処理します。シークレット用の Docker ボリュームはコンテナーによって指定されます。管理者は、必要なシークレットを含むホスト上のディレクトリに、そのボリュームをマッピングする必要があります。たとえば、ホストの /scripts/securitysecurities.properties ファイルがある場合、このディレクトリを Docker コンテナーの /secrets にマウントするには、次のように指定します。

volumes:
   - ./scripts/security:/secrets

Docker イメージで機密性の保持を構成するには、次の構成を手動で docker-compose.yml ファイルに追加する必要があります。

CONFLUENT_SECURITY_MASTER_KEY: <your-master-key>
<COMPONENT>_CONFIG_PROVIDERS: "securepass"
<COMPONENT>_CONFIG_PROVIDERS_SECUREPASS_CLASS: "io.confluent.kafka.security.config.provider.SecurePassConfigProvider"

<COMPONENT> は次のいずれかです。

  • KAFKA
  • KSQL
  • CONNECT
  • SCHEMA_REGISTRY
  • CONTROL_CENTER

Docker 構成オプションの詳細については、「Docker Configuration Parameters」を参照してください。

Kafka ブローカーの場合の構成は次のようになります。

CONFLUENT_SECURITY_MASTER_KEY: <your-master-key>
KAFKA_CONFIG_PROVIDERS: "securepass"
KAFKA_CONFIG_PROVIDERS_SECUREPASS_CLASS: "io.confluent.kafka.security.config.provider.SecurePassConfigProvider"

注釈

使用するシークレットごとに、その場所を指定する必要があります。たとえば、sasl.jaas.config ファイル内のセキュアシークレットを使用する場合、シークレットファイルが Docker コンテナーのパス /secrets/security.properties にボリュームマウントされていて、そのファイル内の server.properties/sasl.jass.config キーを使用するには、以下の構成を使用します。ここに示されているように、docker-compose.yml ファイルでは $ 文字を $$ としてエスケープする必要があることに注意してください。

KAFKA_SASL_JAAS_CONFIG: $${securepass:/secrets/security.properties:server.properties/sasl.jass.config}

コマンドのスクリプト化

stdin を使用するかファイルから読み込むことで、コマンドをスクリプト化できます。

  • stdin からパイプするには、ダッシュ(-)を使用します(例: --passphrase -)。
  • ファイルから読み込むには、@<path-to-file> を使用します(例: --passphrase @/User/bob/secret.properties)。
confluent secret master-key generate \
--local-secrets-file /usr/demo/security.properties \
--passphrase @/Users/user.name/tmp/demo/masterkey.properties
echo -e "demoMasterKey" | confluent secret master-key generate --local-secrets-file
/usr/demo/security.properties --passphrase -

破損したマスターキーの修正

マスターキーが破損した場合または紛失した場合は、プロパティファイル内で新しいパスワード(例: ssl.keystore.password)を作成し、暗号化された構成パラメーターに対する新しいマスターキーを生成する必要があります。次の例では、/etc/kafka/server.properties ファイルで ssl.keystore.password をアップデートします。

  1. プロパティファイル内で新しいパスワードを作成します。

    ssl.keystore.password=mynewpassword
    
  2. 新しいマスターキーを生成します。

    confluent secret master-key generate \
    --local-secrets-file <path-to-file>/security.properties  \
    --passphrase @/User/bob/secret.properties
    
  3. 新しいマスターキーで構成を暗号化します。

    confluent secret file encrypt --config-file /etc/kafka/server.properties  \
    --local-secrets-file <path-to-file>/security.properties \
    --remote-secrets-file <path-to-file> \
    --config ssl.keystore.password
    

プロパティファイルリファレンス

security.properties の内容は次のようになっています。

1_metadata.master_key.0.salt = HfCqzb0CSXSo/mEx2Oc0lUqY5hP3vGa/SayR5wxQogI=
2_metadata.symmetric_key.0.created_at = 2019-07-16 16:36:05.480926 -0700 PDT m=+0.006733395
3_metadata.symmetric_key.0.envvar = CONFLUENT_SECURITY_MASTER_KEY
4_metadata.symmetric_key.0.length = 32
5_metadata.symmetric_key.0.iterations = 1000
6_metadata.symmetric_key.0.salt = hCC00OJG2VzhHhLMB6hZSuE9KBKutMK8BxFhq8OUirg=
7_metadata.symmetric_key.0.enc = ENC[AES/GCM/NoPadding,data:TDSUb8f6IzUtgAffkQ8jZ55QU1sn+OTbvr2+FzX1bkjnrV4d6uwqtsTxzltiG8nO,iv:1ieTVqWxOC06rDcO9XQuOQ==,type:str]
8server.properties/ssl.keystore.password = ENC[AES/GCM/NoPadding,data:jOGowFcgq4q1MqcJEGWCsg==,iv:3iqk+FJAbnW7MOYEiPkyFA==,type:str]
  • 行 1: _metadata.master_key.0.salt は、マスターキーの生成に使用されたソルトです。
  • 行 2: _metadata.symmetric_key.0.created_at は、データキーが作成されたときのタイムスタンプです。
  • 行 3: _metadata.symmetric_key.0.envvar は、マスターキー環境変数です。
  • 行 4: _metadata.symmetric_key.0.length は、データキーの長さ(単位: バイト)です。
  • 行 5: _metadata.symmetric_key.0.iterations は、暗号化に使用された反復回数です。
  • 行 6: _metadata.symmetric_key.0.salt は、データキーの生成に使用されたソルトです。
  • 行 7: _metadata.symmetric_key.0.enc は、マスターキーを使用してキー:値フォーマットでラップされたデータキーです。その内容は、ENC[<アルゴリズム>,data:<データ>:,iv:<初期化ベクター>,type:<型>] です。使用されるアルゴリズムのフォーマットは次のとおりです。
    • 対称暗号化アルゴリズム: Advanced Encryption Standard(AES)
    • 暗号化モード: Cipher block chaining(CBC)
    • パディング方式: PKCS5Padding