すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ACK Edge クラスターで KMS を使用して Secret を暗号化する

最終更新日:Nov 09, 2025

ACK Edge Pro クラスターでは、Alibaba Cloud Key Management Service (KMS) で作成されたキーを使用して Kubernetes の Secret を暗号化できます。これにより、暗号化されたデータの保護が強化されます。このトピックでは、KMS で管理されているキーを使用して ACK Edge Pro クラスター内の Kubernetes の Secret を暗号化する方法について説明します。

前提条件

項目

説明

KMS キー

KMS コンソールで KMS キーを作成します。キーは、ACK Pro クラスターが存在するリージョンに属している必要があります。

ACK Pro クラスターは、デフォルトキー、ソフトウェアで保護されたキー、およびハードウェアで保護されたキーをサポートしています。KMS のキー管理機能の詳細については、「キー管理の概要」をご参照ください。KMS の課金の詳細については、「課金」をご参照ください。

重要

Secret の暗号化を有効にした後は、KMS API または KMS コンソールを使用して、Secret の暗号化と復号に使用されるキーを無効化または削除しないでください。そうしないと、API サーバーが利用できなくなり、Secret またはサービスアカウントオブジェクトを取得できなくなります。その結果、サービスが中断されます。

クラスターのネットワーク ACL 構成

Secret の暗号化を有効にすると、コントロールプレーン上の KMS は Alibaba Cloud KMS OpenAPI にアクセスして、Secret インスタンスの暗号化と復号を実行する必要があります。したがって、クラスターが使用するセキュリティグループまたは VPC ネットワーク ACL のアウトバウンドルールで、Alibaba Cloud サービスの CIDR ブロック (100.64.0.0/10) へのアクセスが許可されていることを確認する必要があります。そうしないと、クラスターのコントロールプレーンが利用できなくなる可能性があります。詳細については、「クラスターのセキュリティグループを設定する」をご参照ください。

権限付与

アカウントの種類に応じて、次の操作が実行されます。

  • Alibaba Cloud アカウントを使用する場合、アカウントは AliyunCSManagedSecurityRole ロールを偽装する権限を付与されている必要があります。そうでない場合、Secret の暗号化を有効にすると、ACK コンソールで権限付与を実行するように求められます。コンソールの指示に従って権限付与を完了するか、RAM クイック承認ページに移動して権限付与を完了できます。

  • Resource Access Management (RAM) ユーザーまたは RAM ロールを使用する場合:

Secret の暗号化の概要

Kubernetes の Secret は、アプリケーションのパスワード、Transport Layer Security (TLS) 証明書、Docker イメージをダウンロードするための認証情報などの機密データを保存および管理するために使用されます。Kubernetes は、クラスターの etcd に Secret を保存します。詳細については、「Secret」をご参照ください。

ACK Edge Pro クラスターでは、KMS で作成されたキーを使用して Kubernetes の Secret を暗号化できます。暗号化中には、Kubernetes の KMS プロバイダーメカニズムが使用されます。KMS プロバイダーは、エンベロープ暗号化を使用して etcd に保存されている Secret を暗号化および復号します。Secret の暗号化と復号の手順は次のとおりです。

  1. Kubernetes の Secret を使用して保存する場合、API サーバーはランダムなデータ暗号化キー (DEK) を生成して Secret を暗号化します。次に、API サーバーは DEK を KMS に送信します。KMS は指定されたキーを使用して DEK を暗号化し、暗号化された DEK を API サーバーに返します。その後、API サーバーは暗号化された Secret と DEK を etcd に保存します。

  2. Kubernetes の Secret を復号する場合、システムは KMS の Decrypt 操作を呼び出して、まず DEK を復号します。次に、システムはプレーンテキストの DEK を使用して Kubernetes の Secret を復号し、復号された Secret を返します。

詳細については、「KMS プロバイダー」および「エンベロープ暗号化の使用」をご参照ください。

ACK Edge Pro クラスターで Secret の暗号化機能を有効にする

新しいクラスターの作成

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページの右上隅にある [Kubernetes クラスターの作成] をクリックします。

  3. [クラスターの作成] ページで、[ACK Edge] タブをクリックします。タブの下部にある [高度なオプションの表示] をクリックします。[Secret の暗号化] パラメーターを見つけて、[キーの選択] を選択します。次に、ドロップダウンリストからキー ID を選択します。

    KMS でキーを作成していない場合は、[キーの作成] をクリックして KMS コンソールに移動して作成します。詳細については、「CMK の作成」をご参照ください。

    ACK Edge Pro クラスターのその他の構成の詳細については、「クラスターの作成」をご参照ください。

    image.png

    ActionTrail コンソールにログインします。左側のナビゲーションウィンドウで、[イベントクエリ] をクリックします。[イベントクエリ] ページで、aliyuncsmanagedsecurityrole システムロールがイベントログの暗号化と復号に使用されている場合、クラスターで Secret の暗号化機能が有効になっています。结果验证

作成済みクラスター

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理する ACK Pro クラスターの名前をクリックします。クラスターの詳細ページで、[基本情報] タブをクリックします。[セキュリティと監査] セクションで、[Secret の暗号化] を有効にします。

    Secret の暗号化を初めて有効にする場合は、[今すぐ承認] をクリックして [RAM クイック承認] ページに移動します。指示に従って、[承認] をクリックします。

    説明
    • Secret の暗号化を有効にするには、使用する RAM ユーザーまたは RAM ロールに、管理者および O&M エンジニアという Role-Based Access Control (RBAC) ロールのいずれかが割り当てられていることを確認してください。詳細については、「RAM ユーザーまたは RAM ロールに RBAC 権限を付与する」をご参照ください。

    • aliyuncsmanagedsecurityrole ロールを割り当てる場合は、Alibaba Cloud アカウント、または RAM 管理権限を持つ RAM ユーザーか RAM ロールで ACK コンソールにログインしていることを確認してください。

  3. [Secret の暗号化] ダイアログボックスで、既存のキーを選択し、[OK] をクリックします。

    利用可能なキーがない場合は、[キーの作成] をクリックして KMS コンソールでキーを作成します。詳細については、「CMK の作成」をご参照ください。

    クラスターのステータスが [更新中] から [実行中] に変わると、クラスターで Secret の暗号化機能が有効になります。

    Secret の暗号化機能が不要になった場合は、[セキュリティと監査] セクションで [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 の暗号化を有効にした後、kubectl を使用して Secret をクエリすると暗号文が返されますか?

いいえ。Secret の暗号化を有効にした後、kubectl を使用して Secret をクエリすると、プレーンテキストが返されます。Secret の暗号化機能は、etcd に保存されている Secret を暗号化します。Secret の暗号化を有効にすると、Secret は暗号文として etcd に保存されます。ただし、kubectl クライアントを使用して、クラスターの API サーバーが提供する Secret API を呼び出して Secret をクエリすると、Secret のプレーンテキストが返されます。

既存の ACK Edge クラスターに対して、RAM ユーザーまたは RAM ロールが Secret の暗号化機能を有効または無効にすることを禁止するにはどうすればよいですか?

既存の ACK Edge クラスターに対して、RAM ユーザーまたは RAM ロールが Secret の暗号化機能を有効または無効にすることを禁止するには、次の RAM ポリシーを RAM ユーザーまたは RAM ロールにアタッチします。詳細については、「RAM を使用してクラスターとクラウドリソースへのアクセスを承認する」をご参照ください。

  {
      "Action": [
          "cs:UpdateKMSEncryption"
      ],
      "Effect": "Deny",
      "Resource": [
          "*"
      ]
  }