如何共用 OAuth 用戶端

本頁面說明如何與機構內的其他應用程式共用 OAuth 用戶端。

總覽

在專案之間共用 OAuth 用戶端,表示多個受 Identity-Aware Proxy (IAP) 保護的應用程式會使用同一個自訂 OAuth 用戶端,而不是為每個應用程式建立新的 OAuth 用戶端。這種做法可簡化管理作業,特別是對於擁有許多應用程式的機構而言。

設定 IAP 時,您可以使用下列其中一種 OAuth 用戶端類型:

  • Google 代管的 OAuth 用戶端:IAP 預設會自動使用這個用戶端。這個內建選項不需要手動建立用戶端,但有兩項主要限制:

    • 僅允許貴機構內的使用者 (內部使用者) 存取
    • 同意畫面顯示 Google Cloud 品牌宣傳內容,而非貴機構的品牌宣傳內容
  • 自訂 OAuth 用戶端:由您自行建立及管理。這個選項:

    • 可供多個應用程式共用
    • 可自訂同意畫面上的品牌宣傳
    • 支援外部使用者 (機構外) 存取

建立自訂 OAuth 用戶端時,您可以彈性地將其用於單一應用程式,或在多個應用程式之間共用。共用自訂 OAuth 用戶端有幾項優點:

  • 減少管理多位客戶的行政負擔
  • 簡化為不應存取「憑證」頁面的團隊成員啟用 IAP 的程序
  • 方便以程式輔助方式 (非透過瀏覽器) 存取受 IAP 保護的應用程式

如要瞭解如何建立 OAuth 用戶端,請參閱「為 IAP 建立 OAuth 用戶端」。如要進一步瞭解 Google 代管的 OAuth 用戶端,請參閱「自訂 OAuth 設定以啟用 IAP」一文。

事前準備

完成「建立 OAuth 用戶端」中的步驟,建立新的 OAuth 用戶端,或使用現有的 OAuth 用戶端。

程式輔助存取機制

設定 OAuth 用戶端以透過程式存取,允許非瀏覽器應用程式向受 IAP 保護的資源進行驗證。這樣一來,指令碼、自動化工作和後端服務就能安全存取受保護的應用程式,不必進行互動式使用者登入。

您可以在資源階層的任何層級套用這些驗證設定:機構資料夾專案

如需實作步驟,請參閱程式輔助驗證指南應用程式內結帳服務設定管理說明文件。

gcloud

  1. 準備含有 OAuth 用戶端 ID 的設定檔:

    cat << EOF > SETTINGS_FILENAME
      access_settings:
        oauth_settings:
          programmatic_clients: [clientId1, clientId2, ..]
    EOF
    
  2. 使用 gcloud iap settings set 指令套用設定:

    gcloud iap settings set SETTINGS_FILENAME \
      [--organization=ORGANIZATION | --folder=FOLDER | --project=PROJECT] \
      [--resource-type=RESOURCE_TYPE] \
      [--service=SERVICE] \
      [--version=VERSION]
    

    範例指令:

    # Organization level
    gcloud iap settings set SETTINGS_FILENAME --organization=ORGANIZATION
    
    # Folder level
    gcloud iap settings set SETTINGS_FILENAME --folder=FOLDER
    
    # Project level (web resources)
    gcloud iap settings set SETTINGS_FILENAME \
      --project=PROJECT \
      --resource-type=iap_web
    
    # App Engine service in a project
    gcloud iap settings set SETTINGS_FILENAME \
      --project=PROJECT \
      --resource-type=app-engine \
      --service=SERVICE
    

    其中:

    • SETTINGS_FILENAME:您準備的 YAML 檔案。
    • ORGANIZATION:機構 ID
    • FOLDER:資料夾 ID
    • PROJECT:專案 ID
    • RESOURCE_TYPE:IAP 資源類型 (app-engineiap_webcomputeorganizationfolder)
    • SERVICE:服務名稱 (computeapp-engine 資源類型為選填)
    • VERSION:版本名稱 (不適用於 computeapp-engine 則為選填)

API

  1. 準備設定 JSON 檔案:

    cat << EOF > iap_settings.json
    {
      "access_settings": {
        "oauth_settings": {
          programmatic_clients: [clientId1, clientId2, ..]
        }
      }
    }
    EOF
    
  2. 取得資源名稱:

    gcloud iap settings get \
      [--organization=ORGANIZATION | --folder=FOLDER | --project=PROJECT] \
      [--resource-type=RESOURCE_TYPE] \
      [--service=SERVICE] \
      [--version=VERSION]
    
  3. 使用資源名稱更新設定:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @iap_settings.json \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.oauthSettings.programmaticClients"
    

    其中:

    • ORGANIZATION:機構 ID
    • FOLDER:資料夾 ID
    • PROJECT:專案 ID
    • RESOURCE_TYPE:IAP 資源類型 (app-engineiap_webcomputeorganizationfolder)
    • SERVICE:服務名稱 (computeapp-engine 資源類型為選填)
    • VERSION:版本名稱 (不適用於 computeapp-engine 則為選填)

設定完成後,請使用您設定的任一 OAuth 用戶端 ID 登入應用程式。詳情請參閱「程式輔助驗證」。

瀏覽器存取權

如要透過Google Cloud 控制台啟用 IAP,以便使用用戶端 ID 和密鑰,請完成下列操作:

風險

雖然在應用程式之間共用用戶端很方便,但缺點是會有一些風險。 本節將概述共用用戶端的潛在風險及如何降低風險。

單點故障

多個應用程式使用同一個 OAuth 用戶端會產生單一依附點。要是不當刪除或修改用戶端,使用該用戶端的每一個應用程式都會受到影響。已刪除的 OAuth 用戶端可在 30 天內還原。

如要有效管理這項作業風險,請採取下列措施:

這主要是營運風險,而非安全風險。只要有適當的存取控管和監控機制,共用 OAuth 用戶端帶來的便利性和管理效益,通常會大於這項考量。

用戶端密鑰外洩

共用用戶端必須將您用戶端的密碼和其他人及指令碼共用,而這會增加您用戶端密碼外洩的風險。IAP 無法區別憑證是由您的應用程式建立,還是由外洩用戶端密碼建立的。

為降低這類風險,請採取下列措施:

  • 妥善保護用戶端密鑰,絕不以純文字形式儲存
  • 使用 Secret Manager 實作安全的憑證管理機制
  • 使用 Cloud 稽核記錄監控 IAP 資源的存取權
  • 外洩的用戶端密鑰只會影響驗證,不會影響資源存取授權。如果懷疑密鑰外洩,請立即重設。

如要以程式輔助方式存取受 IAP 保護的資源,建議使用服務帳戶 JWT 驗證,而非與個別使用者共用 OAuth 用戶端密鑰。這個方法可提供更完善的安全隔離,同時保留應用程式共用 OAuth 用戶端的好處。

權限範圍注意事項

共用 OAuth 用戶端時,所有應用程式都會使用相同的權限範圍。如果是應用程式內商品,openidemail 是唯一必要的範圍。單就這項考量而言,並非重大風險,但請務必瞭解:

  • OAuth 僅用於 IAP 中的「驗證」(驗證身分);「授權」(資源存取權)則透過 IAM 政策另外處理
  • 即使驗證憑證遭到盜用,攻擊者仍須具備適當的 IAM 權限,才能存取受保護的資源
  • 將用戶端限制為僅限必要的 openidemail 範圍,有助於減少潛在的安全影響