本頁內容適用於 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 說明文件。
如何取得 API 金鑰
以下範例說明如何取得 API 金鑰,用於驗證對目標服務的 API 呼叫 (透過 Apigee Adapter for Envoy 代理)。
1. 登入 Apigee
- 登入 Apigee 使用者介面。
- 選取您用於佈建 Apigee Adapter for Envoy 的相同機構。
2. 可建立開發人員
您可以請現有開發人員進行測試,也可以按照下列步驟建立新開發人員:
- 在側邊導覽選單中,選取「發布」>「開發人員」。
- 按一下「+ 開發人員」。
- 填寫對話方塊,建立新的開發人員。您可以選擇任何開發人員名稱/電子郵件地址。
3. 可建立 API 產品
請按照下方提供的產品建立範例操作。
- 在側邊導覽選單中,依序選取「發布」>「API 產品」。
- 按一下「+建立」。
- 請按照下列指示填寫「產品詳細資料」部分。下表僅列出必填欄位:
欄位 值 說明 名稱 httpbin-product
API 產品的專屬名稱。 顯示名稱 httpbin product
要在 UI 或其他顯示環境中顯示的描述性名稱。 存取權 Public
在本例中,公開是合適的選擇。 - 在「Operations」部分中,按一下「+ADD AN OPERATION」。
- 在「來源」部分,選取「遠端服務」。
- 切換「來源」切換鈕,即可在「遠端服務」欄位中手動輸入遠端服務的名稱。
- 在「Remote Service」(遠端服務) 欄位中,輸入遠端服務的名稱。這是轉接程式將傳入 HTTP 要求轉送至的目標服務。如要進行測試,請搭配 Kubernetes 使用
httpbin.org
或httpbin.default.svc.cluster.local
。 - 在「Operation」(作業) 部分中,輸入路徑的
/
。如要瞭解路徑選項,請參閱「設定資源路徑」。 - 按一下「儲存」儲存作業。
- 按一下「儲存」儲存 API 產品。
詳情請參閱「管理 API 產品」。
4. 可建立開發人員應用程式
開發人員應用程式包含透過介面卡發出 API Proxy 呼叫時所需的 API 金鑰。
- 選取側邊導覽選單中的「發布應用程式」。
- 按一下「+ 應用程式」。
- 請按照下列指示填寫「應用程式詳細資料」部分。下表僅列出必填欄位:
- 在「憑證」部分中,按一下「+ 新增產品」,然後選取剛設定的產品:httpbin-product。
- 點選「建立」。
- 在「憑證」下方,按一下「金鑰」旁邊的「顯示」。
- 複製消費者金鑰的值。這個值是 API 金鑰,您將透過 Apigee Adapter for Envoy,使用這個金鑰對
httpbin
服務發出 API 呼叫。
名稱 | httpbin-app
|
開發人員 | 選取先前建立的開發人員,或從清單中選擇任何開發人員。 |
使用以 JWT 為基礎的驗證
您可以使用 JWT 權杖發出經過驗證的 API Proxy 呼叫,不必使用 API 金鑰。本節說明如何使用 apigee-remote-service-cli token
指令建立、檢查及輪替 JWT 權杖。在 Apigee Hybrid 環境中,您可以使用這項指令建立 Kubernetes Secret,以保存 JWT。
總覽
Envoy 會使用 JWT 驗證篩選器處理 JWT 驗證和驗證作業。
通過驗證後,Envoy ext-authz
篩選器會將要求標頭和 JWT 傳送至 apigee-remote-service-envoy
。系統會比對 JWT 的 api_product_list
和 scope
宣告與 Apigee API 產品,授權要求目標。
建立 Apigee JWT 權杖
您可以使用 CLI 建立 Apigee JWT 權杖:
apigee-remote-service-cli token create -c config.yaml --id $KEY --secret $SECRET
或是使用標準 OAuth 權杖端點。Curl 範例:
curl https://org-env.apigee.net/remote-token/token -d '{"client_id":"myclientid","client_secret":"myclientsecret","grant_type":"client_credentials"}' -H "Content-type: application/json"
使用 JWT 權杖
取得權杖後,只要將權杖傳送至授權標頭中的 Envoy 即可。範例:
curl localhost:8080/httpbin/headers -i -H "Authorization:Bearer $TOKEN"
JWT 權杖失敗
Envoy 拒絕
如果 Envoy 拒絕權杖,您可能會看到類似以下的訊息:
Jwks remote fetch has failed
如果是,請確認 Envoy 設定的 remote_jwks
區段包含有效 URI,且 Envoy 可以連線至該 URI,並確認您在安裝 Apigee Proxy 時已正確設定憑證。您應該可以直接使用 GET 呼叫呼叫 URI,並收到有效的 JSON 回應。
範例:
curl https://myorg-eval-test.apigee.net/remote-service/certs
來自 Envoy 的其他訊息可能如下所示:
- 「Audiences in Jwt are not allowed」(不允許使用 JWT 中的目標對象)
- 「Jwt issuer is not configured」(未設定 JWT 核發者)
這些是 Envoy 設定中的需求,您可能需要修改。
檢查權杖
您可以使用 CLI 檢查權杖。範例
apigee-remote-service-cli -c config.yaml token inspect -f path/to/file
或
apigee-remote-service-cli -c config.yaml token inspect <<< $TOKEN
偵錯
請參閱「有效的 API 金鑰失敗」。使用自己的身分識別提供者
根據預設,Apigee Adapter for Envoy 會使用 remote-token
API Proxy 做為身分識別提供者服務,驗證用戶端應用程式,並根據 OAuth 2.0 用戶端憑證授權類型提供 JWT 權杖。不過,在某些情況下,您可能無法使用 remote-token
Proxy。如果必須使用 Apigee 提供的識別資訊提供者以外的服務,可以設定介面卡來使用其他識別資訊提供者。如要進一步瞭解這個非 Apigee 識別資訊提供者用途,以及必要的設定,請參閱 Apigee 社群的這篇文章:
搭配 Apigee Envoy 介面卡使用您自己的識別資訊提供者。
記錄
您可以調整 $REMOTE_SERVICE_HOME/apigee-remote-service-envoy 服務的記錄層級。 所有記錄都會傳送至 stderr。
元素 | 必填 | 說明 |
---|---|---|
-l, --log-level | 有效層級:debug、info、warn、error。 | 調整記錄層級。預設值:info |
-j, --json-log | 以 JSON 記錄的形式發出記錄輸出內容。 |
Envoy 提供記錄功能。詳情請參閱下列 Envoy 說明文件連結:
變更政策密鑰名稱
部署至叢集的 Kubernetes 密鑰包含介面卡驗證與遠端服務 Proxy 通訊時所需的憑證。這個祕密需要可設定的磁碟區掛接點。根據預設,掛接點為 /policy-secret
。
如要變更掛接點,請按照下列步驟操作:
- 執行下列指令:
$REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/new-mount_point_name
例如:
$REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/my-mount-point
- 在編輯器中開啟
$CLI_HOME/samples/apigee-envoy-adapter.yaml
。 - 將掛接點名稱變更為新名稱:
volumeMounts: - mountPath: /config name: apigee-remote-service-envoy readOnly: true - mountPath: /opt/apigee/tls name: tls-volume readOnly: true - mountPath: /my-mount-point name: policy-secret readOnly: true
- 儲存檔案並套用至服務網格:
kubectl apply -f $REMOTE_SERVICE_HOME/samples/apigee-envoy-adapter.yaml
使用網路 Proxy
您可以在 apigee-remote-service-envoy 二進位檔的環境中,使用 HTTP_PROXY 和 HTTPS_PROXY 環境變數插入 HTTP Proxy。使用這些變數時,您也可以使用 NO_PROXY 環境變數,排除透過 Proxy 傳送的特定主機。
HTTP_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port] HTTPS_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port] NO_PROXY=127.0.0.1,localhost
請注意,Proxy 必須可從 apigee-remote-service-envoy 存取。
指標和數據分析簡介
Prometheus 指標端點位於 :5001/metrics
。您可以設定這個通訊埠編號。請參閱「設定檔」。
Envoy 分析
如要瞭解如何取得 Envoy Proxy Analytics 資料,請參閱下列連結:
Istio 數據分析
如要瞭解如何取得 Envoy Proxy Analytics 資料,請參閱下列連結:
Apigee 數據分析
Apigee Remote Service for Envoy 會將要求統計資料傳送至 Apigee,以進行分析處理。 Apigee 會以相關聯的 API 產品名稱回報這些要求。
如要瞭解 Apigee Analytics,請參閱「Analytics 服務總覽」。
支援多租戶環境
您現在可以啟用介面卡,在 Apigee 機構中為多個環境提供服務。這項功能可讓您使用與一個 Apigee 機構相關聯的 Apigee Adapter for Envoy,為多個環境提供服務。在這項變更之前,一個介面卡一律會繫結至一個 Apigee 環境。
如要設定多個環境支援,請在 config.yaml
檔案中,將 tenant:env_name
的值變更為 "*"
。例如:
- 在編輯器中開啟
config.yaml
檔案。 - 將
tenant.env_name
的值變更為"*"
。例如:apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | tenant: remote_service_api: https://apitest.mydomain.net/remote-service org_name: my-org env_name: "*"" allow_unverified_ssl_cert: true analytics: collection_interval: 10s auth: jwt_provider_key: https://apitest.mydomain.net/remote-token/token
- 儲存檔案。
- 套用檔案:
kubectl apply -f $CLI_HOME/config.yaml
設定多環境模式時,您也必須設定 Envoy,在 envoy-config.yaml
檔案的 virtual_hosts:routes
部分新增下列中繼資料,將適當的環境值傳送至轉接程式。例如:
- 使用 CLI 產生
envoy-config.yaml
檔案。例如:$CLI_HOME/apigee-remote-service-cli samples create \ -t envoy-1.16 -c ./config.yaml --out myconfigs
- 開啟產生的檔案 (名為
envoy-config.yaml
)。 - 在檔案的
virtual_host
或routes
區段中新增下列中繼資料:typed_per_filter_config: envoy.filters.http.ext_authz: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute check_settings: context_extensions: apigee_environment: test
以下範例說明如何為定義多個路徑的
virtual_host
設定,其中每個路徑都會將流量傳送至特定環境:filter_chains: - filters: - name: envoy.filters.network.http_connection_manager typed_config: "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager stat_prefix: ingress_http route_config: virtual_hosts: - name: default domains: "*" routes: - match: { prefix: /test } route: cluster: httpbin typed_per_filter_config: envoy.filters.http.ext_authz: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute check_settings: context_extensions: apigee_environment: test - match: { prefix: /prod } route: cluster: httpbin typed_per_filter_config: envoy.filters.http.ext_authz: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute check_settings: context_extensions: apigee_environment: prod
- 視需要重複上一個步驟,新增其他環境。
- 儲存檔案並套用。
擷取自訂報表的資料
轉接程式支援將 Envoy 中繼資料傳遞至 Apigee 的資料擷取功能,該功能會將您在指定變數中擷取的資料傳送至 Apigee Analytics,以用於自訂報表。這項功能與 Apigee 資料擷取政策類似。
如要使用這項功能,請按照下列步驟操作:
- 建立 Data Collector REST 資源。
- 使用 Apigee datacollectors API 定義資料擷取變數。
- 如果尚未產生
envoy-config.yaml
檔案,請使用 CLI 產生。例如:$CLI_HOME/apigee-remote-service-cli samples create \ -t envoy-1.16 -c ./config.yaml --out myconfigs
- 開啟產生的檔案 (名為
envoy-config.yaml
)。 - 使用 Envoy 篩選器,在
envoy.filters.http.apigee.datacapture
命名空間中設定自訂變數的值。 舉例來說,您可以使用「Header to Metadata」篩選器或「Lua」篩選器。 如要進一步瞭解這些篩選器,請參閱「標頭至中繼資料」和「Lua」。自訂變數名稱的格式必須為
dc.XXXXX
。中繼資料篩選器標頭範例:
- name: envoy.filters.http.header_to_metadata typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.header_to_metadata.v3.Config request_rules: - header: "Host" on_header_present: metadata_namespace: envoy.filters.http.apigee.datacapture key: dc.host # host (without the prefix) also works type: STRING remove: false
Lua 篩選器範例:
- name: envoy.filters.http.lua typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua inline_code: | function envoy_on_request(request_handle) metadata = request_handle:streamInfo():dynamicMetadata() metadata:set("envoy.filters.http.apigee.datacapture", "dc.test", "A test string.") end
- 將所需濾鏡新增至檔案。請參閱下方的範例。
- 儲存檔案並套用。
在介面卡和 Apigee 執行階段之間設定 mTLS
您可以在轉接程式 config.yaml
檔案的 tenant
區段中提供用戶端 TLS 憑證,在轉接程式和 Apigee 執行階段之間使用 mTLS。這項異動適用於所有支援的 Apigee 平台。此外,這項功能也會為 Apigee Edge for Private Cloud 平台啟用 mTLS 分析。例如:
tenant: tls: ca_file: path/ca.pem cert_file: path/cert.pem key_file: path/key.pem allow_unverified_ssl_cert: false