如何共用 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 保護的資源進行驗證。這樣一來,指令碼、自動化工作和後端服務就能在無需使用者互動登入的情況下,安全存取受保護的應用程式。

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

如需導入步驟,請參閱程式碼驗證指南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 登入應用程式。詳情請參閱「程式輔助驗證」。

瀏覽器存取權

如要讓 IAP 透過Google Cloud 主控台使用您的用戶端 ID 和密碼,請完成下列操作說明:

風險

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

單點故障

多個應用程式使用同一個 OAuth 用戶端可能會有單點依附的問題。如果不當刪除或修改用戶端,使用該用戶端的每個應用程式都會受到影響。您可以在 30 天內還原已刪除的 OAuth 用戶端。

如要有效管理這類作業風險,請採取下列做法:

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

用戶端密碼外洩

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

如要降低這類風險,請採取以下措施:

  • 保護用戶端密碼等機密資訊,並避免以明文形式儲存
  • 使用 Secret Manager 實作安全的憑證管理
  • 使用 Cloud 稽核記錄監控 IAP 資源的存取情況
  • 外洩的用戶端密鑰只會影響驗證,不會影響存取資源的授權。如果您懷疑密碼已外洩,請立即重設。

如要透過程式碼存取受 IAP 保護的資源,建議您使用服務帳戶 JWT 驗證,而非與個別使用者共用 OAuth 用戶端密鑰。這種做法可提供更完善的安全隔離機制,同時保留應用程式共用 OAuth 用戶端的優點。

權限範圍考量

共用 OAuth 用戶端時,所有應用程式都會使用相同的權限範圍。對於 IAP,openidemail 是唯一的必要範圍。這項考量本身並非重大風險,但請務必瞭解:

  • OAuth 僅用於 IAP 中的驗證 (驗證身分);授權 (資源存取權) 則透過 IAM 政策 個別處理。
  • 即使驗證憑證遭到入侵,攻擊者仍需要適當的 IAM 權限才能存取受保護的資源
  • 將用戶端限制為僅包含必要的 openidemail 範圍,有助於限制潛在的安全性影響