Container Service for Kubernetes (ACK) Pro マネージドクラスターでは、Key Management Service (KMS) で作成されたキーを使用して Kubernetes Secrets を暗号化できます。このトピックでは、KMS によって管理されるキーを使用して、ACK Pro マネージドクラスターの Secrets を暗号化する方法について説明します。
前提条件
項目 | 説明 |
KMS キー | KMS コンソールで KMS キーが作成されます。キーは、ACK Pro マネージドクラスターが存在するリージョンに属しています。 ACK Pro マネージドクラスターは、デフォルトキー、ソフトウェア保護キー、およびハードウェア保護キーをサポートしています。 KMS のキー管理機能の詳細については、「キー管理の概要」をご参照ください。 KMS の課金については、「課金」をご参照ください。 重要 Secret の暗号化を有効にした後、KMS API または KMS コンソールを使用して、Secrets の暗号化と復号に使用されるキーを無効化または削除しないでください。そうしないと、API サーバーが使用できなくなり、Secrets またはサービスアカウントオブジェクトを取得できなくなります。その結果、サービスが中断されます。 |
クラスター ネットワーク ACL の構成 | Secret の暗号化を有効にすると、コントロールプレーンの KMS は、Alibaba Cloud KMS OpenAPI にアクセスして Secrets インスタンスの暗号化と復号を実行する必要があります。したがって、クラスターで使用されるセキュリティグループまたは VPC ネットワーク ACL のアウトバウンドルールで、Alibaba Cloud サービスの CIDR ブロック(100.64.0.0/10)へのアクセスが許可されていることを確認する必要があります。許可されていない場合、クラスター コントロールプレーンが使用できなくなる可能性があります。詳細については、「クラスターのセキュリティグループを構成する」をご参照ください。 |
権限付与 | アカウントタイプに基づいて、次の操作が実行されます。
|
Secret 暗号化の概要
Kubernetes Secrets は、アプリケーションのパスワード、Transport Layer Security (TLS) 証明書、Docker イメージをダウンロードするための認証情報など、機密データを保存および管理するために使用されます。 Kubernetes は、クラスターの etcd に Secrets を保存します。詳細については、「Secrets」をご参照ください。
ACK Pro マネージドクラスターでは、KMS で作成されたキーを使用して Secrets を暗号化できます。暗号化中は、Kubernetes の KMS プロバイダーメカニズムが使用されます。 KMS プロバイダーは、エンベロープ暗号化を使用して、etcd に保存されている Secrets を暗号化および復号します。 Secret の暗号化と復号の手順:
Kubernetes Secret を使用してパスワードを保存する場合、API サーバーはランダムなデータ暗号化キー (DEK) を生成して Secret を暗号化します。次に、API サーバーは DEK を KMS に送信します。 KMS は、指定されたキーを使用して DEK を暗号化し、暗号化された DEK を API サーバーに返します。次に、API サーバーは、暗号化された Secret と DEK を etcd に保存します。
Kubernetes Secret を復号する場合、システムは最初に KMS の復号操作を呼び出して DEK を復号します。次に、システムはプレーンテキスト DEK を使用して Kubernetes Secret を復号し、復号された Secret を返します。
詳細については、「KMS プロバイダー」および「エンベロープ暗号化を使用する」をご参照ください。
KMS v2
Kubernetes 1.31 以降では、ACK Pro マネージドクラスターは KMS v2 を使用してディスク暗号化を実装します。 KMS v2 を使用すると、クラスター内のより多くの Secret インスタンスを管理でき、暗号化と復号のパフォーマンスが向上します。 KMS v2 の暗号化と復号のプロセスの詳細については、「Kubernetes 1.27: KMS V2 Moves to Beta」をご参照ください。
KMS v1 から KMS v2 にアップグレードする方法の詳細については、「Secret 暗号化のために KMS v2 をアップグレードするにはどうすればよいですか?」をご参照ください。
Kubernetes コミュニティは、Kubernetes 1.27 で KMS v1 を廃止とマークしており、Kubernetes 1.29 では v1 インターフェースはデフォルトで無効になっています。互換性を確保するために、ACK Pro マネージドクラスターで KMS v1 機能ゲートを構成して v1 インターフェースを有効にすることができます。
ACK Pro マネージドクラスターの Secret 暗号化を有効にする
ACK Pro マネージドクラスターの作成時に Secret 暗号化を有効にする
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、[Kubernetes クラスターの作成] をクリックします。
[ACK マネージドクラスター] タブで、ページ下部の [詳細オプション(オプション)] をクリックします。 [Secret 暗号化] を見つけ、[キーの選択] を選択し、ドロップダウンリストからキーを選択します。要件に基づいて他のパラメーターを設定し、[確認] をクリックします。
その他のパラメーターの詳細については、「ACK マネージドクラスターを作成する」をご参照ください。
ActionTrail コンソールにログインします。左側のナビゲーションウィンドウで、[イベント詳細クエリ] をクリックします。 [イベント詳細クエリ] ページで、aliyuncsmanagedsecurityrole ロールの引き受けによって実行される暗号化および復号操作を確認します。これらの操作が存在する場合、Secret 暗号化機能は有効になっています。
Secret 暗号化機能が不要になった場合は、クラスターリストで管理するクラスターの名前をクリックします。 [クラスター情報] ページで、[基本情報] タブをクリックします。 [セキュリティと監査] セクションで、[Secret 暗号化] をオフにします。
既存の ACK Pro マネージドクラスターの Secret 暗号化を有効にする
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理する ACK Pro マネージドクラスターの名前をクリックします。クラスター詳細ページで、[基本情報] タブをクリックします。 [セキュリティと監査] セクションで、[Secret 暗号化] を有効にします。
Secret 暗号化を初めて有効にする場合は、[今すぐ承認] をクリックして [RAM クイック承認] ページに移動します。指示に従って、[承認] をクリックします。
説明Secret 暗号化を有効にする場合は、使用する RAM ユーザーまたは RAM ロールに、管理者と O&M エンジニアのいずれかのロールベースアクセス制御 (RBAC) ロールが割り当てられていることを確認してください。詳細については、「RBAC を使用してクラスター内のリソースに対する操作権限を管理する」をご参照ください。
aliyuncsmanagedsecurityrole ロールを割り当てる場合は、Alibaba Cloud アカウント、または RAM 管理権限を持つ RAM ユーザーまたは RAM ロールを使用して ACK コンソールにログインしていることを確認してください。
[Secret 暗号化] ダイアログボックスで、既存のキーを選択し、[OK] をクリックします。
キーがない場合は、[キーの作成] をクリックして、KMS コンソールでキーを作成します。詳細については、「CMK を作成する」をご参照ください。
クラスターのステータスが [更新中] から [実行中] に変わると、クラスターの Secret 暗号化機能が有効になります。
Secret 暗号化機能が不要になった場合は、[セキュリティと監査] セクションで [Secret 暗号化] を無効にします。
自動キーローテーションを使用して Secrets を暗号化する
KMS によって提供される自動キーローテーション機能を使用して、Secrets を暗号化できます。キーローテーション中、システムは引き続き元のキーを使用して既存の Secrets を暗号化します。新しい Secrets は、新しいキーを使用して暗号化されます。自動キーローテーションの詳細については、「キーローテーションを構成する」をご参照ください。
キーがローテーションされた後、新しいキーを使用して既存の Secrets を強制的に暗号化するには、次のコマンドを実行します。
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 暗号化を有効にする方法の詳細については、「ACK Pro マネージドクラスターの Secret 暗号化を有効にする」をご参照ください。 Secret 暗号化が有効になると、クラスター内の Secret インスタンスは、ディスクのロードと読み取り中に KMS v2 を使用して自動的に暗号化および復号されます。
クラスターの Secret 暗号化が有効になっている場合は、オフピーク時に次のいずれかの方法を使用して、クラスターの暗号化方法をローテーションできます。
方法 1:
kubectl get secrets --all-namespaces -o json | kubectl replace -f -コマンドを実行します。このコマンドは、KMS v2 の暗号化方法を使用して、ディスクにインストールされているすべての Secrets の暗号化方法をローテーションします。方法 2:ACK コンソールにログインします。 [クラスター情報] ページの [基本情報] タブで、[Secret 暗号化] を無効にします。無効化操作により、クラスター内のすべての Secrets インスタンスのローテーションがトリガーされます。しばらくしてから、クラスターの Secret 暗号化を有効にします。詳細については、「KMS を使用して Kubernetes Secrets を暗号化する」をご参照ください。 Secret 暗号化機能が有効になると、クラスター内のすべての Secrets は KMS v2 を使用して暗号化されます。
Secret 暗号化が有効になっている場合、kubectl を使用して Secret をクエリすると暗号文が返されますか?
いいえ。 Secret 暗号化が有効になっている場合、kubectl を使用して Secret をクエリするとプレーンテキストが返されます。 Secret 暗号化機能は、etcd に保存されている Secrets を暗号化します。 Secret 暗号化を有効にした後、Secrets は暗号文として etcd に保存されます。ただし、kubectl クライアントを使用して、クラスターの API サーバーによって提供される Secret API を呼び出すことによって Secret をクエリする場合、Secret のプレーンテキストが返されます。
既存の ACK Pro マネージドクラスターの Secret 暗号化機能を RAM ユーザーまたは RAM ロールが有効または無効にすることを禁止するにはどうすればよいですか?
既存の ACK Pro マネージドクラスターの Secret 暗号化機能を RAM ユーザーまたは RAM ロールが有効または無効にすることを禁止するには、次のポリシーを RAM ユーザーまたは RAM ロールにアタッチします。詳細については、「カスタム RAM ポリシーを作成する」をご参照ください。
{
"Action": [
"cs:UpdateKMSEncryption"
],
"Effect": "Deny",
"Resource": [
"*"
]
}