ACK Pro クラスターまたはでは、Alibaba Cloud の Key Management Service (KMS) のキーを使用して Kubernetes の Secret を暗号化できます。このトピックでは、KMS で管理されるキーを使用して、ACK Pro クラスター内で Kubernetes の Secret を保管時に暗号化する方法について説明します。
前提条件
|
項目 |
説明 |
|
KMS キー |
KMS コンソールで KMS キーを作成済みであり、そのキーが対象の ACK Pro クラスターと同じリージョンにあること。 ACK Pro クラスターは、デフォルトキー、ソフトウェアキー、ハードウェアキーをサポートしています。キーの種類を選択できます。キー管理と関連操作の詳細については、「キー管理クイックスタート」をご参照ください。KMS の課金の詳細については、「課金」をご参照ください。 重要
保管時の暗号化を有効にした後は、KMS コンソールまたは API を使用して Secret の暗号化と復号に使用されるキーを無効化または削除しないでください。そうしないと、クラスターの API サーバーが利用できなくなります。その結果、Secret や ServiceAccount などのオブジェクトを取得できなくなり、アプリケーションが中断されます。 |
|
クラスターのネットワーク ACL ルール |
保管時の暗号化が有効になっている場合、コントロールプレーン上の KMS プラグインは、Secret を暗号化および復号するために Alibaba Cloud KMS API にアクセスする必要があります。これを許可するには、Alibaba Cloud サービス用に予約されている |
|
承認 |
アカウントの種類に基づいて、必要な権限が付与されていることを確認してください。
|
Secret 暗号化の仕組み
Kubernetes クラスターでは、パスワード、TLS 証明書、Docker イメージの認証情報などのアプリケーションの機密情報は、通常、Secret オブジェクトを使用して保存および管理されます。Kubernetes は、すべての Secret オブジェクトデータをクラスターの etcd データベースに保存します。Secret の詳細については、「Secrets」をご参照ください。
ACK Pro クラスターまたはでは、KMS で作成したキーを使用して Kubernetes の Secret を暗号化できます。暗号化プロセスは、Kubernetes の KMS Encryption Provider メカニズムに基づいており、エンベロープ暗号化を使用して etcd に保存されている Kubernetes の Secret を自動的に暗号化および復号します。暗号化と復号のプロセスは次のとおりです。
-
Kubernetes API を使用して Secret を保存すると、API サーバーはランダムに生成されたデータ暗号化キーで Secret を暗号化します。次に、そのデータ暗号化キーが指定された KMS キーで暗号化されます。暗号化された Secret と暗号化されたデータキーが etcd に保存されます。
-
Secret を取得すると、システムはまず KMS の Decrypt API を呼び出して、暗号化されたデータ暗号化キーを復号します。次に、復号されたプレーンテキストキーを使用して Secret データを復号し、プレーンテキストの Secret を返します。
詳細については、「KMS Encryption Provider メカニズム」および「エンベロープ暗号化に KMS キーを使用する」をご参照ください。
KMS v2
Kubernetes 1.31 以降、ACK Pro クラスターとは、デフォルトでコミュニティの KMS v2 API を使用して保管時の暗号化を行います。KMS v2 は、クラスター内のより多くの Secret をサポートし、より優れた暗号化および復号パフォーマンスを提供します。KMS v2 の暗号化および復号プロセスの詳細については、「KMS v2」をご参照ください。
クラスターを KMS v1 API から KMS v2 API にアップグレードするには、「KMS v2 へのアップグレード」をご参照ください。
Kubernetes コミュニティはバージョン 1.27 で KMS v1 API を非推奨とし、バージョン 1.29 でデフォルトで無効にしました。互換性のために、ACK Pro クラスターおよびでは、KMS v1 フィーチャーゲートを使用して KMS v1 API が引き続き有効になっています。
ACK Pro クラスターでの保管時の暗号化の有効化
新規クラスターの場合
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
-
クラスターリスト ページで、Kubernetes クラスターの作成 をクリックします。
-
ACK マネージドクラスター タブの下部で、詳細オプション (選択してください) を展開します。Secret ディスク書き込みの暗号化 を見つけ、キーの選択 を選択し、ドロップダウンリストから KMS キー ID を選択します。必要に応じて他のパラメーターを設定し、Kubernetes クラスターの作成 をクリックします。
ACK Pro クラスターの設定方法の詳細については、「ACK マネージドクラスター作成時のパラメーター」をご参照ください。
ActionTrail コンソールにログインし、左側メニューで クラスタイベントクエリ をクリックします。クラスタイベントクエリ ページで AliyunCSManagedSecurityRole システムロールを使用した暗号化および復号イベントのログが見つかった場合、クラスターで保管時の Secret 暗号化が有効になっています。
この機能が不要になった場合は、クラスター情報 ページに移動し、クラスター名をクリックしてから 基本情報 タブをクリックします。セキュリティと監査 ページの Secret ディスク書き込みの暗号化 セクションで、Secret ディスク書き込みの暗号化 スイッチをオフにします。
既存クラスターの場合
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
-
クラスターリスト ページで、対象クラスターの名前をクリックします。クラスター詳細ページで、基本情報 タブをクリックします。セキュリティと監査 セクションで、Secret ディスク書き込みの暗号化 スイッチをオンにします。
この機能を初めて有効にすると、権限を付与するように求められます。RAM コンソールに移動 をクリックします。Resource Access Management (RAM) の [クラウドサービスへのアクセス承認] ページで、確認 をクリックします。
説明-
保管時の暗号化を有効にするには、ログインしている RAM ユーザーまたは RAM ロールがクラスターに対する RBAC の管理者権限または O&M (運用保守) 権限を持っていることを確認してください。詳細については、「RBAC を使用してクラスター内のリソースを承認する」をご参照ください。
-
AliyunCSManagedSecurityRole ロールに権限を付与するには、Alibaba Cloud アカウントまたは RAM 管理権限を持つ RAM ユーザーもしくは RAM ロールでログインしていることを確認してください。
-
-
Secret ディスク書き込みの暗号化 ダイアログボックスで、既存の KMS キーを選択し、OK をクリックします。
KMS キーがない場合は、[キーの作成] をクリックして KMS コンソールに移動し、キーを作成します。詳細については、「キーの作成」をご参照ください。
クラスターのステータスが 更新 から 実行中 に変わると、クラスターで保管時の 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')"
よくある質問
KMS v2 へのアップグレード
KMS v2 を使用して Secret を保管時に暗号化するには、ACK Pro クラスターまたはがバージョン 1.31 以降であることを確認してください。
-
クラスターで保管時の暗号化がまだ有効になっていない場合は、「ACK Pro クラスターでの保管時の暗号化の有効化」の手順に従って有効にします。有効にすると、クラスターは自動的に KMS v2 API を使用して Secret を暗号化および復号します。
-
クラスターで保管時の暗号化がすでに有効になっている場合は、オフピーク時に次のいずれかの方法で KMS v2 暗号化方式に切り替えることができます。
-
方法 1:
kubectl get secrets --all-namespaces -o json | kubectl replace -f -コマンドを実行します。このコマンドは、KMS v2 API を使用してすべての既存の Secret を再暗号化します。 -
方法 2:ACK コンソールにログインします。基本情報 タブの クラスター情報 ページで、Secret ディスク書き込みの暗号化 を見つけてオフにします。これにより、クラスター内のすべての Secret の再暗号化プロセスがトリガーされます。しばらくしてから、「ACK Pro クラスターでの保管時の暗号化の有効化」の手順に従ってこの機能を再度有効にします。機能が再度有効になると、クラスター内のすべての Secret は KMS v2 API を使用して保管時に暗号化されます。
-
kubectl で取得した Secret は暗号化されていますか?
いいえ。保管時の暗号化は etcd 内の生の Secret データを暗号化し、暗号文として保存します。ただし、API サーバーを介して Secret API を使用すると、プレーンテキストの Secret データを受け取ります。
既存の ACK Pro クラスターまたはで、RAM ユーザーまたは RAM ロールが保管時の Secret 暗号化を有効または無効にできないようにする方法
RAM ユーザーまたは RAM ロールに cs:UpdateKMSEncryption アクションを明示的に拒否する RAM 権限ポリシーをアタッチできます。これにより、RAM ユーザーまたは RAM ロールが、既存の ACK Pro クラスターまたはで保管時の暗号化を有効または無効にできなくなります。詳細については、「RAM を使用してクラスターとクラウドリソースの権限を付与する」をご参照ください。
{
"Action": [
"cs:UpdateKMSEncryption"
],
"Effect": "Deny",
"Resource": [
"*"
]
}