データ暗号化

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

  • 鍵管理システム(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、キャッシュの暗号化には、適切な形式の Base-64 エンコード鍵が必要です。これらの目的のいずれかに使用する鍵は、次の手順で 16、24、32 バイトの文字列を Base64 でエンコードする必要があります。

次の例のコマンドでは、ランダム生成の適切な 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