作業指南

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

如何取得 API 金鑰

以下範例說明如何取得可用來驗證資料的 API 金鑰 透過 Apigee Adapter for Envoy 對目標服務進行 API 呼叫。

1. 登入 Apigee

  1. 在瀏覽器中開啟 Apigee UI。
  2. 進入使用者介面後,請選取您用來設定 Envoy 專用 Apigee Adapter 的機構。

2. 可建立開發人員

您可以使用現有的開發人員來測試,或建立新的開發人員,方法如下:

  1. 選取「發布」>「發布」開發人員
  2. 按一下「+ 開發人員」
  3. 填寫對話方塊,建立新的開發人員。您可以視需要使用任何開發人員名稱/電子郵件地址。

3. 可建立 API 產品

請遵循下方提供的「產品建立」範例。其他參考資訊 關於 API 產品設定

  1. 選取「發布」>「發布」API 產品
  2. 按一下「+ API 產品」
  3. 按照下圖所示填寫「產品詳細資料」頁面。
  4. 欄位
    名稱 httpbin-product
    顯示名稱 httpbin product
    環境 your_environment

    請設為您佈建 Envoy Apigee Adapter for Envoy 時使用的環境。

    存取 Private
    配額 每分鐘 5 個要求

    另請參閱「配額」。

  5. 在「Apigee 遠端服務目標」專區中,按一下「新增 Apigee 遠端服務目標」
  6. 在 Apigee 遠端服務目標對話方塊中,新增下列值:
    屬性 說明
    目標名稱 輸入 目標服務例如:httpbin.org Envoy Proxy 前方的目標端點。
    路徑 在服務上輸入要比對的資源路徑。適用對象 範例:/headers 要比對目標端點的要求路徑。對此路徑的 API Proxy 呼叫 會與這個 API 產品相符
  7. 按一下 [儲存]

4. 可建立開發人員應用程式

  1. 選取「發布」>「發布」應用程式
  2. 按一下「+ 應用程式」
  3. 按照下圖所示填寫開發人員應用程式頁面。除非收到指示,否則請勿儲存。
  4. 名稱 httpbin-app
    顯示名稱 httpbin app
    開發人員版 選取您先前建立的開發人員,或從清單中選取所需的開發人員。
  5. 接著,將 API 產品新增至應用程式:
    1. 在「憑證」部分中,按一下「+ 新增產品」,然後選取產品。 最新設定:httpbin-product
    2. 按一下「建立」
    3. 在「憑證」下方,按一下「金鑰」旁邊的「顯示」
    4. 複製用戶端金鑰的值。這是 API 金鑰 您稍後會使用這個金鑰對 httpbin 服務發出 API 呼叫。

    關於 API 產品

    API 產品是主要控管機制 Apigee Remote Service 的資料點。 建立 API 產品並繫結至 您建立的政策 適用於您設定 Apigee Adapter for Envoy 的任何要求 來處理。

    API 產品定義

    在 Apigee 中定義 API 產品時,您可以設定多個參數。 將用於評估要求:

    • 目標
    • 要求路徑
    • 配額
    • OAuth 範圍

    遠端服務目標

    如果請求同時符合指定目標,則 API 產品定義會套用到請求 繫結 (例如 httpbin.org) 和要求路徑 (例如 /httpbin)。 系統會將可能目標的清單儲存為屬性,並儲存在 API 產品。

    根據預設,Apigee 遠端服務會檢查 Envoy 的特殊 :authority (host) 標頭 目標清單但可設為使用其他標頭

    API 資源路徑

    輸入的路徑會根據下列規則相符:

    • 單一個斜線 (/) 會比對任何路徑。
    • * 適用於任何位置,且在區段內 (斜線之間) 相符。
    • ** 於結尾有效,且比對到該行結尾的任何項目。

    配額

    配額可指定應用程式可提交要求訊息的數量 每小時、每天、每週或每月的 API 數量。如果應用程式達到配額上限 就拒絕後續的 API 呼叫。

    配額用途

    設定配額,即可強制規定用戶端可發出的要求數量 達到一定時間條件配額通常用於強制執行業務合約或服務水準協議 而非運算流量管理。舉例來說 配額可用於限制免費服務的流量 付費客戶

    API 產品中定義配額

    您可以在 API 產品中設定配額參數。例如,建立 API 產品中,您可以視需要設定允許的配額限制、時間範圍和間隔。

    由於 API 金鑰會對應回 API 產品,因此每次 API 金鑰驗證 適當的配額計數器可以減少 (如果在關聯產品中定義了配額)。

    與 Apigee 執行階段不同,「產品」定義中輸入的「配額」: 由 Apigee Remote Service 自動執行。如果要求已授權 要求會計入允許的配額。

    配額維護位置

    配額是由遠端服務程序在本機進行和檢查,而且會以非同步的方式進行 持續推送軟體更新這表示配額不足且可能 如果您有多個維護配額的遠端服務,某些服務就會遭到覆寫。如果 Apigee 執行階段的連線中斷,本機配額會繼續以獨立方式運作 限制。

    OAuth 範圍

    如果您使用 JWT 權杖,可以將權杖限定為許可 OAuth 範圍的子集。 系統會根據 API 產品的範圍,檢查指派給核發 JWT 權杖的範圍。

    關於開發人員應用程式

    設定 API 產品後,您將建立與開發人員相關聯的應用程式。應用程式 可讓用戶端透過 API 金鑰或 JWT 權杖存取相關聯的 API 產品。

    使用 JWT 式驗證

    您可以使用 JWT 權杖執行通過驗證的 API Proxy 呼叫,而不使用 API 金鑰。這個 本節說明如何使用 apigee-remote-service-cli token 指令 可以建立、檢查及輪替 JWT 權杖。

    總覽

    JWT 驗證和驗證是由 Envoy 使用其 JWT 驗證篩選器

    驗證完畢後,Envoy ext-authz 篩選器會將要求標頭和 JWT 傳送至 apigee-remote-service-envoy。和 JWT 的 api_product_listscope 憑證附加資訊相符 對 Apigee API 產品提出要求,來授權給要求目標。

    建立 Apigee JWT 權杖

    Apigee JWT 權杖可使用 CLI 建立:

    $CLI_HOME/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 權杖

    取得權杖後,只要在 Authorization 標頭中將該權杖傳遞至 Envoy 即可。範例:

    curl localhost:8080/httpbin/headers -i -H "Authorization:Bearer $TOKEN"

    JWT 權杖失敗

    Envoy 拒絕

    如果 Envoy 拒絕權杖,系統可能會顯示如下的訊息:

    Jwks remote fetch is failed

    如果是的話,請確認您的 Envoy 設定在 remote_jwks 部分,方便 Envoy 存取,而且你能順利存取 會在您安裝 Apigee Proxy 時設定憑證。應能 透過 GET 呼叫直接呼叫 URI,並取得有效的 JSON 回應。

    範例:

    curl https://myorg-eval-test.apigee.net/remote-service/certs

    Envoy 傳送的其他訊息看起來可能會像這樣:

    • 「不允許使用 Jwt 的目標對象」
    • 「未設定 Jwt 核發者」

    這些是可能需要修改的 Envoy 設定要求。

    檢查權杖

    您可以使用 CLI 檢查權杖。範例

    $CLI_HOME/apigee-remote-service-cli -c config.yaml token inspect -f path/to/file

    $CLI_HOME/apigee-remote-service-cli -c config.yaml token inspect <<< $TOKEN

    偵錯

    請參閱「有效的 API 金鑰失敗」一節。

    記錄

    您可以在 $REMOTE_SERVICE_HOME/apigee-remote-service-envoy 服務調整記錄層級。 所有記錄都會傳送至 stdout 和 stderr。

    元素 必填 說明
    -l、--log-level 有效層級:偵錯、資訊、警告、錯誤。 調整記錄層級。預設:資訊
    -j、--json-log 以 JSON 記錄的形式發出記錄輸出。

    Envoy 提供記錄功能。詳情請參閱下列 Envoy 說明文件連結:

    使用網路 Proxy

    您可以使用 HTTP_PROXY 和 HTTPS_PROXY 環境變數來插入 HTTP Proxy 就在 apigee-remote-service-envoy 二進位檔使用這些元件時,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 數據分析的資訊 資料:

    Istio 數據分析

    下方連結提供取得 Envoy Proxy 數據分析的資訊 資料:

    Apigee 數據分析

    Apigee Remote Service for Envoy 會將要求統計資料傳送至 Apigee 進行數據分析。 Apigee 會根據相關聯的 API 產品名稱回報這些要求。

    如要瞭解 Apigee 數據分析 請參閱「Analytics 服務總覽」。

    多用戶群環境支援

    您現在可以啟用轉接器,為 部署於 Apigee 機構的環境這項功能可讓您使用 與一個 Apigee 機構相關聯的 Envoy 轉接器,可為多個環境提供服務。之前 這項變更,一個轉接程式總是會連結至一個 Apigee 環境。

    如要設定多個環境支援,請變更 config.yamltenant:env_name* 的值 檔案。例如:

    1. 在編輯器中開啟 config.yaml 檔案。
    2. tenant.env_name 的值變更為 *。例如:
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: apigee-remote-service-envoy
        namespace: apigee
      data:
        config.yaml: |
          tenant:
            remote_service_api: https://myorg-myenv.apigee.net/remote-service
            org_name: apigee-docs-hybrid-a
            env_name: *
            allow_unverified_ssl_cert: true
          analytics:
            collection_interval: 10s
          auth:
            jwt_provider_key: https://myorg-myenv.apigee.net.net/remote-token/token
    3. 儲存檔案。
    4. 套用檔案:
      kubectl apply -f $CLI_HOME/config.yaml

    設定多環境模式時,您必須一併設定 Envoy 傳送適當的 將環境值新增至轉接程式,方法是將下列中繼資料新增至 envoy-config.yaml 檔案的 virtual_hosts:routes 部分。例如:

    1. 使用 CLI 產生 envoy-config.yaml 檔案。例如:
      $CLI_HOME/apigee-remote-service-cli samples create \
        -t envoy-1.16 -c ./config.yaml --out myconfigs
    2. 開啟產生的檔案 (名稱為 envoy-config.yaml)。
    3. 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
    4. 視需要重複執行最後一個步驟,新增其他環境。
    5. 儲存並套用檔案。

    在轉接程式和 Apigee 執行階段之間設定 mTLS

    您可以在tenant 轉接器的 config.yaml 檔案,以便在轉接程式和 Apigee 執行階段之間使用 mTLS。這個 這項變更會套用至所有支援的 Apigee 平台還能啟用 mTLS 進行分析 適用於 Apigee Edge 的私有雲平台例如:

    tenant:
      tls:
        ca_file: path/ca.pem
        cert_file: path/cert.pem
        key_file: path/key.pem
        allow_unverified_ssl_cert: false