すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:KMS を使用した Kubernetes Secret の暗号化

最終更新日:Aug 26, 2026

ACK Pro クラスターでは、Key Management Service (KMS) のエンベロープ暗号化を使用して保管時の Secret を保護します。

前提条件

以下の条件を満たしていることを確認してください。

  • KMS キー: ACK Pro クラスターと同じリージョンに存在すること。サポートされるタイプ: デフォルト、ソフトウェア保護、ハードウェア保護。詳細については、「キーの使用開始」および「課金」をご参照ください。

  • 認可: Secret 暗号化を有効にするための認可が必要です。

制限事項

  • Secret 暗号化は、ACK Pro クラスターおよび ACK Serverless Pro クラスターでのみサポートされます。

  • Secret 暗号化を有効にした後、KMS API やコンソールからキーを無効化または削除しないでください。キーが使用できなくなると、API サーバーが Secret またはサービスアカウントオブジェクトを取得できなくなり、サービスが中断される可能性があります。

  • Secret の暗号化を無効にするには、クラスターの [基本情報] タブで [Secret の暗号化] をオフにします。

仕組み

ACK は、Kubernetes KMS プロバイダーとエンベロープ暗号化を使用して、etcd 内の Secret を保護します。Secret はデータ暗号化キー (DEK) で暗号化され、DEK は KMS 内のキー暗号化キー (KEK) で暗号化されます。プレーンテキストの DEK は、保護するデータと一緒に保存されることはありません。

暗号化:

  1. Secret を保存する際、API サーバーはランダムな DEK を生成し、それを使用して Secret を暗号化します。

  2. API サーバーは DEK を KMS に送信し、KMS は KMS キー (KEK) を使用して DEK を暗号化し、暗号化された DEK を返します。

  3. API サーバーは、暗号化された Secret と暗号化された DEK の両方を etcd に保存します。

復号化:

  1. API サーバーは KMS の Decrypt API を呼び出して DEK を復号化します。

  2. API サーバーはプレーンテキストの DEK を使用して Secret を復号化し、呼び出し元に返します。

詳細については、「KMS 暗号化プロバイダー」および「エンベロープ暗号化の使用」をご参照ください。

KMS v2

Kubernetes 1.31 以降、ACK Pro クラスターおよびは、保管時の暗号化にコミュニティの KMS v2 インターフェースを使用します。KMS v2 は、クラスター内でより多くの Secret インスタンスをサポートし、優れた暗号化および復号化パフォーマンスを提供します。KMS v2 の暗号化および復号化フローの詳細については、「KMS v2」をご参照ください。

KMS v1 インターフェースから KMS v2 インターフェースへのアップグレードについては、「保管時の Secret 暗号化で KMS v2 にアップグレードする方法」をご参照ください。

説明

Kubernetes コミュニティは、バージョン 1.27 で KMS v1 を非推奨とし、バージョン 1.29 ではデフォルトで v1 インターフェースを無効にしました。互換性を確保するため、ACK Pro クラスターおよびでは、KMS v1 フィーチャーゲートを設定することで v1 インターフェースを引き続き有効にしています。

Secret の保管時の暗号化の有効化

新規 ACK Pro クラスター

  1. ACK コンソールにログオンし、左側のナビゲーションペインで[クラスター]をクリックします。

  2. [クラスター] ページで、[クラスターテンプレート] をクリックします。[クラスターテンプレートの選択] ページで、プロフェッショナルマネージド Kubernetes クラスター を見つけ、[作成] をクリックします。

  3. [マネージド Kubernetes] タブで、[高度なオプションを表示] をクリックします。[シークレットの暗号化] セクションで、[キーの選択] を選択し、キーを選択します。他のパラメーターを設定し、[クラスターの作成] をクリックします。詳細については、「ACK Pro クラスターを作成する」をご参照ください。

    Secret encryption

警告

Secret 暗号化を有効にした後、KMS キーを無効化または削除しないでください。キーが使用できなくなると、API サーバーが Secret またはサービスアカウントオブジェクトを取得できなくなり、サービスが中断される可能性があります。

確認: ActionTrail コンソールにログオンします。 ナビゲーションウィンドウで [イベント詳細クエリ] をクリックします。 aliyuncsmanagedsecurityrole ロールからの暗号化および復号化操作が表示された場合、シークレットの暗号化は有効になっています。

既存の ACK Pro クラスター

  1. ACK コンソールにログインし、左側のナビゲーションペインで[クラスター]をクリックします。

  2. [Clusters] ページで、対象のクラスター名をクリックします。[Basic Information] タブをクリックします。[Security and Audit] セクションで、[Secret Encryption] を有効にします。承認を求められた場合は、[Go to RAM console] をクリックし、[Confirm Authorization Policy] をクリックします。

    RAM ユーザーまたはロールは、クラスターに対する管理者または運用エンジニアの RBAC ロールを持っている必要があります。AliyunCSManagedSecurityRole を割り当てるには、Alibaba Cloud アカウントまたは RAM 管理権限を持つ RAM ID でログインしてください。
  3. [シークレットの暗号化] ダイアログボックスで、キーを選択し、[OK] をクリックします。 使用できるキーがない場合は、KMS コンソールで [キーの作成] をクリックします。 「CMK の作成」をご参照ください。 クラスターのステータスが [更新中] から [実行中] に変更されると、シークレットの暗号化が有効になります。

警告

Secret 暗号化を有効にした後、KMS キーを無効化または削除しないでください。キーが使用できなくなると、API サーバーが Secret またはサービスアカウントオブジェクトを取得できなくなり、サービスが中断される可能性があります。

無効化:クラスター詳細ページの [セキュリティと監査] セクションで、[シークレットの暗号化] をオフにします。

キーのローテーション

KMS の自動キーローテーションでは、新しい Secret がローテーション後のキーで暗号化されます。既存の Secret は、明示的に再暗号化するまで元のキーで暗号化されたままです。

  • 手動による再暗号化: ローテーション完了後、既存のすべての Secret を新しいキーで再暗号化します。

kubectl get secrets --all-namespaces -o json | kubectl annotate --overwrite -f - encryption-key-rotation-time="$(date -u +'%Y-%m-%dT%H:%M:%S%z')"

自動キーローテーションの設定については、「キーローテーションの設定」をご参照ください。

よくある質問

保管時の Secret 暗号化で KMS v2 にアップグレードする方法

保管時の Secret 暗号化で KMS v2 を使用するには、ACK Pro クラスターまたはがバージョン 1.31 以降であることを確認してください。

  • クラスターで保管時の Secret 暗号化を有効にしていない場合は、「Secret の保管時の暗号化の有効化」を参照して有効にしてください。暗号化を有効にすると、クラスター内の Secret がディスクに書き込まれる際に KMS v2 API を使用して自動的に暗号化され、読み取り時に復号化されます。

  • クラスターで保管時の Secret 暗号化をすでに有効にしている場合は、オフピーク時に次のいずれかの方法を使用して暗号化キーをローテーションできます。

    • 方法 1: kubectl get secrets --all-namespaces -o json | kubectl replace -f - コマンドを実行します。このコマンドは、既存のすべての Secret を KMS v2 API を使用して再暗号化します。

    • 方法 2: ACK コンソールにログインします。クラスター情報 ページで、基本情報 タブに移動し、Secret ディスク書き込みの暗号化 を見つけてオフにします。このプロセスにより、ディスク上のすべての Secret のキーローテーションがトリガーされます。しばらくしてから、「Secret の保存時の暗号化を有効にする」をご参照のうえ、クラスターの暗号化を再度有効にします。暗号化が再度有効になると、クラスター内のすべての Secret は、KMS v2 API を使用して保存時に再暗号化されます。

Secret 暗号化を有効にした後、kubectl は暗号文を返しますか?

いいえ。Secret は etcd に暗号文として保存されます。kubectl でクエリされると、API サーバーは結果を返す前に復号化するため、kubectl は常にプレーンテキストを表示します。

既存の ACK Serverless Pro クラスターで、RAM ユーザーまたは RAM ロールが Secret 暗号化を有効化または無効化できないようにする方法

cs:UpdateKMSEncryption アクションに対する拒否ポリシーを RAM ユーザーまたはロールにアタッチしてください。詳細については、「カスタム RAM ポリシーの作成」をご参照ください。

{
    "Action": [
        "cs:UpdateKMSEncryption"
    ],
    "Effect": "Deny",
    "Resource": [
        "*"
    ]
}