契約データの暗号化

管理プレーンからランタイム プレーンにダウンロードされる契約データは、デフォルトで暗号化されます。契約データには、ランタイム プレーンが API プロキシを処理するために必要なプロキシ バンドルやその他のデータが含まれます。以下に説明するように、このデータの暗号鍵をオーバーライド ファイルで提供する必要があります。

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

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

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

このトピックでは、KMS、KVM、キャッシュ データの暗号化を有効にする方法について説明します。

暗号鍵のスコープ

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

暗号鍵 スコープ
KMS 組織のみ
KVM 組織または環境
キャッシュ 環境のみ

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

ハイブリッドの初期インストール時に暗号鍵を提供しなかった場合、KMS、KVM、キャッシュのデータエントリはランタイム プレーンへの保存時に暗号化されません。インストール後に鍵を提供して暗号化を有効にした場合、既存のデータは非暗号化状態のままですが、その後追加されたデータは暗号化されます。システムは引き続き、暗号化されていないデータと新しい暗号化データを通常の方法で処理します。

KMS データの暗号化

組織に保存されているコンシューマ シークレットを暗号化できます。デフォルトでは、コンシューマ シークレットは暗号化されずに保存されます。コンシューマ シークレットを暗号化するには、オーバーライド ファイルに kmsEncryptionKey プロパティを追加し、長さ 16、24、または 32 バイトの文字列を Base64 でエンコードしたものを指定します。コンシューマ シークレットは、KMS データの中で唯一暗号化できるデータです。その他すべての KMS データは暗号化されずに保存されます。

KMS 暗号鍵のスコープ

KMS 暗号鍵のスコープは「組織」です。つまり、この鍵はある組織内に存在するすべてのコンシューマ シークレットの暗号化に使用されます。

KMS の暗号化を有効にする

KMS の暗号化を有効にするには、以下に説明するように、長さ 16、24、または 32 バイトの文字列を Base64 でエンコードしたものを暗号鍵としてオーバーライド ファイルに追加する必要があります。

ハイブリッドをインストールした後に鍵を追加または変更する場合は、その変更を適用するために runtimemart の両方のコンポーネントを再作成する必要があります。

  1. Base64 でエンコードされた鍵を作成します。詳細については、エンコードされた鍵の作成方法をご覧ください。
  2. 次のように、エンコードされた鍵をオーバーライド ファイルに追加します。kmsEncryptionKey プロパティは組織スコープのプロパティです。YAML ファイルでは、これは最上位エンティティになるため、インデントしないでください。
    org: hybrid
    
    kmsEncryptionKey: YXo0UyRuRSg1dUVnPTU7Rwo=
    ...
  3. kvmEncryptionKey プロパティを追加した後、apigeectl apply を使用して変更をクラスタに適用します。

KVM の暗号化

デフォルトでは、KVM データは暗号化されずに保存されます。これを暗号化するには、オーバーライド ファイルに kvmEncryptionKey プロパティを追加し、長さ 16、24、または 32 バイトの文字列を Base64 でエンコードしたものを指定する必要があります。Apigee Edge で KVM がどのように使用されるかについては、Key-Value マップの使い方をご覧ください。

KVM 暗号鍵のスコープ

KVM データの暗号化に使用される鍵は、KVM のスコープで保存されます。たとえば、組織内のすべての KVM データを 1 つの鍵で暗号化するには、組織レベルでその鍵を保存します。環境スコープの KVM のデータを暗号化するには、以下に説明するように、環境内にその鍵を保存します。

KVM の暗号化を有効にする

KVM の暗号化を有効にするには、以下に説明するように、長さ 16、24、または 32 バイトの文字列を Base64 でエンコードしたものを暗号鍵としてオーバーライド ファイルに追加する必要があります。KVM の暗号鍵は組織または環境スコープで追加できます。

ハイブリッドをインストールした後に鍵を追加または変更する場合は、その変更を適用するために runtimemart の両方のコンポーネントを再作成する必要があります。

  1. Base64 でエンコードされた鍵を作成します。詳細については、エンコードされた鍵の作成方法をご覧ください。
  2. 次のように、エンコードされた鍵をオーバーライド ファイルに追加します。kvmEncryptionKey プロパティは組織または環境スコープで指定できます。

    組織レベルの例: 次の例では、KVM 暗号鍵を組織レベルで追加しています。kvmEncryptionKey プロパティはインデントされていないことに注意してください。

    org: hybrid
    
    kvmEncryptionKey: YXo0UyRuRSg1dUVnPTU7Rwo=
    ...

    環境レベルの例: 環境スコープで KVM の暗号化を有効にするには、オーバーライド ファイル内の環境の定義(すなわち、envs の下)に kvmEncryptionKey プロパティを追加します。環境が複数ある場合は、各環境に固有の鍵を指定します。次に例を示します。

    envs:
      - name: test
        sslCertPath: /Users/myhome/ingress.crt
        sslKeyPath: /Users/myhome/ingress.key
    
        # hostAlias: "foo-test.mydomain.net"       # Deprecated.
    
        hostAliases:                # v1.2.0 and later: Use this element instead of hostAlias
          "foo-test.mydomain.net"
    
        kvmEncryptionKey: YXo0UyRuRSg1dUVnPTU7Rwo=
      - name: prod
        sslCertPath: /Users/myhome/ingress.crt
        sslKeyPath: /Users/myhome/ingress.key
    
        # hostAlias: "foo-prod.mydomain.net"       # Deprecated.
    
        hostAliases:                # v1.2.0 and later: Use this element instead of hostAlias
          "foo-prod.mydomain.net"
    
        kvmEncryptionKey: ekt5U3YkQFpje0d1KVg5Iwo=

  3. kvmEncryptionKey プロパティを追加した後、apigeectl apply を使用して変更をクラスタに適用します。

キャッシュの暗号化

キャッシュ暗号鍵のスコープ

キャッシュ データの暗号化に使用される鍵は常に環境スコープで保存されます。ある環境にデプロイされたすべてのプロキシは、同じ鍵を使用してキャッシュ データを暗号化します。

キャッシュの暗号化を有効にする

キャッシュの暗号化を有効にするには、以下に説明するように、長さ 16、24、または 32 バイトの文字列を Base64 でエンコードしたものを暗号鍵としてオーバーライド ファイルに追加する必要があります。

ハイブリッドをインストールした後に鍵を追加または変更する場合は、その変更を適用するために runtimemart の両方のコンポーネントを再作成する必要があります。

  1. Base64 でエンコードされた鍵を作成します。詳細については、エンコードされた鍵の作成方法をご覧ください。
  2. 次のように、エンコードされた鍵をオーバーライド ファイルに追加します。cacheEncryptionKey プロパティは環境スコープにする(envs の下に配置する)必要があります。環境が複数ある場合は、各環境に固有の鍵を指定します。例:
    envs:
      - name: test
        sslCertPath: /Users/myhome/ingress.crt
        sslKeyPath: /Users/myhome/ingress.key
    
        # hostAlias: "foo-test.mydomain.net"       # Deprecated.
    
        hostAliases:                # v1.2.0 and later: Use this element instead of hostAlias
          "foo-test.mydomain.net"
    
        cacheEncryptionKey: YXo0UyRuRSg1dUVnPTU7Rwo=
      - name: prod
        sslCertPath: /Users/myhome/ingress.crt
        sslKeyPath: /Users/myhome/ingress.key
    
        # hostAlias: "foo-prod.mydomain.net"       # Deprecated.
    
        hostAliases:                # v1.2.0 and later: Use this element instead of hostAlias
          "foo-prod.mydomain.net"
    
        cacheEncryptionKey: ekt5U3YkQFpje0d1KVg5Iwo=
  3. cacheEncryptionKey プロパティを追加した後、apigeectl apply を使用して変更をクラスタに適用します。

KMS データ(組織スコープ)を暗号化し、テスト環境で KVM データとキャッシュ データを暗号化します。

org: hybrid

kvmEncryptionKey: YXo0UyRuRSg1dUVnPTU7Rwo=

envs:
  - name: test
    sslCertPath: /Users/myhome/ingress.crt
    sslKeyPath: /Users/myhome/ingress.key

    # hostAlias: "foo-test.mydomain.net"       # Deprecated.

    hostAliases:                # v1.2.0 and later: Use this element instead of hostAlias
      "foo-test.mydomain.net"

    cacheEncryptionKey: YXo0UyRuRSg1dUVnPTU7Rwo=
    kvmEncryptionKey: YXo0UyRuRSg1dUVnPTU7Rwo=
    

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

KVM、KMS、キャッシュの暗号化には、適切な形式の Base64 エンコード鍵が必要です。契約暗号鍵を追加するで説明されているように、契約暗号化を構成する場合にも同じ形式の鍵が必要です。この目的に使用する鍵は、次の手順に従い、長さ 16、24、または 32 バイトの文字列を Base64 でエンコードして作成する必要があります。

  1. 長さが 16、24、または 32 バイトのランダムな文字列を作成します。たとえば、次のようなランダムに生成された 16 バイトの文字列を使用します。
    az4S$nE(5uEg=5;G
  2. この文字列をファイルに保存します。例:
    printf '%s' 'az4S$nE(5uEg=5;G' > mystring.txt
  3. この文字列を Base64 でエンコードします。例:
    openssl base64 -in mystring.txt -out my-key.txt
    cat my-key.txt
      YXo0UyRuRSg1dUVnPTU7Rwo=
  4. 作成された鍵を、オーバーライド ファイル内の KMS、KVM、キャッシュ、契約の暗号化構成で指定します。