秘密鍵の暗号化を有効にする

このドキュメントでは、Cassandra データベースに保存されている デベロッパー アプリのコンシューマ シークレット(クライアント認証情報)の暗号化を有効にする方法について説明します。

概要

従来、Apigee Edge for Private Cloud では、Key-Value マップ (KVM)データと OAuth アクセス トークンのオプションの暗号化が提供されていました。

次の表に、Apigee for プライベート クラウド での保存データの暗号化オプションを示します。

エンティティ デフォルトで有効になっている暗号化 オプションで利用可能な暗号化 関連ドキュメント
KVM × はい 暗号化された KVM についてをご覧ください。
OAuth アクセス トークン × はい セキュリティ強化のためのトークンのハッシュ化をご覧ください。
デベロッパー アプリのコンシューマ シークレット × はい 有効にするには、このドキュメントの手順に沿って構成します。

クライアント認証情報の暗号化を有効にするには、 すべての Message Processor ノードと管理サーバー ノードで次のタスクを行う必要があります。

  • 鍵暗号鍵 (KEK)を保存するキーストアを作成します。Apigee は、この暗号化された鍵を使用して、データの暗号化に必要な秘密鍵を暗号化します。
  • すべての管理サーバー ノードと Message Processor ノードで構成プロパティを編集します。
  • 鍵の作成をトリガーするデベロッパー アプリを作成します。
  • ノードを再起動します。

これらのタスクについては、このドキュメントで説明します。

鍵 暗号化機能について

このドキュメントの手順では、KEK 機能を有効にする方法について説明します。この機能を使用すると、デベロッパー アプリのコンシューマ シークレットを暗号化するために使用される 秘密鍵を、Cassandra データベースに保存するときに暗号化できます。

デフォルトでは、データベース内の既存の値は変更されず(書式なしテキストのまま)、これまでどおり機能します。

暗号化されていないエンティティに対して書き込みオペレーションを実行すると、 オペレーションの保存時に暗号化されます。たとえば、暗号化されていないトークンを取り消して後で承認すると 、新しく承認されたトークンは暗号化されます。

鍵を安全に保管する

KEK が保存されているキーストアのコピー は、必ず安全な場所に保管してください。独自の安全なメカニズムを使用してキーストアのコピーを保存することをおすすめします。このドキュメントの手順で説明するように、 ローカル構成ファイルが参照できる各 Message Processor ノードと管理サーバー ノードにキーストアを配置する必要があります。 また、安全に保管してバックアップとして使用するために、キーストアのコピーを別の場所に保存することも重要です。

鍵の暗号化を有効にする

コンシューマ シークレット鍵の暗号化を行う手順は次のとおりです。

前提条件

このドキュメントの手順を行うには、次の要件を満たしている必要があります。

  • Apigee Edge for Private Cloud 4.50.00.10 以降をインストールまたはアップグレードする必要があります。
  • Apigee Edge for Private Cloud の管理者である必要があります。

ステップ 1: キーストアを生成する

鍵暗号鍵(KEK)を保持するキーストアを作成する手順は次のとおりです。

  1. 次のコマンドを実行して、KEK の暗号化に使用する鍵を保存するキーストアを生成します。コマンドは表示されているとおりに入力してください(キーストア名には任意の名前を指定できます)。
    keytool -genseckey -alias KEYSTORE_NAME -keyalg AES -keysize 256 \
    -keystore kekstore.p12 -storetype PKCS12

    プロンプトが表示されたら、パスワードを入力します。このパスワードは、後のセクションで管理サーバーと Message Processor を構成するときに使用します。

    このコマンドは、kekstore.p12 キーストア ファイルを生成します。このファイルには、 エイリアス KEYSTORE_NAME の鍵が含まれています。

  2. (省略可)次のコマンドを使用して、ファイルが正しく生成されたことを確認します。ファイル が正しい場合、コマンドはエイリアス KEYSTORE_NAME の鍵を返します:
    keytool -list -keystore kekstore.p12

ステップ 2: 管理サーバーを構成する

次に、管理サーバーを構成します。複数のノードに管理サーバーがインストールされている場合は、 各ノードでこの手順を繰り返す必要があります。

  1. ステップ 1 で生成したキーストア ファイルを、管理サーバー ノードのディレクトリ(/opt/apigee/customer/application など)にコピーします。例:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. ファイルが apigee ユーザーから読み取り可能であることを確認します。
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
    chmod 400 /opt/apigee/customer/application/kekstore.p12
  3. 次のプロパティを /opt/apigee/customer/application/management-server.properties に追加します。 ファイルが存在しない場合は作成します。プロパティ ファイルのリファレンスもご覧ください。
    conf_keymanagement_kmscred.encryption.enabled=true
    
    # Fallback is true to ensure your existing plaintext credentials continue to work
    conf_keymanagement_kmscred.encryption.allowFallback=true
    
    conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE
    conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME
    
    # These could alternately be set as environment variables. These variables should be
    # accessible to Apigee user during bootup of the Java process. If environment
    # variables are specified, you can skip the password configs below.
    # KMSCRED_ENCRYPTION_KEYSTORE_PASS=
    # KMSCRED_ENCRYPTION_KEK_PASS=
    See also Using environment variables for configuration properties.
    
    conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD
    conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD

    キーストアの生成に使用するツールによっては、KEK_PASSWORD が KEYSTORE_PASSWORD と同じになる場合があります。

  4. 次のコマンドを使用して管理サーバーを再起動します。
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server wait_for_ready

    管理サーバーの準備が完了すると、wait_for_ready コマンドは次のメッセージを返します。

    Checking if management-server is up: management-server is up.
  5. 複数のノードに管理サーバーがインストールされている場合は、各管理 サーバー ノードで上記の手順 1 ~ 4 を繰り返します。

ステップ 3: デベロッパー アプリを作成する

管理サーバーが更新されたので、クライアント認証情報データの暗号化に使用する鍵の生成をトリガーするデベロッパー アプリを作成する必要があります。

  1. データ暗号鍵(KEK)の作成をトリガーするデベロッパー アプリを作成します。手順については、 アプリを登録するをご覧ください。
  2. 必要に応じて、デベロッパー アプリを削除します。暗号鍵が生成されたら、保持する必要はありません。

ステップ 4: Message Processor を構成する

Message Processor で暗号化が有効になるまで、ランタイム リクエストは暗号化された認証情報を処理できません。

  1. ステップ 1 で生成したキーストア ファイルを、Message Processor ノードのディレクトリ(/opt/apigee/customer/application など)にコピーします。 例:
    cp certs/kekstore.p12 /opt/apigee/customer/application
  2. ファイルが apigee ユーザーから読み取り可能であることを確認します。
    chown apigee:apigee /opt/apigee/customer/application/kekstore.p12
  3. 次のプロパティを /opt/apigee/customer/application/message-processor.properties に追加します。 ファイルが存在しない場合は作成します。 プロパティ ファイルのリファレンスもご覧ください。
    conf_keymanagement_kmscred.encryption.enabled=true
    
    # Fallback is true to ensure your existing plaintext credentials continue to work
    conf_keymanagement_kmscred.encryption.allowFallback=true
    
    conf_keymanagement_kmscred.encryption.keystore.path=PATH_TO_KEYSTORE_FILE
    conf_keymanagement_kmscred.encryption.kek.alias=KEYSTORE_NAME
    
    # These could alternately be set as environment variables. These variables should be
    # accessible to Apigee user during bootup of the Java process. If environment
    # variables are specified, you can skip the password configs below.
    # KMSCRED_ENCRYPTION_KEYSTORE_PASS=
    # KMSCRED_ENCRYPTION_KEK_PASS=
    See also Using environment variables for configuration properties.
    
    
    conf_keymanagement_kmscred.encryption.keystore.pass=KEYSTORE_PASSWORD
    conf_keymanagement_kmscred.encryption.kek.pass=KEK_PASSWORD

    キーストアの生成に使用するツールによっては、KEK_PASSWORD が KEYSTORE_PASSWORD と同じになる場合があります。

  4. 次のコマンドを使用して Message Processor を再起動します。
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor wait_for_ready

    Message Processor がメッセージを処理する準備が整うと、wait_for_ready コマンドは次のメッセージを返します。

    Checking if message-processor is up: message-processor is up.
  5. 複数のノードに Message Processor がインストールされている場合は、各 Message Processor ノードで手順 1 ~ 4 を繰り返します。

概要

今後作成するデベロッパー アプリの認証情報シークレットは、Cassandra データベースに保存時に暗号化されます。

構成プロパティに 環境変数を使用する

環境変数を使用して、次の Message Processor と管理サーバーの構成 プロパティを設定することもできます。設定すると、環境変数は Message Processor または管理サーバーの構成ファイルで設定されたプロパティ をオーバーライドします。

conf_keymanagement_kmscred.encryption.keystore.pass=
conf_keymanagement_kmscred.encryption.kek.pass=

対応する環境変数は次のとおりです。

export KMSCRED_ENCRYPTION_KEYSTORE_PASS=KEYSTORE_PASSWORD
export KMSCRED_ENCRYPTION_KEK_PASS=KEK_PASSWORD

これらの環境変数を設定すると、Message Processor ノードと管理サーバー ノードの 構成ファイルからこれらの構成プロパティを省略できます。これらは無視されます:

conf_keymanagement_kmscred.encryption.keystore.pass
conf_keymanagement_kmscred.encryption.kek.pass

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

このセクションでは、このドキュメントで説明したように、すべての Message Processor ノードと管理サーバー ノードで設定する必要がある構成プロパティについて説明します。

プロパティ デフォルト 説明
conf_keymanagement_kmscred.encryption.enabled false 鍵の暗号化を有効にするには、true にする必要があります。
conf_keymanagement_kmscred.encryption.allowFallback false 既存の平文の認証情報が引き続き機能するように、allowFallback を true に設定します。
conf_keymanagement_kmscred.encryption.keystore.path なし Message Processor ノードまたは管理サーバー ノードの KEK キーストアへのパスを指定します。 ステップ 2: 管理サーバーを構成する、ステップ 3: Message Processor を構成するをご覧ください。
conf_keymanagement_kmscred.encryption.kek.alias なし KEK がキーストアに保存されるエイリアス。
conf_keymanagement_kmscred.encryption.keystore.pass なし 環境変数を使用してこれらのプロパティを設定する場合は省略可能です。構成プロパティに環境 変数を使用するもご覧ください 。
conf_keymanagement_kmscred.encryption.kek.pass なし 環境変数を使用してこれらのプロパティを設定する場合は省略可能です。構成プロパティに 環境変数を使用するもご覧ください 。