本主題說明如何將機密資料儲存在 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,在叢集中儲存機密資料。
- 建立要儲存在 Kubernetes Secret 中的檔案。檔案必須使用支援的格式,且副檔名須符合這篇文章的規定。
- 執行
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
建立後,系統最多可能需要 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 |
儲存在屬性檔案中的金鑰名稱。 |
在本範例中,「指派訊息」政策會擷取 apikey 值 OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z,並將其儲存在流程變數 my-apikey 中。
更新密鑰
由於 kubectl 不支援更新 Kubernetes 密鑰,您必須先刪除現有密鑰,然後按照「建立 Kubernetes 密鑰」中的步驟重新建立密鑰。