ACK Pro クラスターおよびでは、Alibaba Cloud Key Management Service (KMS) のキーを使用して Kubernetes Secret を暗号化できます。このトピックでは、KMS で管理されるキーを使用して ACK Pro クラスター内の保存時の Secret データを暗号化する方法について説明します。
前提条件
前提条件 | 説明 |
KMS キー | Key Management Service コンソールで KMS キーが作成されていること。キーと対象の ACK Pro クラスターが同じリージョンにある必要があります。 ACK Pro クラスターは、デフォルトキー、ソフトウェア保護キー、およびハードウェア保護キーをサポートしています。必要に応じてキータイプを選択できます。KMS キーの管理方法の詳細については、「キー管理の概要」をご参照ください。KMS の課金の詳細については、「プロダクトの課金」をご参照ください。 重要 保存時の暗号化を有効にする場合、KMS コンソールまたは OpenAPI を使用して Secret の暗号化および復号に選択したキーを無効化または削除しないでください。無効化または削除すると、クラスターの API サーバーが利用できなくなります。これにより、Secret や ServiceAccount などのオブジェクトを取得できなくなり、アプリケーションの正常な動作に影響します。 |
クラスターのネットワーク ACL ルールの設定 | 保存時の暗号化を有効にすると、コントロールプレーン上の KMS プラグインは、Secret インスタンスを暗号化および復号するために Alibaba Cloud KMS OpenAPI にアクセスする必要があります。したがって、クラスターが使用するセキュリティグループのアウトバウンドルールと VPC ネットワーク ACL のインバウンドおよびアウトバウンドルールが、Alibaba Cloud サービス CIDR ブロック ( |
権限付与 | アカウントの種類に応じて、以下の権限付与操作が完了していることを確認してください。
|
Secret の暗号化の概要
Kubernetes クラスターでは、Secret を使用して、パスワード、TLS 証明書、Docker イメージをダウンロードするための認証情報などの機密性の高いアプリケーション情報を格納、管理します。 Kubernetes は、すべての Secret オブジェクトデータをクラスターの etcd に格納します。 詳細については、「シークレット」をご参照ください。
ACK Pro クラスターおよびでは、KMS のキーを使用して Kubernetes Secret を暗号化できます。この暗号化プロセスは、Kubernetes KMS 暗号化プロバイダーメカニズムに基づいています。このメカニズムは、エンベロープ暗号化を使用して、etcd に保存されている Kubernetes Secret を自動的に暗号化および復号します。Kubernetes Secret がどのように暗号化および復号されるかを以下の手順で説明します。
Kubernetes API を使用して Secret を作成すると、API サーバーはランダムなデータ暗号化キーでデータを暗号化します。次に、API サーバーは指定された KMS キーを使用してデータキーを暗号化します。暗号化されたデータと暗号化されたデータキーは etcd に保存されます。
Kubernetes Secret を復号するために、API サーバーは KMS Decrypt OpenAPI 操作を呼び出して、暗号化されたデータキーを復号します。次に、API サーバーは結果として得られた平文のデータキーを使用して Secret データを復号し、平文データをクライアントに返します。
詳細については、「KMS 暗号化プロバイダーメカニズム」および「KMS キーを使用したエンベロープ暗号化」をご参照ください。
KMS v2
Kubernetes 1.31 以降、ACK Pro クラスターおよびは KMS v2 API を使用して保存時の暗号化を実装します。KMS v2 は、クラスター内でより多くの Secret インスタンスをサポートし、暗号化と復号のパフォーマンスを向上させます。KMS v2 の暗号化と復号のプロセスの詳細については、「KMS v2」をご参照ください。
クラスターで使用されている KMS v1 API を KMS v2 API にアップグレードするには、「保存時の Secret の暗号化に KMS v2 を使用するようにアップグレードする方法」をご参照ください。
Kubernetes コミュニティは Kubernetes 1.27 で KMS v1 を非推奨とし、Kubernetes 1.29 ではデフォルトで v1 API を無効にしました。互換性を確保するため、KMS v1 機能ゲートが有効になっているため、ACK Pro クラスターおよびは引き続き v1 API を使用できます。
ACK Pro クラスターにおける保存時の Secret の暗号化の有効化
新規 ACK Pro クラスターにおける保存時の Secret の暗号化の有効化
[クラスター] ページで、[クラスターの作成] をクリックします。
[ACK マネージドクラスター] タブで、[詳細オプション (オプション)] を展開します。[保存時の Secret の暗号化] セクションで、[KMS キーの選択] チェックボックスをオンにし、ドロップダウンリストから KMS キー ID を選択します。必要に応じて他のパラメーターを設定します。[クラスターの作成] をクリックします。

ACK Pro クラスターの他のパラメーターの設定方法の詳細については、「ACK マネージドクラスター作成時のパラメーター」をご参照ください。
ActionTrail コンソールにログインします。左側のナビゲーションウィンドウで、[イベントクエリ] をクリックします。[イベントクエリ] ページに aliyuncsmanagedsecurityrole システムロールを使用した暗号化および復号操作のイベントログが含まれている場合、クラスターで保存時の Secret の暗号化が有効になっていることを示します。
保存時の Secret の暗号化機能が不要になった場合は、クラスターリストでクラスター名をクリックします。[クラスター情報] ページの [基本情報] タブをクリックします。[セキュリティと監査] セクションで、[保存時の Secret の暗号化] スイッチをオフにします。
既存の ACK Pro クラスターにおける保存時の Secret の暗号化の有効化
[クラスター] ページで、対象のクラスターの名前をクリックします。クラスターの詳細ページで、[基本情報] タブをクリックします。[セキュリティと監査] セクションで、[保存時の Secret の暗号化] スイッチをオンにします。
この機能を初めて有効にする場合は、プロンプトに従って [RAM に移動して権限を付与] をクリックします。[RAM クイック権限付与] ページにリダイレクトされます。次に、[権限付与の確認] をクリックして必要な権限を付与します。
説明保存時の暗号化を有効にするには、現在の RAM ユーザーまたは RAM ロールが RBAC を使用して付与されたクラスターに対する管理者または O&M 権限を持っていることを確認してください。詳細については、「RBAC を使用してクラスターリソースの権限を付与する」をご参照ください。
aliyuncsmanagedsecurityrole ロールに権限を付与するには、Alibaba Cloud アカウントまたは RAM 管理権限を持つ RAM ユーザーまたは RAM ロールとしてログインしていることを確認してください。
表示される [保存時の Secret の暗号化] ダイアログボックスで、既存の KMS キーを選択し、[OK] をクリックします。
KMS キーを作成していない場合は、[キーの作成] をクリックして Key Management Service コンソールに移動し、キーを作成します。詳細については、「キーの作成」をご参照ください。
クラスターのステータスが [更新中] から [実行中] に変わると、保存時の Secret の暗号化機能が有効になります。
保存時の Secret の暗号化機能が不要になった場合は、[セキュリティと監査] セクションの [保存時の Secret の暗号化] スイッチをオフにすることができます。
キーの自動ローテーションを使用した保存時の Secret の暗号化
KMS のキーの自動ローテーション機能を、保存時の Secret の暗号化と組み合わせて使用できます。キーが自動的にローテーションされると、既存の Secret は以前のキーバージョンで暗号化されたままになります。新しい 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 の暗号化が有効になっていない場合は、「ACK Pro クラスターにおける保存時の Secret の暗号化の有効化」を参照して機能を有効にしてください。機能が有効になると、クラスター内の Secret インスタンスは、ディスクへの書き込みまたは読み取り時に KMS v2 API を使用して自動的に暗号化および復号されます。
クラスターで Secret の保存時の暗号化機能が有効になっている場合は、オフピーク時に次のいずれかの方法で保存時の暗号化キーをローテーションできます。
方法 1:
kubectl get secrets --all-namespaces -o json | kubectl replace -f -コマンドを実行します。このコマンドは、KMS v2 API を使用してすべての Secret インスタンスを再暗号化します。方法 2:Container Service for Kubernetes コンソールにログインします。[クラスター情報] ページの [基本情報] タブで、[保存時の Secret の暗号化] をオフにします。この操作により、クラスター内のすべての Secret インスタンスが復号されます。プロセスが完了したら、「ACK Pro クラスターにおける保存時の Secret の暗号化の有効化」を参照して機能を再度有効にします。機能が再度有効になると、クラスター内のすべての Secret インスタンスは KMS v2 API を使用して保存時に暗号化されます。
保存時の暗号化を有効にした後、kubectl コマンドで取得した Secret は暗号文ですか?
いいえ、違います。保存時の暗号化機能は、etcd に保存されている生の Secret データを暗号化します。ただし、クライアントが API サーバーを呼び出して Secret データを取得すると、データは復号され、平文として返されます。
既存の ACK Pro マネージドクラスターにおいて、RAM ユーザーまたは RAM ロールによる Secret の at-rest 暗号化機能の有効化または無効化を禁止する方法
次の RAM ポリシーを RAM ユーザーまたは RAM ロールにアタッチすることで、既存のACK Pro クラスターまたはで保存時の Secret の暗号化機能を有効または無効にすることを禁止できます。詳細については、「RAM を使用してクラスターとクラウドリソースへのアクセス権限を付与する」をご参照ください。
{
"Action": [
"cs:UpdateKMSEncryption"
],
"Effect": "Deny",
"Resource": [
"*"
]
}