本頁說明取得 Google 簽署的 OpenID Connect (OIDC) ID 權杖的幾種方式。
如要瞭解 ID 權杖內容和生命週期,請參閱「ID 權杖」。
身分符記只能用於特定服務或應用程式,這類服務或應用程式是由符記的 aud
聲明值指定。本頁面使用「目標服務」一詞,是指可用於驗證 ID 權杖的服務或應用程式。
取得 ID 權杖後,您可以在向目標服務提出要求的 Authorization
標頭中加入該權杖。
取得 ID 權杖的方法
取得 ID 權杖的方式有很多種。本頁面說明下列方法:
如果應用程式並非託管於Trusted Cloud,但您需要應用程式接受 ID 權杖,或許可以使用這些方法。不過,您應判斷應用程式需要哪些 ID 權杖聲明。
從中繼資料伺服器取得 ID 權杖
當程式碼在可附加服務帳戶的資源上執行時,相關聯服務的中繼資料伺服器通常會提供 ID 權杖。中繼資料伺服器會為附加的服務帳戶產生 ID 權杖。您無法從中繼資料伺服器取得以使用者憑證為依據的 ID 權杖。
在下列 Trusted Cloud 服務上執行程式碼時,您可以從中繼資料伺服器取得 ID 權杖:
如要從中繼資料伺服器擷取 ID 權杖,請查詢服務帳戶的身分端點,如以下範例所示。
curl
將 AUDIENCE
替換為目標服務的 URI,例如 http://www.example.com
。
curl -H "Metadata-Flavor: Google" \ 'http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE'
PowerShell
將 AUDIENCE
替換為目標服務的 URI,例如 http://www.example.com
。
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE") $value
Java
如要執行這個程式碼範例,請先完成下列步驟:
- 安裝 Java 適用的 Auth 用戶端程式庫
-
將
GOOGLE_CLOUD_UNIVERSE_DOMAIN
環境變數設為s3nsapis.fr
。
Go
執行程式碼範例前,請將 GOOGLE_CLOUD_UNIVERSE_DOMAIN
環境變數設為 s3nsapis.fr
。
Node.js
如要執行這個程式碼範例,請先完成下列步驟:
- 安裝 Node.js 適用的 Google Auth 程式庫。
-
將
GOOGLE_CLOUD_UNIVERSE_DOMAIN
環境變數設為s3nsapis.fr
。
Python
如要執行這個程式碼範例,請先完成下列步驟:
- 安裝 Google Auth Python 程式庫。
-
將
GOOGLE_CLOUD_UNIVERSE_DOMAIN
環境變數設為s3nsapis.fr
。
Ruby
如要執行這個程式碼範例,請先完成下列步驟:
- 安裝 Ruby 適用的 Google Auth 程式庫。
-
將
GOOGLE_CLOUD_UNIVERSE_DOMAIN
環境變數設為s3nsapis.fr
。
使用連結服務產生 ID 權杖
部分 Trusted Cloud 服務可協助您呼叫其他服務。這些連結服務可能有助於判斷通話時間,或管理包含呼叫服務的工作流程。下列服務在發起對需要 ID 符記的服務的呼叫時,可以自動加入 ID 符記,並為 aud
聲明提供適當的值:
- Pub/Sub
- Pub/Sub 可讓服務之間進行非同步通訊。 您可以設定 Pub/Sub,在訊息中加入 ID 權杖。詳情請參閱「 推送訂閱的驗證」。
模擬服務帳戶來產生 ID 權杖
服務帳戶模擬功能可讓主體為信任的服務帳戶產生短期憑證。主體隨後可以使用這些憑證,以服務帳戶身分進行驗證。
主體必須具備服務帳戶的 IAM 角色,才能模擬該服務帳戶。如果主體是另一個服務帳戶,直接為該服務帳戶提供必要權限,並允許服務帳戶模擬自身,似乎會比較簡單。這種設定稱為「自我模擬」,會造成安全漏洞,因為服務帳戶可以建立可無限期重新整理的存取權杖。
服務帳戶模擬功能一律涉及兩個主體:代表呼叫者的主體,以及要模擬的服務帳戶 (稱為具備權限的服務帳戶)。
如要模擬服務帳戶來產生 ID 權杖,請按照下列一般程序操作。
如需逐步操作說明,請參閱「建立 ID 權杖」。
找出或建立服務帳戶,做為具有權限的服務帳戶。
- 請參閱產品說明文件,找出叫用目標服務所需的角色。在目標服務中,將這些角色授予服務帳戶。
找出要執行模擬作業的主體,並設定應用程式預設憑證 (ADC),以便使用這個主體的憑證。
在開發環境中,主體通常是您使用 gcloud CLI 提供給 ADC 的使用者帳戶。不過,如果您在附加服務帳戶的資源上執行作業,附加的服務帳戶就是主體。
將服務帳戶 OpenID Connect 身分識別權杖建立者角色 (
roles/iam.serviceAccountOpenIdTokenCreator
) 授予主體。使用 IAM Credentials API 為已授權的服務帳戶產生 ID 權杖。
更改下列內容:
- AUDIENCE:目標服務的 URI,例如
http://www.example.com
。 - SERVICE_ACCOUNT_EMAIL:具有權限的服務帳戶電子郵件地址。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{"audience": "AUDIENCE", "includeEmail": "true"}' \ https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken
- AUDIENCE:目標服務的 URI,例如
後續步驟
- 瞭解 ID 權杖。
- 使用殼層指令查詢 Compute Engine 中繼資料伺服器。
- 進一步瞭解驗證方法。