Secret の常時暗号化の使用

Google Distributed Cloud バージョン 1.10 では、外部の KMS(鍵管理サービス)やその他の依存関係を必要とせずに Secret を暗号化できます。

Secret の常時暗号化を有効にする

Secret を常時暗号化するには、そのクラスタの etcd データベースに保存する前に、Secret を暗号化するために使用する暗号鍵を自動的に生成します。Secret は、すべての Secret の書き込み用に生成されたデータ暗号鍵(DEK)を使用して暗号化されます。この DEK は、AES-GCM モードで Secret オブジェクトを暗号化するために使用されます。次に DEK は鍵暗号鍵(KEK)で暗号化されます。暗号化アルゴリズムは A256GCM(256 ビット鍵を使用した AES GCM)です。

鍵バージョンは、現在使用されている鍵を示すバージョン番号です。

クラスタの作成後にシークレットの暗号化を有効にできます。

  • 管理クラスタの場合:

    1. 管理クラスタの構成ファイルを編集して、secretsEncryption セクションを追加します。

    2. gkectl update コマンドを実行します。

      gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG
  • ユーザー クラスタの場合は、次のコマンドを実行します。

    1. ユーザー クラスタの構成ファイルを編集して secretsEncryption セクションを追加します。

    2. gkectl update コマンドを実行します。

      gkectl update cluster --config USER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG

次のように置き換えます。

  • ADMIN_KUBECONFIG は、管理クラスタの kubeconfig ファイルのパスに置き換えます。
  • ADMIN_CLUSTER_CONFIG は、管理クラスタ構成ファイルのパスで置き換えます。
  • USER_CLUSTER_CONFIG は、ユーザー クラスタの構成ファイルのパスに置き換えます。

このセクションで説明する gkectl update コマンドは、対応するクラスタに対するその他の更新にも使用できます。

キーの保管

管理クラスタの暗号鍵は、管理クラスタのデータディスクに保存されます。このディスクは /opt/data の管理マスターマシンにマウントされ、暗号鍵は /opt/data/gke-k8s-kms-plugin/generatedkeys/ にあります。これらの鍵は、その鍵で使用される暗号化されたシークレットへのアクセスを維持するためにバックアップする必要があります。コントロール プレーンの VM ディスクが確実に保護されるように、ハイパーバイザで VM / ストレージの暗号化などの対応を有効にする必要があります。

鍵のローテーション

クラスタの既存の暗号鍵をローテーションするには、対応する管理クラスタの構成ファイル内またはユーザー クラスタの構成ファイル内の keyVersion を増分し、適切な gkectl update コマンドを実行します。これにより、新しいバージョン番号と一致する新しい鍵が作成され、各 Secret が再暗号化され、古い鍵が安全に消去されます。後続のすべての新しい Secret は、新しい暗号鍵を使用して暗号化されます。

Secret の常時暗号化を無効にする

既存のクラスタで Secret の暗号化を無効にするには、disabled: true フィールドを追加します。次に、対応する gkectl update コマンドを実行します。このアップデートにより、既存の各 Secret が復号され、各 Secret が書式なしテキストで保存されます。後続のすべての新しい Secret は、書式なしテキストで保存されます。

secretsEncryption:
  mode: GeneratedKey
  generatedKey:
    keyVersion: KEY_VERSION
    disabled: true