Container Compute Service (ACS) では、Alibaba Cloud Key Management Service (KMS) で作成したキーを使用して、Kubernetes Secret を保管時に暗号化できます。KMS で管理されるキーを使用して、クラスターの etcd に保存されている Secret データを保護します。
前提条件
KMS コンソールで KMS キーが作成されていること。キーは、ターゲットの ACK クラスターと同じリージョンにある必要があります。
重要Secret の保管時の暗号化には、バージョン 1.28 以降の ACK クラスターが必要です。
アカウントの種類に応じて必要な権限が付与されていること。
Alibaba Cloud アカウント:Container Service アカウントに AliyunCCManagedSecurityRole ロールを引き受ける権限が付与されている必要があります。まだ権限が付与されていない場合、保管時の Secret 暗号化を有効にすると、ACK コンソールにプロンプトが表示されます。Cloud Resource Access Authorization ページで権限を付与することもできます。
RAM ユーザーまたは RAM ロール:
RBAC に基づいて、クラスターの管理者または O&M (運用保守) 権限が付与されていること。詳細については、「RAM ユーザーまたは RAM ロールの RBAC 権限の設定」をご参照ください。
AliyunKMSCryptoAdminAccess システム権限が付与されていること。詳細については、「RAM ユーザーまたは RAM ロールへの RAM 権限の付与」をご参照ください。
Secret 暗号化の仕組み
Kubernetes の Secret には、パスワード、TLS 証明書、イメージプル認証情報などの機密データが保存されます。すべての Secret データは、クラスターの etcd に永続化されます。
ACK クラスターは、コミュニティの KMS v2 API を使用して保管時の暗号化を行うことで、より高い Secret 容量と優れたパフォーマンスをサポートします。ACK は、デフォルトキー、ソフトウェアで保護されたキー、およびハードウェアで保護されたキーをサポートします。詳細については、「キー管理の概要」と「課金」をご参照ください。
保管時の暗号化を有効にした後は、KMS コンソールまたは API を呼び出して、Secret の暗号化と復号に使用されるキーを無効化したり削除したりしないでください。無効化または削除した場合、クラスターの API サーバーが利用できなくなり、Secret や ServiceAccount などのオブジェクトを取得できなくなります。これにより、実行中のアプリケーションに支障をきたします。
詳細については、「データ暗号化のための KMS プロバイダーの使用」および「エンベロープ暗号化のための KMS キーの使用」をご参照ください。
ACK クラスターでの保管時の暗号化の有効化
クラスター作成時
-
ACS コンソールにログインします。左側のナビゲーションペインで、クラスターリストをクリックします。
-
クラスターリスト ページで、左上の Kubernetes クラスターの作成 をクリックします。
ページの下部で 事前設定の表示 を展開し、Secret ディスク書き込みの暗号化 を見つけて キーの選択 チェックボックスをオンにし、ドロップダウンリストから KMS キー ID を選択します。必要に応じて他のパラメーターを設定し、注文の確認 をクリックします。詳細については、「ACK クラスターの作成」をご参照ください。
ActionTrail コンソールにログインし、左側メニューで イベントクエリ をクリックします。イベントクエリ ページに aliyuncsmanagedsecurityrole システムロールによって生成された暗号化および復号イベントログが表示されていれば、保管時の Secret 暗号化は有効です。
保存時の Secret 暗号化を無効にするには、Container Service for Kubernetes (ACK) コンソールのクラスター情報 > 基本情報 タブに移動し、セキュリティと監査 セクションで Secret ディスク書き込みの暗号化 スイッチをオフにします。
既存のクラスターの場合
-
ACS コンソールにログインします。左側のナビゲーションペインで、クラスターリストをクリックします。
-
クラスターリスト ページで、ターゲットクラスターの名前をクリックします。 左側のナビゲーションペインで、クラスター情報 を選択します。
-
「クラスター詳細」ページで、基本情報 タブをクリックします。セキュリティと監査 セクションで、Secret ディスク書き込みの暗号化 の横にある 有効にする をクリックします。
Secret ディスク書き込みの暗号化 ダイアログボックスで、既存の KMS キーを選択し、OK をクリックします。
KMS キーを作成していない場合は、[Create Key] をクリックして KMS コンソールに移動し、キーを作成します。詳細については、「キーの作成」をご参照ください。
クラスターのステータスが 更新中 から 実行中 に変わると、保管時の 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')"よくある質問
kubectl get secrets は暗号文を返しますか。
いいえ。保管時の暗号化機能は、etcd に保存されている生データを暗号化します。つまり、Secret の保管時の暗号化を有効にすると、etcd に保存されている Secret データは暗号文になります。ただし、クライアントが Secrets API を介して取得する Secret データは、依然としてプレーンテキストです。
Secret 暗号化を管理できるユーザーを制限するにはどうすればよいですか。
既存のクラスターで RAM ユーザーまたは RAM ロールが保管時の Secret 暗号化を有効または無効にできないようにするには、次の拒否ポリシーをアタッチします。詳細については、「RAM ユーザーまたは RAM ロールへの RAM 権限の付与」をご参照ください。
{
"Action": [
"cs:UpdateKMSEncryption"
],
"Effect": "Deny",
"Resource": [
"*"
]
}