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課金の詳細については、「課金」をご参照ください。 重要 シークレット暗号化を有効にした後、KMS APIまたはKMSコンソールを使用して、シークレットの暗号化と復号化に使用するキーを無効化または削除しないでください。 そうしないと、APIサーバーが利用できなくなり、Secretsまたはサービスアカウントオブジェクトを取得できなくなります。 その結果、サービスの中断が発生する。 |
承認 | 次の要件を満たす必要があります。
|
シークレット暗号化の概要
Kubernetes Secretsは、アプリケーションのパスワード、Transport Layer Security (TLS) 証明書、Dockerイメージをダウンロードするための資格情報などの機密データを保存および管理するために使用されます。 KubernetesはクラスターのetcdにSecretsを保存します。 詳細については、「シークレット」をご参照ください。
ACK Proクラスターを使用すると、KMSで作成されたキーを使用してSecretsを暗号化できます。 KubernetesのKMSプロバイダーメカニズムは、暗号化中に使用されます。 KMSプロバイダーは、エンベロープ暗号化を使用して、etcdに保存されているSecretsを暗号化および復号します。 シークレットの暗号化と復号化の手順:
Kubernetes Secretを使用してパスワードを保存すると、APIサーバーはランダムデータ暗号化キー (DEK) を生成してシークレットを暗号化します。 次に、APIサーバーはDEKをKMSに送信します。 KMSは、指定されたキーを使用してDEKを暗号化し、暗号化されたDEKをAPIサーバーに返します。 APIサーバーは、暗号化されたSecretとDEKをetcdに保存します。
Kubernetes Secretを復号化すると、システムはKMSのdecrypt操作を呼び出して、最初にDEKを復号化します。 次に、システムはプレーンテキストDEKを使用してKubernetes Secretを復号し、復号されたSecretを返します。
詳細については、「KMSプロバイダー」および「エンベロープ暗号化の使用」をご参照ください。
ACK Proクラスターのシークレット暗号化の有効化
ACK Proクラスターの作成時にシークレット暗号化を有効にする
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、右上隅の [クラスターテンプレート] をクリックします。 [クラスターテンプレートの選択] ページで、[Professional Managed Kubernetesクラスター] を見つけ、[作成] をクリックします。
[マネージドKubernetes] タブで、ページ下部の [詳細オプションの表示] をクリックします。 [Secret Encryption] を検索し、[select Key] を選択し、ドロップダウンリストからキーを選択します。 ビジネス要件に基づいてその他のパラメーターを設定し、[クラスターの作成] をクリックします。 その他のパラメーターの詳細については、「ACK Proクラスターの作成」をご参照ください。
ActionTrail コンソール にログインします。 左側のナビゲーションウィンドウで、[イベント詳細クエリ] をクリックします。 [イベント詳細クエリ] ページで、aliyuncsmanagedsecurityroleロールを引き受けることによって実行される暗号化および復号化操作を確認します。 これらの操作が存在する場合、シークレット暗号化機能が有効になります。
シークレット暗号化機能が不要になった場合は、クラスターリストで管理するクラスターの名前をクリックします。 [クラスター情報] ページで、[基本情報] タブをクリックします。 [基本情報] セクションで、[秘密の暗号化] をオフにします。
既存のACK Proクラスターのシークレット暗号化を有効にする
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するACK Proクラスターの名前をクリックします。 クラスターの詳細ページで、[基本情報] タブをクリックします。 [基本情報] セクションで、[秘密の暗号化] をオンにします。
Secret暗号化を初めて有効にする場合は、指示に従って [RAMコンソールに移動] をクリックし、[クラウドリソースアクセス許可] ページに移動します。 次に、[権限付与ポリシーの確認] をクリックします。
説明シークレットの暗号化を有効にする場合は、使用するRAMユーザーまたはRAMロールに、管理者ロールとO&MエンジニアロールのいずれかのRBACロールが割り当てられていることを確認します。 詳細については、「RAMユーザーまたはRAMロールへのRBAC権限の付与」をご参照ください。
aliyuncsmanagedsecurityroleを割り当てる場合は、RAM管理権限を持つAlibaba CloudアカウントまたはRAMユーザーまたはRAMロールを使用してACKコンソールにログインしてください。
[Secret Encryption] ダイアログボックスで、既存のキーを選択し、[OK] をクリックします。
使用できるキーがない場合は、[キーの作成] をクリックして、KMSコンソールでキーを作成します。 詳細については、「CMKの作成」をご参照ください。
クラスターのステータスが [更新中] から [実行中] に変わった場合、クラスターのシークレット暗号化機能が有効になります。
シークレット暗号化機能が不要になった場合は、[基本情報] セクションの [シークレット暗号化] をオフにできます。
自動キーローテーションを使用してSecretsを暗号化する
KMSが提供する自動キーローテーション機能を使用して、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')"
よくある質問
シークレット暗号化を有効にした後、kubectlを使用してシークレットを照会すると、暗号文が返されますか?
いいえ。 シークレットの暗号化を有効にすると、kubectlを使用してシークレットを照会すると、プレーンテキストが返されます。 シークレット暗号化機能は、etcdに格納されているシークレットを暗号化します。 シークレット暗号化を有効にすると、シークレットは暗号文としてetcdに保存されます。 ただし、kubectlクライアントを使用してクラスターのAPIサーバーが提供するSecret APIを呼び出してSecretを照会すると、シークレットのプレーンテキストが返されます。
RAMユーザーまたはRAMロールが既存のACK Proクラスターのシークレット暗号化機能を有効または無効にすることを禁止するにはどうすればよいですか。
RAMユーザーまたはRAMロールが既存のACK Proクラスターののシークレット暗号化機能を有効または無効にすることを禁止するには、RAMユーザーまたはRAMロールに次のポリシーをアタッチします。 詳細については、「カスタムRAMポリシーの作成」をご参照ください。
{
"Action": [
"cs:UpdateKMSEncryption"
],
"Effect": "Deny",
"Resource": [
"*"
]
}