全部產品
Search
文件中心

Container Service for Kubernetes:使用阿里雲KMS進行Secret的落盤加密

更新時間:Jun 19, 2024

ACK Pro叢集中,您可以使用在阿里雲Key Management Service(Key Management Service)中建立的祕密金鑰加密Kubernetes Secret密鑰。本文主要介紹如何使用KMS管理的金鑰組ACK Pro叢集中的Kubernetes Secret密鑰資料進行落盤加密。

索引

前提條件

條件項

說明

KMS密鑰

已在Key Management Service控制台建立KMS密鑰,且密鑰地區與目標ACK Pro叢集所在地區保持統一。

ACK Pro叢集支援預設密鑰、軟體密鑰和硬體密鑰,您可以按業務需求選擇。關於KMS密鑰管理的更多資訊和相關操作,請參見密鑰管理快速入門;關於KMS服務計費的詳細說明,請參見產品計費

重要

開啟落盤加密功能時,請勿使用KMS的控制台或OpenAPI禁用或刪除叢集Secret加解密選擇的密鑰,否則會導致叢集API Server不可用,繼而無法正常擷取Secret和ServiceAccount等對象,影響業務應用的正常運行。

授權

根據您使用帳號類型的不同,確認已完成如下授權操作。

  • 阿里雲帳號:已授權Container Service帳號使用AliyunCSManagedSecurityRole系統角色的許可權。如果您使用的帳號未授權,開啟Secret落盤加密時,ACK控制台會提示您進行KMS安全系統角色授權。您可以根據控制台指引完成授權,也可以訪問雲資源訪問授權頁面完成授權。

  • RAM使用者或RAM角色:

Secret加密介紹

在Kubernetes叢集中,通常使用Secret密鑰模型儲存和管理業務應用涉及的敏感資訊,例如應用密碼、TLS認證、Docker鏡像下載憑據等敏感資訊。Kubernetes會將所有的Secret金鑰組象資料存放區在叢集對應的etcd中。關於密鑰的更多資訊,請參見Secrets

ACK Pro叢集中,您可以使用在KMS中建立的祕密金鑰加密Kubernetes Secret密鑰。KMS加密過程基於Kubernetes提供的KMS Encryption Provider機制,使用信封加密的方式對儲存在etcd中的Kubernetes Secret密鑰進行自動加密和解密。Kubernetes Secret祕密金鑰加密和解密的過程如下。

  1. 當一個業務密鑰需要通過Kubernetes Secret API儲存時,資料會首先被API Server產生的一個隨機的資料加密金鑰加密,然後該資料密鑰會被指定的KMS祕密金鑰加密為一個密文金鑰儲存區在etcd中。

  2. 解密Kubernetes Secret密鑰時,系統會首先調用KMS的解密OpenAPI進行密文密鑰的解密,然後使用解密後的清除金鑰對Secret資料解密,並最終返回給您。

更多資訊,請參見KMS Encryption Provider機制使用KMS密鑰進行信封加密

為ACK Pro叢集開啟Secret落盤加密

為建立的ACK Pro版叢集開啟Secret落盤加密

  1. 登入Container Service管理主控台,在左側導覽列單擊叢集

  2. 叢集列表頁面,單擊頁面右上方的叢集模板,然後在選擇叢集模板頁面,找到Pro 託管叢集並單擊建立

  3. ACK託管版頁簽最下方,展開顯示進階選項,找到Secret落盤加密,勾選選擇KMS密鑰,然後在下拉框中選擇KMS密鑰ID。按需配置其他配置項後,單擊建立叢集。建立ACK Pro叢集的其他配置,請參見建立ACK Pro版叢集Secret加密

登入Action Trail控制台,在左側導覽列單擊事件查詢,如果事件查詢頁面存在使用aliyuncsmanagedsecurityrole系統角色的加密和解密事件記錄,表明該叢集後台已成功開啟Secret落盤加密特性。

當您不需要使用Secret落盤加密功能時,可在叢集列表單擊叢集名稱,在叢集資訊頁面單擊基本資料頁簽,然後在基本資料地區關閉Secret落盤加密開關。

為已建立的ACK Pro版叢集開啟Secret落盤加密

  1. 登入Container Service管理主控台,在左側導覽列單擊叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在叢集詳情頁面單擊基本資料頁簽,在基本資料地區開啟Secret落盤加密開關。

    首次開啟時,請根據提示單擊前往RAM進行授權進入雲資源訪問授權頁面,然後單擊同意授權完成授權。

    說明
    • 如需開啟落盤加密功能,請確保當前登入的RAM使用者或RAM角色對該叢集有RBAC的管理員或營運人員許可權。具體操作,請參考配置RAM使用者或RAM角色RBAC許可權

    • 如需授權aliyuncsmanagedsecurityrole角色,請確保已使用阿里雲帳號(主帳號)或擁有Resource Access Management許可權的RAM使用者或RAM角色登入。

  3. 在彈出的Secret落盤加密對話方塊,選擇已有的KMS密鑰,然後單擊確定

    如果您未建立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')"

常見問題

開啟Secret落盤加密後,通過kubectl命令擷取到的Secret是加密後的密文嗎?

不是。Secret落盤加密功能所加密的是etcd中儲存的未經處理資料,即開啟Secret落盤加密後,etcd中儲存的Secret資料將是加密後的密文資料。但用戶端通過API Server提供的Secret API擷取到的Secret資料將仍舊是原始的明文資料。

如何禁止RAM使用者或RAM角色在已建立的ACK Pro叢集中開啟或關閉Secret落盤加密功能

您可以通過為RAM使用者或RAM角色授予如下拒絕操作的RAM權限原則,禁止該RAM使用者或RAM角色在已建立的ACK Pro叢集中開啟或關閉Secret落盤加密功能。具體操作,請參見自訂RAM授權策略

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