本主題說明如何將機密資料儲存在 Kubernetes 密鑰中,並在 API 代理程式流程中從流程變數擷取資料。
簡介
有時您可能需要儲存資料,以便在執行階段擷取資料,而不會過期的資料不應在 API 代理程式邏輯中硬式編碼。其中一個選項是使用混合鍵/值對應 (KVM) 功能。如果您已使用 Kubernetes 在機密資料的自訂金庫中管理密鑰,建議您考慮使用本主題所述的 Kubernetes 密鑰功能。就像 KVM 資料一樣,您可以在 API 代理程式流程變數中存取 Kubernetes 密鑰資料。
哪些類型的資料可儲存在 Kubernetes Secret 中?
Apigee hybrid 僅允許您將下列類型的資料檔案儲存在 Kubernetes 秘密中。包括:
檔案格式 | 支援的副檔名 |
---|---|
傳輸層安全標準 (TLS) 憑證和金鑰檔案 | *.crt 、*.key 和 *.pem |
資源檔案 | *.properties |
屬性檔案是包含鍵/值組合的檔案。例如:
username=admin password=1f2d1e2e7df
建立 Kubernetes 密鑰
本節說明如何建立 Kubernetes 機密,以便在叢集中儲存機密資料。
- 建立要儲存在 Kubernetes 機密資料中的檔案。檔案必須使用「可儲存在 Kubernetes 機密中的資料類型」一文中列出的支援格式和副檔名。
- 執行
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:要納入 Secret 中的屬性檔案名稱。
- 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
建立後,系統最多可能需要 90 秒,變更才會反映在所有叢集中。訊息處理程序會每 30 秒輪詢一次機密金鑰變更。如果偵測到變更,快取就會更新。
從機密資料擷取資料
密鑰建立並可供使用後 (通常在建立後約 90 秒),您就可以在儲存密鑰的機構/環境中,透過 API 代理程式流程中的流程變數存取密鑰資料。舉例來說,假設您的 Secret 包含名為 credentials.properties
的 *.properties
檔案,其中含有 API 金鑰,如下所示:
apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z
接著,您可以使用「Assign Message」等政策,從資料流變數中擷取 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 |
儲存在屬性檔案中的鍵名稱。 |
在本例中,指派訊息政策會擷取 apikey
值 OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z
,並將其儲存在流程變數 my-apikey
中。
更新密鑰
由於 kubectl
不支援更新 Kubernetes 密鑰,您必須先刪除現有的密鑰,然後按照「建立 Kubernetes 密鑰」中的步驟重新建立密鑰。