ACK Edge Pro クラスターでは、Alibaba Cloud Key Management Service (KMS) のキーを使用して Kubernetes Secrets を暗号化し、機密データの保護を強化できます。このトピックでは、KMS で管理されているキーを使用して、ACK Edge Pro クラスターの Kubernetes Secrets にある保存データを暗号化する方法について説明します。
前提条件
前提条件 | 説明 |
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 Edge Pro クラスターでは、KMS で作成されたキーを使用して Kubernetes Secret キーを暗号化できます。 KMS 暗号化プロセスは、Kubernetes が提供する KMS Encryption Provider メカニズムに基づいており、エンベロープ暗号化を使用して etcd に保存されている Kubernetes Secret キーを自動的に暗号化および復号化します。 Kubernetes Secret キーを暗号化および復号化するプロセスは次のとおりです。
-
Kubernetes Secret API を使用して Secret を保存すると、API サーバーは新しいデータ暗号化キー (DEK) で Secret を暗号化します。次に、API サーバーは指定された KMS キーを使用して DEK を暗号化します。最後に、暗号化された Secret と暗号化された DEK が etcd に一緒に保存されます。
-
Kubernetes Secret を取得すると、API サーバーは KMS Decrypt API を呼び出して DEK を復号します。次に、API サーバーはプレーンテキストの DEK を使用して Secret データを復号し、プレーンテキストの Secret を返します。
詳細については、「KMS 暗号化プロバイダーメカニズム」および「KMS キーを使用したエンベロープ暗号化」をご参照ください。
ACK Edge Pro クラスターで保存時の Secret の暗号化を有効にする
新規クラスター
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
-
クラスターリスト ページで、右上隅にある Kubernetes クラスターの作成 をクリックします。
-
ACK Edge クラスター タブをクリックします。ページの下部で 詳細オプション (選択してください) を展開し、 Secret ディスク書き込みの暗号化 を見つけて キーの選択 を選び、ドロップダウンリストから KMS キー ID を選択します。
KMS キーがない場合は、 キーの作成 をクリックして KMS コンソールに移動し、キーを作成します。詳細については、「キーの作成」をご参照ください。
ACK Edge Pro クラスターの作成に関するその他のパラメーターについては、「クラスターを作成する」をご参照ください。
Secret の暗号化が有効になっていることを確認するには、ActionTrail コンソールにログインします。左側のナビゲーションペインで、 クラスタイベントクエリ をクリックします。クラスタイベントクエリ ページで、
aliyuncsmanagedsecurityroleシステムロールを使用する暗号化および復号イベントを確認します。これらのイベントが存在する場合、この機能がアクティブであることを示します。
既存のクラスター
[クラスター] ページで、対象のクラスターの名前をクリックします。クラスターの詳細ページで、[基本情報] タブをクリックします。[セキュリティと監査] セクションで、[保存時の 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')"よくある質問
保存時の暗号化を有効にした後、kubectl コマンドで取得した Secret は暗号文ですか?
いいえ、違います。保存時の暗号化機能は、etcd に保存されている生の Secret データを暗号化します。ただし、クライアントが API サーバーを呼び出して Secret データを取得すると、データは復号され、平文として返されます。
既存の ACK Edge クラスター で RAM ユーザーまたは RAM ロールが Secret の保存時の暗号化を有効化または無効化できないようにする方法
次の Deny 効果を持つ RAM ポリシーを RAM ユーザーまたは RAM ロールにアタッチできます。これにより、ユーザーまたはロールは、既存の ACK Edge Pro クラスターの保存時の暗号化を有効化または無効化できなくなります。詳細については、「RAM を使用してクラスターとクラウドリソースへのアクセス権限を付与する」をご参照ください。
{
"Action": [
"cs:UpdateKMSEncryption"
],
"Effect": "Deny",
"Resource": [
"*"
]
}