將資料儲存在 Kubernetes Secret 中

本主題說明如何將機密資料儲存在 Kubernetes 密鑰中,並從 API Proxy 流程中的流程變數擷取資料。

簡介

有時您會想儲存資料,以便在執行階段擷取,也就是不應在 API Proxy 邏輯中硬式編碼的不會過期資料。其中一個選項是使用混合式鍵/值對應 (KVM) 功能。如果您已在自訂保存庫中使用 Kubernetes 管理機密資料,不妨考慮使用本主題所述的 Kubernetes Secret 功能。與 KVM 資料相同,您可以在 API Proxy 流程變數中存取 Kubernetes Secret 資料。

Kubernetes Secret 可以儲存哪些類型的資料?

Apigee Hybrid 僅允許您在 Kubernetes Secret 中儲存下列類型的資料檔案。包括:

檔案格式 支援的副檔名
傳輸層安全標準 (TLS) 憑證和金鑰檔案 *.crt*.key*.pem
房源檔案 *.properties

屬性檔案包含鍵/值組合。例如:

username=admin
password=1f2d1e2e7df

建立 Kubernetes Secret

本節說明如何建立 Kubernetes Secret,在叢集中儲存機密資料。

  1. 建立要儲存在 Kubernetes Secret 中的檔案。檔案必須使用支援的格式,且副檔名須符合這篇文章的規定。
  2. 執行 kubectl create secret generic 指令。例如:
    kubectl -n namespace create secret generic org-env-policy-secret \
      --from-file=filepath/prop-file.properties \
      --from-file=filepath/key-file.key \
      --from-file="filepath/cert-file.pem
    

    其中:

    • namespace:部署執行階段元件的 Kubernetes 命名空間。
    • org:您的 Apigee 機構名稱。
    • env:貴機構中環境的名稱。
    • filepath:要納入密鑰的檔案路徑。您必須指定至少一個要納入密鑰的檔案。
    • prop-file:要納入密鑰的屬性檔案名稱。
    • key-file:要納入密鑰的 TLS 金鑰檔案名稱。
    • cert-file:要納入密鑰的 TLS 憑證檔案名稱。

    密鑰可包含一或多個檔案。例如:

    kubectl -n apigee create secret generic myorg-test-policy-secret \
      --from-file="$policy_secrets_path"/credential.properties \
      --from-file="$policy_secrets_path"/secrets.properties \
      --from-file="$policy_secrets_path"/public.key \
      --from-file="$policy_secrets_path"/fullchain.pem
  3. 建立後,系統最多可能需要 90 秒,才會在所有叢集中反映變更。 訊息處理器每 30 秒會輪詢一次密鑰變更。如果偵測到變更,就會更新快取。

從密鑰擷取資料

建立密鑰並可供使用後 (通常在建立後約 90 秒),您可以在儲存密鑰的機構/環境中,透過 API Proxy 流程的流程變數存取密鑰資料。舉例來說,假設您的密鑰包含名為 credentials.properties*.properties 檔案,其中含有 API 金鑰,如下所示:

apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z

接著,您可以使用 指派訊息等政策,從流程變數擷取 API 金鑰。例如:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>my-apikey</Name>
    <Ref>private.secret.credential.properties.apikey</Ref>
  </AssignVariable>
</AssignMessage>

Ref 元素中參照的變數名稱 private.secret.credential.properties.apikey 由下列部分組成:

變數名稱部分 說明
private.secret 變數的固定命名空間。混合式叢集中儲存的所有 Kubernetes 密鑰都會共用這個命名空間。
credential.properties

儲存在 Kubernetes 密鑰中的檔案名稱。

apikey 儲存在屬性檔案中的金鑰名稱。

在本範例中,「指派訊息」政策會擷取 apikeyOrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z,並將其儲存在流程變數 my-apikey 中。

更新密鑰

由於 kubectl 不支援更新 Kubernetes 密鑰,您必須先刪除現有密鑰,然後按照「建立 Kubernetes 密鑰」中的步驟重新建立密鑰。