メインコンテンツまでスキップ

k3s secrets-encrypt

K3sは、保存時のシークレット暗号化を有効にすることをサポートしています。詳細については、Secrets Encryptionを参照してください。

シークレット暗号化ツール

バージョンゲート

v1.21.8+k3s1から利用可能

K3sには、以下の自動制御を可能にするCLIツールsecrets-encryptが含まれています:

  • シークレット暗号化の無効化/有効化
  • 新しい暗号化キーの追加
  • 暗号化キーのローテーションと削除
  • シークレットの再暗号化
警告

暗号化キーのローテーションの適切な手順に従わないと、クラスターが永久に破損する可能性があります。慎重に進めてください。

新しい暗号化キーのローテーション(実験的)

バージョンゲート

v1.28.1+k3s1から利用可能。この新しいバージョンのツールは、現在ベータ版のK8s 自動設定リロードを利用しています。GAはv1.29.0で予定されています。

古いリリースについては、Encryption Key Rotation Classicを参照してください。

シングルサーバークラスターでシークレット暗号化キーをローテーションするには:

  1. フラグ--secrets-encryptionを使用してK3sサーバーを起動します。

    注記

    暗号化なしでK3sを起動し、後で有効にすることは現在サポートされていません。

  2. シークレット暗号化キーをローテーションします。

    k3s secrets-encrypt rotate-keys
  3. 再暗号化が完了するのを待ちます。サーバーログを監視するか、以下を待ちます:

    $ k3s secrets-encrypt status
    Encryption Status: Enabled
    Current Rotation Stage: reencrypt_finished

暗号化キーのローテーションクラシック

シングルサーバークラスターでシークレット暗号化キーをローテーションするには:

  1. フラグ--secrets-encryptionを使用してK3sサーバーを起動します。

    注記

    暗号化なしでK3sを起動し、後で有効にすることは現在サポートされていません。

  2. 準備します。

    k3s secrets-encrypt prepare
  3. 同じ引数でK3sサーバーを再起動します。K3sをサービスとして実行している場合:

    # systemdを使用している場合
    systemctl restart k3s
    # openrcを使用している場合
    rc-service k3s restart
  4. ローテーションします。

    k3s secrets-encrypt rotate
  5. 同じ引数でK3sサーバーを再起動します。

  6. 再暗号化します。

    備考

    K3sは1秒あたり約5つのシークレットを再暗号化します。
    シークレットの数が多いクラスターでは、再暗号化に数分かかることがあります。

    k3s secrets-encrypt reencrypt

シークレット暗号化の無効化/再有効化

--secrets-encryptionフラグを使用してサーバーを起動した後、シークレット暗号化を無効にすることができます。

シングルノードクラスターでシークレット暗号化を無効にするには:

  1. 無効化します。

    k3s secrets-encrypt disable
  2. 同じ引数でK3sサーバーを再起動します。K3sをサービスとして実行している場合:

    # systemdを使用している場合
    systemctl restart k3s
    # openrcを使用している場合
    rc-service k3s restart
  3. フラグを使用して再暗号化します。

    k3s secrets-encrypt reencrypt --force --skip

シングルノードクラスターでシークレット暗号化を再有効化するには:

  1. 有効化します。

    k3s secrets-encrypt enable
  2. 同じ引数でK3sサーバーを再起動します。

  3. フラグを使用して再暗号化します。

    k3s secrets-encrypt reencrypt --force --skip

シークレット暗号化のステータス

secrets-encryptツールには、ノード上のシークレット暗号化の現在のステータスに関する情報を表示するstatusコマンドが含まれています。

シングルサーバーノードでのコマンドの例:

$ k3s secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: start
Server Encryption Hashes: All hashes match

Active Key Type Name
------ -------- ----
* AES-CBC aescbckey

HAクラスターでの別の例、キーをローテーションした後、サーバーを再起動する前:

$ k3s secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: rotate
Server Encryption Hashes: hash does not match between node-1 and node-2

Active Key Type Name
------ -------- ----
* AES-CBC aescbckey-2021-12-10T22:54:38Z
AES-CBC aescbckey

各セクションの詳細は以下の通りです:

  • Encryption Status: ノード上でシークレット暗号化が無効か有効かを表示します。
  • Current Rotation Stage: ノード上の現在のローテーションステージを示します。
    ステージは:startpreparerotatereencrypt_requestreencrypt_activereencrypt_finishedです。
  • Server Encryption Hashes: HAクラスターに役立ちます。これは、すべてのサーバーがローカルファイルと同じステージにあるかどうかを示します。次のステージに進む前にサーバーの再起動が必要かどうかを確認するために使用できます。上記のHAの例では、node-1とnode-2のハッシュが異なり、現在同じ暗号化設定を持っていないことを示しています。サーバーを再起動すると、設定が同期されます。
  • Key Table: ノード上で見つかったシークレット暗号化キーに関する情報を要約します。
    • Active: "*"は、現在シークレット暗号化に使用されているキーを示します。アクティブなキーは、Kubernetesが新しいシークレットを暗号化するために使用します。
    • Key Type: このツールを使用するすべてのキーはAES-CBCタイプです。詳細はこちらを参照してください。
    • Name: 暗号化キーの名前。