Entrust KeyControl

Entrust KeyControl 是一種專有的 KMS,KES 支援使用它來儲存密碼。

K E S C l i e n t K E S S e r v e r E n t r u s t K e y C o n t r o l

先決條件

此程序是針對 Entrust KeyControl v10.1 編寫和測試的。提供的指示可能適用於其他 KeyControl 版本。此程序假設您具有 Entrust 產品的先前經驗,並已遵循其文件、最佳實務和其他已發布的材料來部署 KeyControl 服務。

如需設定 Entrust KeyControl 叢集的指示,請參閱 Entrust 文件

設定 Entrust KeyControl

在設定 KES 伺服器之前,請在 KeyControl 中完成以下各節,以新增新的 Vault、Box 和一個或多個使用者。

建立新的 Vault

使用具有根層級權限的使用者 (例如,secroot) 登入您的 KeyControl 叢集,並建立新的 PASM vault。

建立與下列項目類似的項目

  • 類型PASM

  • 名稱minio

  • 描述:Vault 的選用其他資訊,或留空。

  • 管理員名稱:管理 vault 的使用者名稱。

    注意:此使用者具有對 Vault 的完整存取權。

  • 管理員電子郵件:Vault 管理員的電子郵件地址

    注意:KeyControl 會傳送一次性密碼到此電子郵件地址,以存取 vault。您在下一步驟中需要此密碼。

依照 KeyControl 或您自己的規範,進行其他必要的輸入。您可以設定「名稱」和「描述」來更具體地描述您的 MinIO 部署,或根據您自己的規範進行設定。

存取新的 Vault

  1. 存取 Vault 的 URL。

    此 URL 應在包含一次性密碼的電子郵件中。您也可以從 KeyControl 中的「Vault」標籤找到該 URL。

  2. 使用電子郵件寄送的管理員使用者名稱和一次性密碼來存取 Vault。

建立新的 Box

KeyControl 將機密資訊儲存在 Vault 內的 Box 中。新增一個 Box 來儲存您的機密資訊。

依照提示進行操作,並輸入類似以下的項目

  • 名稱:Box 的描述性名稱,例如 MinIO 租用戶名稱。
  • 描述:關於 Box 中機密資訊的可選附加資訊。
  • 機密資訊到期時間:保持空白。
  • 機密資訊簽出期限:保持空白。
  • 機密資訊輪換期限:保持空白。

依照 KeyControl 或您自己的規範,進行其他必要的輸入。

附加「Vault 使用者」角色政策

KeyControl 使用基於角色的存取控制。新增一個具有 Vault 使用者角色的政策,並將該政策附加到 KES 使用的使用者帳戶。

依照提示進行操作,並輸入類似以下的項目

  • 名稱:KES 服務。
  • 描述:政策的可選較長描述。
  • 角色:Vault 使用者角色。
  • 使用者:KeyControl 帳戶 KES 用來存取金鑰。
  • Box:從下拉式選單中選取您在上一步新增的 Box。
  • 機密資訊:所有機密資訊。

依照 KeyControl 或您自己的規範,進行其他必要的輸入。

KES 伺服器設定

在 KeyControl 中建立新的 Vault、Vault 內的 Box 和使用者存取政策後,您可以設定 KES 伺服器。

產生 KES 伺服器私密金鑰和憑證

為您的 KES 伺服器產生 TLS 私密金鑰和憑證。如果您已經有想要用於 KES 伺服器的 TLS 憑證或運作中的 KES 伺服器,則可以跳過此步驟。

以下命令會產生新的 TLS 私密金鑰 (private.key) 和一個針對 IP 127.0.0.1 和 DNS 名稱 localhost 發行的自我簽署 X.509 憑證 (public.crt)。

kes identity new --key private.key --cert public.crt --ip "127.0.0.1" --dns localhost

輸出類似於以下內容

Your API key:

   kes:v1:APvbt/zbiewXNB+EwciOT+I21peq0odFYCwkJX8mMCxM

This is the only time it is shown. Keep it secret and secure!

Your Identity:

   1d1f89ad528a3bbb8fd64252d443c993f5a4d679b074d5bad49785e02ec38199

The identity is not a secret. It can be shared. Any peer
needs this identity in order to verify your API key.

The generated TLS private key is stored at: private.key
The generated TLS certificate is stored at: public.crt

The identity can be computed again via:

    kes identity of kes:v1:APvbt/zbiewXNB+EwciOT+I21peq0odFYCwkJX8mMCxM
    kes identity of public.crt

產生新的 API 金鑰

用戶端應用程式需要憑證才能存取 KES 伺服器。以下命令會產生新的 API 金鑰。

kes identity new

產生的金鑰類似於

Your API key:

   kes:v1:AOlQZJRMYZeOioGk0ubYBMSFt1w6Hh1QZl3zG4PQxK/g

This is the only time it is shown. Keep it secret and secure!

Your Identity:

   eb559798a2fbcc3efbf036bed11108116e63f293324abdfe7574249ef5e56b36

The identity is not a secret. It can be shared. Any peer
needs this identity in order to verify your API key.

The identity can be computed again via:

    kes identity of kes:v1:AOlQZJRMYZeOioGk0ubYBMSFt1w6Hh1QZl3zG4PQxK/g

設定 KES 伺服器

建立 KES 伺服器設定檔:config.yml。請確保政策區段中的身分與您的 API 金鑰身分相符。

address: 0.0.0.0:7373 # Listen on all network interfaces on port 7373

admin:
  identity: disabled  # We disable the admin identity since we don't need it in this guide 
   
tls:
  key: private.key    # The KES server TLS private key
  cert: public.crt    # The KES server TLS certificate
   
policy:
  my-app: 
    allow:
    - /v1/key/create/my-key*
    - /v1/key/generate/my-key*
    - /v1/key/decrypt/my-key*
    identities:
    - eb559798a2fbcc3efbf036bed11108116e63f293324abdfe7574249ef5e56b36 # Use the identity of your API key
   
keystore:
     entrust:
       keycontrol:
         endpoint: "https://keycontrol.my-org.com"    # Use your KeyControl instance endpoint.
         vault_id: ""                                 # The Vault ID - e.g: "e30497c1-bff7-4e81-beb7-fb35c4b7410c".
         box_id:   ""                                 # The Box name or ID - e.g: "tenant-1".
         credentials:
           username: ""                               # KeyControl username - e.g: "kes-tenant-1@my-org.com".
           password: ""                               # Password of KeyControl user

啟動 KES 伺服器

使用您建立的 YAML 檔案來啟動 KES 伺服器執行個體。

kes server --config config.yml --auth off
Linux 交換保護

在 Linux 環境中,KES 可以使用 mlock 系統呼叫來防止作業系統將記憶體中的資料寫入磁碟 (交換)。這可以防止洩漏敏感資料。

使用以下命令允許 KES 使用 mlock 系統呼叫,而無需以 root 權限執行

sudo setcap cap_ipc_lock=+ep $(readlink -f $(which kes))

啟動具有記憶體保護的 KES 伺服器執行個體

kes server --config config.yml --auth off --mlock

KES CLI 存取

  1. 設定 KES_SERVER 端點。

    以下環境變數指定 KES CLI 應與之對話的伺服器

    $ export KES_SERVER=https://127.0.0.1:7373
    
  2. 定義用戶端憑證。

    以下環境變數設定用戶端用來與 KES 伺服器對話的存取憑證

    $ export KES_CLIENT_CERT=client.crt
    
    $ export KES_CLIENT_KEY=client.key
    
  3. 測試組態。

    執行 KES 伺服器設定檔中定義的政策允許的任何 API 操作。

    例如,建立一個金鑰

    $ kes key create my-key-1
    

    使用該金鑰產生新的資料加密金鑰

    $ kes key dek my-key-1
    {
      plaintext : UGgcVBgyQYwxKzve7UJNV5x8aTiPJFoR+s828reNjh0=
      ciphertext: eyJhZWFkIjoiQUVTLTI1Ni1HQ00tSE1BQy1TSEEtMjU2IiwiaWQiOiIxMTc1ZjJjNDMyMjNjNjNmNjY1MDk5ZDExNmU3Yzc4NCIsIml2IjoiVHBtbHpWTDh5a2t4VVREV1RSTU5Tdz09Iiwibm9uY2UiOiJkeGl0R3A3bFB6S21rTE5HIiwiYnl0ZXMiOiJaaWdobEZrTUFuVVBWSG0wZDhSYUNBY3pnRWRsQzJqWFhCK1YxaWl2MXdnYjhBRytuTWx0Y3BGK0RtV1VoNkZaIn0=
    }
    

將 KES 與 MinIO 伺服器一起使用

MinIO 伺服器需要 KES 才能啟用伺服器端資料加密。

請參閱適用於 MinIO 的 KES 指示指南,了解將新的 KES 伺服器與 MinIO 伺服器一起使用所需的其他步驟。

組態參考

以下章節說明金鑰加密服務 (KES) 組態設定,以使用 Entrust KeyControl 作為根 KMS 來儲存外部金鑰,例如用於 MinIO 伺服器上伺服器端加密的金鑰。

MinIO 伺服器需要擴充的權限
MinIO Server RELEASE.2023-02-17T17-52-43Z 開始,MinIO 需要擴充的 KES 權限才能運作。本節中的範例組態包含所有必要的權限。

參考資料