Container Compute Service (ACS) クラスターでは、Key Management Service (KMS) で作成されたキーを使用して、Kubernetes Secretを暗号化できます。このトピックでは、KMSによって管理されるキーを使用して、ACSクラスターのSecretを暗号化する方法について説明します。
前提条件
KMSコンソール で KMSキーが作成されていること。キーは、ACSクラスターが存在するリージョンに属している必要があります。
重要Secretの暗号化を使用するには、ACSクラスターのバージョンが 1.28以降であることを確認してください。
次の要件を満たしている必要があります。
Alibaba Cloudアカウントを使用する場合、アカウントは AliyunCCManagedSecurityRole ロールの引き受けを承認されている必要があります。承認されていない場合、Secretの暗号化を有効にすると、ACSコンソールによって承認の実行を求められます。Cloud Resource Access Authorization ページにアクセスして、承認を完了することもできます。
Resource Access Management (RAM) ユーザーまたは RAMロールを使用する場合:
RAMユーザーまたは RAMロールには、ACSクラスターに対する管理者または O&Mエンジニアの権限が付与されている必要があります。詳細については、「RAMユーザーまたはRAMロールにRBAC権限を付与する」をご参照ください。
RAMユーザーまたは RAMロールには、AliyunKMSCryptoAdminAccess権限が付与されている必要があります。詳細については、「RAMポリシーをRAMユーザーまたはRAMロールにアタッチする」をご参照ください。
Secret暗号化の概要
Kubernetes Secretは、アプリケーションのパスワード、Transport Layer Security (TLS) 証明書、Dockerイメージをダウンロードするための認証情報など、機密データを保存および管理するために使用されます。Kubernetesは、クラスターのetcdにSecretを保存します。詳細については、「Secret」をご参照ください。
ACSクラスターは、オープンソースのKMS v2 APIを使用してSecretの暗号化を実装しています。これにより、クラスター内の多数のSecretを管理し、Secretを暗号化または復号化できます。ACSクラスターは、デフォルトキー、ソフトウェア保護キー、およびハードウェア保護キーをサポートしています。KMSのキー管理機能の詳細については、「Key Management の開始方法」をご参照ください。KMSの課金については、「課金」をご参照ください。
Secretの暗号化を有効にした後、KMS APIまたは KMSコンソールを使用して、Secretの暗号化と復号化に使用されるキーを無効化または削除しないでください。無効化または削除すると、APIサーバーが使用できなくなり、Secretまたはサービスアカウントオブジェクトを取得できなくなります。その結果、サービスの中断が発生します。
詳細については、「KMSプロバイダー」および「エンベロープ暗号化を使用する」をご参照ください。
ACSクラスターのSecret暗号化を有効にする
ACSクラスターの作成時にSecret暗号化を有効にする
ACSコンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページの左上隅にある [クラスターの作成] をクリックします。
ページ下部にある [詳細オプションを表示] をクリックします。[secretの暗号化] を見つけ、[キーの選択] を選択し、ドロップダウンリストからキーを選択します。必要に応じて他のパラメーターを設定し、[注文の確認] をクリックします。その他のパラメーターの詳細については、「ACSクラスターを作成する」をご参照ください。

ActionTrailコンソール にログインします。左側のナビゲーションペインで、[イベント詳細クエリ] をクリックします。[イベント詳細クエリ] ページで、aliyuncsmanagedsecurityrole ロールを引き受けることによって実行される暗号化および復号化操作を確認します。これらの操作が存在する場合、Secretの暗号化機能は有効になっています。
Secretの暗号化機能が不要になった場合は、クラスターリストで管理するクラスターの名前をクリックします。[クラスター情報] ページで、[基本情報] タブをクリックします。[セキュリティと監査] セクションで、[secretの暗号化] をオフにします。
既存のACSクラスターのSecret暗号化を有効にする
ACSコンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて名前をクリックします。クラスター詳細ページの左側のナビゲーションペインで、[クラスター情報] をクリックします。
[クラスター情報] ページで、[基本情報] タブをクリックします。[セキュリティと監査] セクションで、[secretの暗号化] をオンにします。
自動キーローテーションを使用してSecretを暗号化する
KMSが提供する自動キーローテーション機能を使用して、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を強制的に暗号化するためのコマンド
FAQ
Secret暗号化が有効になっている場合、kubectlを使用してSecretをクエリすると暗号文が返されますか?
いいえ。Secret暗号化が有効になっている場合、kubectlを使用してSecretをクエリするとプレーンテキストが返されます。Secret暗号化機能は、etcdに保存されているSecretを暗号化します。Secret暗号化を有効にすると、Secretは暗号文としてetcdに保存されます。ただし、kubectlクライアントを使用して、クラスターのAPIサーバーが提供するSecret APIを呼び出すことによってSecretをクエリすると、Secretのプレーンテキストが返されます。
RAMユーザーまたは RAMロールが既存のACSクラスターのSecret暗号化機能を有効または無効にすることを禁止するにはどうすればよいですか?
RAMユーザーまたは RAMロールが既存のACSクラスターのSecret暗号化機能を有効または無効にすることを禁止するには、次のポリシーを RAMユーザーまたは RAMロールにアタッチします。詳細については、「RAMポリシーをRAMユーザーまたはRAMロールにアタッチする」をご参照ください。
{
"Action": [
"cs:UpdateKMSEncryption"
],
"Effect": "Deny",
"Resource": [
"*"
]
} // RAMユーザーまたはRAMロールがSecret暗号化機能を有効/無効にすることを禁止するためのポリシー