データ暗号化

デフォルトでは、次のデータは暗号化された状態でハイブリッド ランタイム プレーンに保存されます。

  • 鍵管理システム(KMS)データ
  • Key-Value マップ(KVM)データ
  • キャッシュ データ

データ暗号化のために、ユーザーが特別な構成を行う必要はありません。ただし、なんらかの理由で(デフォルトの鍵の代わりに)独自の暗号鍵を使用したい場合は、このトピックの説明に従ってください。

暗号鍵のスコープ

KMS、KVM、キャッシュの暗号鍵にはスコープがあります。たとえば、KMS 鍵のスコープは「組織」です。つまり、鍵は組織全体での KMS データの暗号化に使用されます。次の表に、各タイプの鍵のスコープを示します。

暗号鍵 スコープ
KMS 組織のみ
KVM 組織または環境

KVM ポリシーによって apiproxy または policy(API プロキシ リビジョン)のスコープが指定されている場合、データの暗号化には組織レベルの鍵が使用されます。Apigee Edge で KVM がどのように使用されるかについては、Key-Value マップの使い方をご覧ください。

キャッシュ 環境のみ

デフォルトの暗号鍵について

デフォルトでは、Apigee ハイブリッドは KVM、KMS、キャッシュ データの暗号化に使用される Base64 エンコード鍵のセットを提供します。Apigee ハイブリッド インストーラはランタイム プレーンに鍵を Kubernetes Secret として保存し、AES-128 標準暗号化を使用してデータを暗号化するときにこれらの鍵を使用します。これらの鍵はユーザーの管理下にあります。つまり、ハイブリッド管理プレーンがこれらの鍵を認識することは決してありません。

デフォルトの暗号鍵の変更

必要に応じてデフォルトの暗号鍵を変更できます。ただしこの操作は必須ではありません。1 つ以上のデフォルトの鍵を置き換える手順は次のとおりです。

  1. 次のスタンザをオーバーライド ファイルにコピーします。この構成では、組織レベルで KMS および KVM の暗号鍵を変更でき、環境レベルで KVM、キャッシュの暗号鍵を変更できます。
    defaults:
      org:
        kmsEncryptionKey: base64-encoded-key
        kvmEncryptionKey: base64-encoded-key
      env:
        kvmEncryptionKey: base64-encoded-key
        cacheEncryptionKey: base64-encoded-key
  2. 置き換える鍵ごとに新しい鍵を生成します。各鍵は、16、24、または 32 バイト長の Base64 エンコード文字列である必要があります。エンコードされた鍵を作成する方法もご覧ください。
  3. デフォルトの鍵を新しい鍵に置き換えます。この例では、デフォルトの鍵はすべて以下の鍵に置き換えられます。
    defaults:
      org:
        kmsEncryptionKey: "JVpTb1FwI0otUHo2RUdRN3pnVyQqVGlMSEFAJXYmb1c="
        kvmEncryptionKey: "T3VkRGM1U3cpOFgtNk9fMnNZU2NaSVA3I1BtZWxkaUU="
      env:
        kvmEncryptionKey: "Q3h6M3R6OWdBeipxTURfKjQwQVdtTng2dU5mODFHcyE="
        cacheEncryptionKey: "b2NTVXdKKjBzN0NORF9XSm9tWFlYKGJ6NUhpNystJVI="
  4. オーバーライド ファイルをクラスタに適用します。

下位互換性に関する注意事項

Apigee ハイブリッドを初めてインストールするときにオーバーライド ファイルから暗号鍵を削除すると、暗号化が実質的に無効になり、値は暗号化されていない状態で保存されます。インストール後に鍵を提供して暗号化を有効にした場合、既存のデータは非暗号化状態のままですが、その後追加されたデータは暗号化されます。システムは引き続き、暗号化されていないデータと新しい暗号化データを通常の方法で処理します。

また、ランタイム データの暗号化後には暗号鍵を変更できないことにも注意してください。

エンコードされた鍵を作成する方法

KVM、KMS、キャッシュの暗号化には、適切な形式の Base64 エンコード鍵が必要です。この目的で使用される鍵は、16、24、または 32 バイト長の Base-64 エンコード鍵でなければなりません。

次の例のコマンドでは、ランダム生成の適切な 32 文字の Base64 エンコード文字列が生成されます。この文字列には、印刷できない文字は含まれていません。

LC_ALL=C tr -dc A-Za-z0-9_\!\@\#\$\%\^\&\*\(\)\\-+= < /dev/urandom | head -c 32  | openssl base64
PSFvX0BPc1Z2NVklcXdxcF8xR0N4MV4temFveStITU4=

または

LC_ALL=C tr -dc "[:print:]" < /dev/urandom | head -c 32 | openssl base64