Cloud de Confiance by S3NS 發行多種權杖,這些權杖的用途和交易對象各不相同。
下表概略說明主要權杖類別,其中包含不同權杖類型。
| 權杖類別 | 通訊路徑 | 目的 |
|---|---|---|
| 存取權杖 | 授權伺服器 ⭢ 用戶端 ⭢ Google API | 允許用戶端呼叫 Cloud de Confiance by S3NS API。 |
| 授予權杖的權杖 | 授權伺服器 ⭤ 用戶端 | 讓用戶取得新的或不同的權杖,可能是在稍後的時間點。 |
| 身分符記 | 授權伺服器 ⭢ 用戶端 | 讓用戶端識別互動對象。 |
存取和身分權杖是持有者權杖。不記名憑證是一般類型的權杖,可授予憑證持有者存取權。
使用不記名權杖進行驗證時,必須仰賴加密通訊協定 (例如 HTTPS) 提供的安全性。如果持有人權杖遭到攔截,不肖人士就能利用該權杖取得存取權。
如果不記名權杖無法為您的用途提供足夠的安全性,您可以透過情境感知存取、限制存取權杖的生命週期,或使用雙向傳輸層安全 (mTLS) 解決方案 (例如 Chrome Enterprise Premium),降低權杖遭竊的風險。
存取權杖
存取權杖可讓用戶端向 API 發出經過驗證的呼叫。 Cloud de Confiance by S3NS 支援多種不同類型的存取權杖,這些權杖具有下列共同屬性: Cloud de Confiance by S3NS
驗證主體 (使用者或工作負載)。
這些憑證是核發給特定用戶端。
這類權杖的效期很短,最多只有幾小時。
只能存取特定 OAuth 範圍、端點或資源。也就是說,存取權杖通常不會授予使用者所有資源的存取權,而只會授予部分資源的存取權。
存取權杖可能會有以下差異:
核發者:核發權杖的當事人。
主體:權杖可驗證的主體類型。
限制:可對權杖施加的限制。
下表列出不同類型的存取權杖:
| 權杖類型 | 核發單位 | 主體 | 限制 |
|---|---|---|---|
| 服務帳戶存取權杖 | Cloud de Confiance by S3NS IAM 授權伺服器 | 服務帳戶 | 個 OAuth 範圍 |
| 服務帳戶 JSON Web Token (JWT) | 客戶 | 服務帳戶 | OAuth 範圍或 API |
| 聯盟存取權杖 | Cloud de Confiance by S3NS IAM 授權伺服器 |
|
個 OAuth 範圍 |
| 憑證存取權範圍權杖 | Cloud de Confiance by S3NS IAM 授權伺服器 |
|
特定 Cloud Storage 物件 |
| 用戶端核發的憑證存取權範圍權杖 | 客戶 | 服務帳戶 | 特定 Cloud Storage 物件 |
不同類型的存取權杖也具有不同的安全性屬性:
- 格式:部分存取權杖是不透明的,也就是採用專有格式,無法檢查。其他權杖會編碼為 JSON Web Token,可由用戶端解碼。
生命週期:權杖的生命週期各不相同,可修改的程度也不一樣。
可撤銷性:部分權杖可以撤銷。其他權杖在到期前仍有效。
下表摘要說明存取權杖類型的差異。
| 權杖類型 | 格式 | Introspectable | 效期 | 可撤銷 |
|---|---|---|---|---|
| 服務帳戶存取權杖 | Opaque | 否 | 5 分鐘到 12 小時 | 否 |
| 服務帳戶 JSON Web Token (JWT) | JWT | 不適用 | 5 分鐘至 1 小時 | 否 |
| 聯盟存取權杖 | Opaque | 否 | 請參閱聯盟存取權杖。 | 否 |
| 憑證存取權範圍權杖 | Opaque | 否 | 請參閱「 憑證存取權範圍權杖」。 | 否 |
| 用戶端核發的憑證存取權範圍權杖 | Opaque | 否 | 不適用 | 否 |
服務帳戶存取權杖
服務帳戶存取權杖可驗證服務帳戶。權杖是不透明的內省權杖。
如果是服務帳戶存取權杖,API 會傳回類似下列範例的輸出內容:
{
"azp": "000000000000000000000",
"aud": "000000000000000000000",
"scope": "https://www.googleapis.com/auth/userinfo.email",
"exp": "1744687132",
"expires_in": "3568",
"email": "service-account@example.s3ns.iam.gserviceaccount.com",
"email_verified": "true",
"access_type": "online"
}
服務帳戶權杖包含下列欄位:
| 欄位 | 名稱 | 說明 |
|---|---|---|
aud |
目標對象 | 權杖適用的服務帳戶,相當於授權方。 |
azp |
授權方 | 要求權杖的服務帳戶,以專屬 ID 識別。 |
email |
主要電子郵件地址 |
服務帳戶的電子郵件地址。
只有在權杖包含
|
exp |
期限 | 權杖的到期時間,採用 Unix 紀元時間格式。 |
服務帳戶存取權杖無法撤銷,效期到期前都有效。
依預設,服務帳戶存取權憑證會在 1 小時後失效。使用 serviceAccounts.generateAccessToken 方法時,您可以要求不同有效時間的權杖。由於權杖存留時間越長,風險就越高,因此您必須設定 iam.allowServiceAccountCredentialLifetimeExtension 限制,允許用戶端要求存留時間超過一小時的服務帳戶存取權杖。
服務帳戶 JSON Web Token
服務帳戶 JSON Web Token (JWT) 可驗證服務帳戶。服務帳戶存取權杖是由授權伺服器核發,而服務帳戶 JWT 則可由用戶端自行核發。
有時也稱為「自行簽署」的 JWT。如果您需要向某些 Google API 進行驗證,但不想從授權伺服器取得存取權杖 (例如建立自己的用戶端程式庫時),這類憑證就非常實用。
如要核發服務帳戶 JWT,用戶端必須執行下列步驟:
準備 JSON Web 簽章酬載,其中包含服務帳戶的電子郵件地址、OAuth 範圍或 API 端點,以及到期時間。
使用相應服務帳戶的服務帳戶金鑰簽署酬載。用戶端可以使用使用者代管的服務帳戶金鑰離線簽署酬載,也可以使用
signJwt方法和 Google 代管的服務帳戶金鑰線上簽署。詳情請參閱「建立自行簽署的 JSON Web Token」。
解碼後的服務帳戶 JWT 類似於下列內容,其中 SIGNATURE 會替換為權杖的簽章:
{
"alg": "RS256",
"kid": "290b7bf588eee0c35d02bf1164f4336229373300",
"typ": "JWT"
}.{
"iss": "service-account@example.s3ns.iam.gserviceaccount.com",
"sub": "service-account@example.s3ns.iam.gserviceaccount.com",
"scope": "https://www.googleapis.com/auth/cloud-platform",
"exp": 1744851267,
"iat": 1744850967
}.SIGNATURE
服務帳戶 JWT 可在 aud 金鑰中指定 API 端點,不必在 scope 金鑰中指定 OAuth 範圍:
{
"alg": "RS256",
"kid": "290b7bf588eee0c35d02bf1164f4336229373300",
"typ": "JWT"
}.{
"iss": "service-account@example.s3ns.iam.gserviceaccount.com",
"sub": "service-account@example.s3ns.iam.gserviceaccount.com",
"aud": "https://cloudresourcemanager.googleapis.com/",
"exp": 1744854799,
"iat": 1744851199
}.SIGNATURE
服務帳戶 JWT 包含下列欄位:
| 欄位 | 名稱 | 說明 |
|---|---|---|
aud |
目標對象 |
用戶端可存取的 API 端點。必須未指定 scope 才會生效。 |
exp |
期限 | 權杖的到期時間,採用 Unix 紀元時間格式。 |
iat |
問題時間 | 權杖核發時間,採用 Unix 紀元時間格式。 |
iss |
核發單位 | 憑證的簽發者,也就是服務帳戶本身。 |
scope |
個 OAuth 範圍 |
用戶端可存取的 API 集,由
OAuth 範圍識別。只有在未指定 aud 時才有效。
|
sub |
主旨 | 經過驗證的主體,也就是服務帳戶本身。 |
服務帳戶 JWT 的效期最長為一小時,且無法撤銷。
聯盟存取權杖
聯合存取權杖會驗證身分工作團隊集區主體或工作負載身分集區主體。
有了員工身分聯盟,用戶端就能以外部權杖換取聯盟存取權杖,驗證工作團隊集區主體。工作團隊身分集區主體會以類似下列的主體 ID 識別:
principal://iam.googleapis.com/locations/global/workforcePools/POOL/subject/raha@altostrat.com.
工作負載身分聯盟可讓用戶端交換外部權杖,取得用來驗證工作負載集區主體的聯盟存取權杖。工作負載身分集區主體會以類似下列的主體 ID 識別:
principal://iam.googleapis.com/projects/PROJECT/locations/global/workloadIdentityPools/POOL/subject/SUBJECT_ATTRIBUTE_VALUE
同盟存取權杖是不透明的,無法進行內省。權杖無法撤銷,且在到期前都有效。各類型的權杖效期如下:
員工身分聯盟會將權杖到期時間設為下列兩個值中較小的值:
員工身分聯盟工作階段到期前的剩餘時間
1 小時
員工身分聯盟工作階段的到期時間取決於登入時間,以及為員工身分聯盟集區設定的工作階段時間長度。
Workload Identity Federation 會設定權杖到期時間,使其與外部權杖的到期時間相符。
憑證存取權範圍權杖
憑證存取範圍權杖會驗證使用者或服務帳戶,並包含存取範圍。存取權界線會限制權杖,因此只能用來存取 Cloud Storage 資源的定義子集。
憑證存取權界線權杖有時也稱為「範圍縮減」,因為這類權杖是從輸入權杖衍生而來,但可授予存取權的資源範圍較小。
憑證存取權界線權杖的到期時間,是根據輸入權杖的到期時間而定,輸入權杖可以是服務帳戶存取權杖。憑證存取權限範圍權杖是不透明的,無法內省或撤銷。
用戶端核發的憑證存取邊界權杖
用戶端核發的憑證存取權範圍權杖與憑證存取權範圍權杖類似,但適用於用戶端需要以高頻率取得不同存取權範圍的憑證存取權範圍權杖的情況。
用戶端可以使用 Cloud 用戶端程式庫和存取邊界中介權杖,在本機建立用戶端核發的憑證存取邊界權杖,但必須定期重新整理。
用戶端核發的憑證存取權界線權杖是不透明的,無法內省或撤銷。
授權權杖的權杖
權杖授予權杖可讓用戶端取得新的或不同的權杖,可能是在稍後的時間。 Cloud de Confiance by S3NS 支援多種不同類型的權杖授予權杖,這些權杖都具有下列共同點:
代表先前的驗證。
驗證主體,主體可以是 Google 身分 (使用者或工作負載) 或外部身分。
並兌換成存取權杖。
這類權杖無法用於呼叫 Google API,因此與存取權杖不同。
授予權杖的權杖可能會有以下差異:
核發者:核發權杖的當事人。
主體:權杖可驗證的主體身分類型。
限制:可對權杖施加的限制。
下表列出不同類型的權杖授予權杖。
| 權杖類型 | 核發單位 | 已兌換的存取權杖類型 | 主體 | 限制 |
|---|---|---|---|---|
| 聯合更新權杖 | Cloud de Confiance by S3NS IAM 授權伺服器 | 聯盟存取權杖 | 工作團隊身分集區主體 | 個 OAuth 範圍 |
| 聯合授權碼 | Cloud de Confiance by S3NS IAM 授權伺服器 | 聯盟存取權杖 | 工作團隊身分集區主體 | 個 OAuth 範圍 |
| 外部 JSON Web Token | 外部識別資訊提供者 | 聯盟存取權杖 | 外部主體 | 無 |
| 外部 SAML 判斷或回應 | 外部識別資訊提供者 | 聯盟存取權杖 | 外部主體 | 無 |
Amazon Web Services (AWS) GetCallerIdentity 權杖
|
外部識別資訊提供者 | 聯盟存取權杖 | 外部主體 | 無 |
不同類型的權杖授予權杖也展現不同的安全性屬性:
格式:部分權杖是不透明的。其他權杖則可由用戶端解碼。
生命週期:權杖的生命週期各不相同,可修改的程度也不同。
多次使用:部分授予權杖的權杖只能使用一次。其他權杖可重複使用。
可撤銷性:部分權杖可以撤銷。其他權杖在到期前仍有效。
下表摘要列出授予權杖的權杖,在這些屬性上的差異:
| 權杖類型 | 格式 | 效期 | 可撤銷 | 多次使用 |
|---|---|---|---|---|
| 聯合更新權杖 | Opaque | 視情況而定,請參閱聯盟更新權杖 | 否 | 是 |
| 聯合授權碼 | Opaque | 10 分鐘 | 否 | 否 |
| 外部權杖或外部 JSON Web Token | JWT | 視識別資訊提供者而定 | 視識別資訊提供者而定 | 是 |
| 外部 SAML 聲明或回應 | SAML | 視識別資訊提供者而定 | 視識別資訊提供者而定 | 是 |
Amazon Web Services (AWS) GetCallerIdentity 權杖 |
文字 blob | 視識別資訊提供者而定 | 視識別資訊提供者而定 | 是 |
聯合更新權杖
如果使用者先前授權用戶端代表自己執行動作,用戶端就能透過同盟更新權杖 (不透明權杖),取得員工身分集區主體的存取權杖。
與更新權杖類似,同盟更新權杖會與特定用戶端建立關聯,且只能搭配有效的用戶端憑證使用,例如用戶端 ID 和用戶端密碼。
與更新權杖不同,同盟更新權杖無法撤銷。聯盟更新權杖的生命週期與用來取得權杖的員工身分工作階段相關聯,且在工作階段過期前都有效。
聯合授權碼
與授權碼類似,聯合授權碼是不透明的短期權杖。這些代碼僅供使用者驗證期間使用,做為用戶端與 Cloud de Confiance by S3NS IAM 授權伺服器之間的中介。
授權碼會與用戶端綁定,只能搭配有效的用戶端憑證使用,且只能使用一次。
外部 JSON Web Token
外部 JSON Web Token (JWT) 由外部身分識別提供者核發,例如 Microsoft Entra ID、Okta、Kubernetes 或 GitHub。結構和內容可能有所不同。
設定員工身分聯盟或工作負載身分聯盟後,您可以在 Cloud de Confiance by S3NS 和外部身分提供者之間建立信任關係。工作負載隨後可使用外部 JWT 做為權杖授予權杖,以取得聯盟存取權杖。
使用員工身分聯盟時,產生的聯合存取權杖會驗證員工身分集區主體。
使用 Workload Identity 聯盟時,產生的聯合存取權權杖會驗證工作負載身分識別集區主體。
在這兩種情況下,主體 ID 都是從外部 JWT 的一或多項聲明衍生而來。
如要與員工身分聯盟或 Workload Identity 聯盟相容,外部 JWT 必須符合特定需求。
外部 SAML 判斷或回應
外部安全宣告標記語言 (SAML) 聲明是由外部身分識別提供者 (例如 Microsoft Entra ID、Okta 或 Active Directory 同盟服務) 發布的 SAML 2.0 聲明。這些外部 SAML 聲明可視需要封裝在 SAML 2.0 回應中,或進行加密。
與外部 JSON Web Token 類似,您可以設定員工身分聯盟或工作負載身分聯盟,讓工作負載使用外部 SAML 聲明或回應做為權杖授予權杖,以取得聯盟存取權杖。
如要與員工身分聯盟或 Workload Identity 聯盟相容,外部 SAML 判斷必須符合特定需求。
Amazon Web Services (AWS) GetCallerIdentity 權杖
外部 AWS GetCallerIdentity 權杖是文字 Blob,內含對 AWS GetCallerIdentity API 的簽署要求。與外部 JSON Web Tokens類似,您可以設定員工身分聯盟或工作負載身分聯盟,讓工作負載使用這些文字 Blob 做為權杖授予權杖,以取得聯盟存取權杖。
身分符記
用戶端可透過 ID 權杖識別互動對象。 Cloud de Confiance by S3NS 支援多種不同類型的 ID 權杖,這些權杖的共同點如下:
這些權杖的格式為 JSON Web Token (JWT),因此用戶端可以解碼、驗證及解讀。
驗證主體 (使用者或工作負載)。
這些憑證是核發給特定用戶端。
這類憑證的效期很短,最多一小時就會失效。
且無法撤銷。
這類權杖無法用於呼叫 Google API,因此與存取權杖不同。
這類權杖無法用於取得存取權杖,因此與權杖授權權杖不同。
身分權杖可能會有以下差異:
目標對象:預計解碼及使用權杖的一方。
核發者:核發權杖的當事人。
生命週期:權杖的生命週期不同,可修改的程度也不同。
主體:權杖可驗證的主體身分類型。
下表列出不同類型的 ID 權杖。
| 權杖類型 | 核發單位 | 目標對象 | 主體 | 效期 |
|---|---|---|---|---|
| 服務帳戶 ID 權杖 | Cloud de Confiance by S3NS IAM 授權伺服器 | 可自由選擇任何目標對象 | 服務帳戶 | 1 小時 |
| Identity-Aware Proxy (IAP) 聲明 | IAP |
|
|
10 分鐘 |
服務帳戶 ID 權杖
服務帳戶 ID 權杖是 JSON Web Token (JWT),可驗證服務帳戶。
與服務帳戶 JWT 和服務帳戶 JWT 聲明不同,服務帳戶 ID 權杖並非由服務帳戶金鑰簽署。服務帳戶 ID 權杖是由 Google JSON Web Key Set (JWKS) 簽署。
解碼後的服務帳戶 ID 權杖如下所示,其中 SIGNATURE 會替換為權杖的簽章:
{
"alg": "RS256",
"kid": "c37da75c9fbe18c2ce9125b9aa1f300dcb31e8d9",
"typ": "JWT"
}.{
"aud": "example-audience",
"azp": "112010400000000710080",
"email": "service-account@example.s3ns.iam.gserviceaccount.com",
"email_verified": true,
"exp": 1745365618,
"iat": 1745362018,
"iss": "https://accounts.google.com",
"sub": "112010400000000710080"
}.SIGNATURE
服務帳戶 ID 權杖包含下列欄位:
| 欄位 | 名稱 | 說明 |
|---|---|---|
aud |
目標對象 | 這個權杖所屬參與方的 ID。權杖要求者可自由選擇值。 |
azp |
授權方 | 要求權杖的服務帳戶,以專屬 ID 識別。 |
exp |
期限 | 權杖的到期時間,採用 Unix 紀元時間格式。 |
iss |
核發單位 |
權杖的簽發者,一律設為 https://accounts.google.com。 |
sub |
主旨 | 要求權杖的服務帳戶,以專屬 ID 識別。 |
ID 權杖中包含的確切聲明集,取決於 ID 權杖的請求方式。舉例來說,Compute Engine 中繼資料伺服器要求的 ID 權杖可以選擇性地包含額外聲明,用來驗證 VM 的身分。使用 IAM Credentials API 要求的 ID 權杖,可選擇性包含服務帳戶專案的機構 ID。
服務帳戶 ID 權杖的效期為一小時,且無法撤銷。
Identity-Aware Proxy 聲明
Identity-Aware Proxy (IAP) 聲明是 JSON Web Token (JWT),IAP 會在 x-goog-iap-jwt-assertion HTTP 要求標頭中,將聲明傳遞至受 IAP 保護的網路應用程式。IAP 聲明可驗證使用者身分,並做為要求已由 IAP 授權的證明。
受管理的使用者帳戶
個人帳戶
服務帳戶
工作團隊身分集區主體
解碼後的 IAP 聲明類似於下列內容,但 SIGNATURE 會替換為權杖的簽章:
{
"alg": "ES256",
"typ": "JWT",
"kid": "4BCyVw"
}.{
"aud": "/projects/0000000000/global/backendServices/000000000000",
"azp": "/projects/0000000000/global/backendServices/000000000000",
"email": "user@example.com",
"exp": 1745374290,
"google": {
"access_levels": [
"accessPolicies/0000000000/accessLevels/Australia"
]
},
"iat": 1745373690,
"identity_source": "WORKFORCE_IDENTITY",
"iss": "https://cloud.google.com/iap",
"sub": "sts.google.com:AAFTZ...Q",
"workforce_identity": {
"iam_principal": "principal://iam.googleapis.com/locations/global/workforcePools/example/subject/user-0000000000",
"workforce_pool_name": "locations/global/workforcePools/example"
}
}.SIGNATURE
IAP 聲明包含下列欄位:
| 欄位 | 名稱 | 說明 |
|---|---|---|
aud |
目標對象 | IAP 判斷結果適用的後端服務、App Engine 應用程式或 Cloud Run 服務。 |
iss |
核發單位 |
權杖的簽發者,一律設為
https://cloud.google.com/iap
|
sub |
主旨 |
經過驗證的主體,以專屬 ID 識別。 如果 IAP 設定為使用 Google 身分,這個 ID 就等同於 Directory API 中公開的 ID。 |
如要進一步瞭解 IAP 聲明,請參閱「驗證 JWT 酬載」。
IAP 聲明的效期為 10 分鐘,且無法撤銷。