可以使用服務帳戶自動完成第三方應用程式對 VMware Cloud Director 的存取。
共用
從 VMware Cloud Director 10.4.1 開始,如果要限制使用者可以查看的服務帳戶資訊,可以僅向某些角色授與有限服務帳戶視圖權限。具有有限服務帳戶視圖權限的使用者對服務帳戶發出 GET 要求時,在回應中,服務帳戶的 softwareId
、softwareVersion
、uri
和 status
顯示為 null
。
實作
若要實現 VMware Cloud Director 的自動存取,服務帳戶應使用 API Token。服務帳戶僅適用於以 API 為基礎的存取。向服務帳戶授與存取權後,已驗證的用戶端應用程式將接收其 API Token (即 OAuth 重新整理 Token) 和存取 Token (表示其第一個 VMware Cloud Director 工作階段) 以供立即使用。應用程式需要 API Token 才能向 VMware Cloud Director 進行驗證。存取 Token 是 VMware Cloud Director 工作階段 Token (JWT Token),應用程式透過此 Token 使用服務帳戶發出 API 要求。應用程式的服務帳戶使用 API Token,因此在 VMware Cloud Director 中與使用者 API Token 具有相同的限制。
使用「要求服務帳戶授權」向服務帳戶授與存取權。這可以保證只有必須使用 Token 的應用程式有權存取和使用 Token。其他執行者無法存取該 Token。身為管理員,您負責管理對服務帳戶的存取權。但是,即使管理員也無權存取授與存取權的實際 Token。VMware Cloud Director 僅將 Token 提供給服務帳戶。為此,VMware Cloud Director 依賴於一個已知標準。為確保您與要向其授與 Token 的應用程式在整個授與和 Token 傳輸過程中保持同步,您只能透過瞭解應用程式的使用者代碼來起始 API Token 授與程序。
與使用者 API Token 不同,按照 RFC 6749 第 6 節,授與服務帳戶的 API Token 在每次使用時都會輪替。除非您撤銷,否則未使用的服務帳戶 API Token 永不到期。
服務帳戶只能有一個角色。在符合 OAuth 的 API 中,透過範圍欄位以角色名稱的 URL 編碼的統一資源名稱 (URN) 形式進行角色通訊。URN 格式為 urn:vcloud:role:[roleName]
。請參閱 RFC 8141 瞭解 URN 編碼。
狀態 | 描述 |
---|---|
已建立 | 帳戶在建立後處於初始狀態。 |
已要求 | 請求者使用裝置授權要求起始的存取要求中有一或多個未完成的要求。 |
已授與 | 管理員已授與未完成的要求,正在等待服務帳戶輪詢和擷取 API Token。 |
作用中 | 服務帳戶擷取了 API Token,並且可以使用 Token 存取 VMware Cloud Director。 |
限制
由於服務帳戶的使用適用於第三方應用程式,因此服務帳戶存在一些限制。
- 執行使用者管理工作
- 建立 API Token
- 管理其他服務帳戶
- 使用者
- 群組
- 角色
- 全域角色
- 權限服務包
- Token:管理
- Token:管理全部
多站台
從 VMware Cloud Director 10.4.1 開始,服務帳戶可以使用多站台功能將分散在不同地理位置的多個 VMware Cloud Director 安裝或伺服器群組及其組織作為單一實體進行管理和監控。如需詳細資訊,請參閱〈設定和管理多站台部署〉。如果服務帳戶向不同於對其進行驗證的組織發出請求,請確認該服務帳戶存在於關聯的組織中,並且具有相同的名稱和軟體識別碼。此外,還必須包含 X-VMWARE-VCLOUD-AUTH-CONTEXT 標頭,用於指定必須完成要求的組織的名稱。請參閱VMware Cloud Director API 程式設計指南中有關設定和管理多站台部署的資訊。
建立服務帳戶
可以使用Service Provider Admin Portal建立用於自動存取 VMware Cloud Director 的帳戶。
程序
結果
Created
。
範例
也可以使用 VMware Cloud Director API 建立服務帳戶。該 API 要求使用與建立使用者 API Token 相同的 API 端點,但存在 software_id
欄位表示用於建立服務帳戶。
POST /oauth/provider/register Accept:application/json Content-Type:application/json Authorization:Bearer eyJhbGciOiJSUzI...7g7rA Body: { "client_name": "exampleServiceAccount", "software_id": "bc2528fd-35c4-44e5-a55d-62e5c4bd9c99", "scope": "urn:vcloud:role:System%20Administrator", "client_uri": "https://www.companyname.com", "software_version": "1.0" }
{ "client_name": "exampleServiceAccount", "client_id": "734e3845-1573-4f07-9b6c-b493c9042187", "grant_types": [ "urn:ietf:params:oauth:grant-type:device_code" ], "token_endpoint_auth_method": "none", "client_uri": "https://www.company_name.com", "software_id": "bc2528fd-35c4-44e5-a55d-62e5c4bd9c99", "software_version": "1.0", "scope": "urn:vcloud:role:System%20Administrator" }
下一步
向服務帳戶授與存取權
建立服務帳戶且應用程式要求授權以接收存取 Token 後,可以使用 VMware Cloud Director Service Provider Admin Portal授與 Token。
Created
,此時必須重新啟動此程序。
必要條件
- 從Service Provider Admin Portal的服務帳戶詳細資料中複製用戶端識別碼。
- 確認要求帳戶的應用程式向 https://site.cloud.example.com/oauth/provider/device_authorization API 端點發出符合 OAuth 2.0 Device Authorization Grant RFC 的要求。如需有關裝置授權要求的詳細資訊,請參閱 RFC 8628 第 3.1 節分。
金鑰 值 client_ID
Generated_Client_ID
應用程式要求存取權後,Service Provider Admin Portal中的服務帳戶狀態將變更為
Requested
。應用程式將接收裝置代碼、使用者代碼以及一些其他資訊。範例要求:POST /oauth/provider/device_authorization Accept:application/json Content-Type: application/x-www-form-urlencoded Body: client_id=734e3845-1573-4f07-9b6c-b493c9042187
範例回應:{ "device_code": "tkhZ0uoUMy5xgjJqRJblIq3-g44xy2Ms6TEpv3Z_fKw", "user_code": "3VL8-SQVJ", "verification_uri": "https://[VCD]/provider/administration/access-control/service-accounts", "expires_in": 3600, "interval": 60 }
裝置必須按照 RFC 以上述回應中指定的頻率 (以秒為單位) 輪詢
/oauth/provider/token
。裝置必須使用裝置代碼,直到其從 VMware Cloud Director 收到 Token,否則要求逾時。範例要求:POST: /oauth/provider/token Accept:application/json Content-Type: application/x-www-form-urlencoded Body: client_id= 734e3845-1573-4f07-9b6c-b493c9042187&grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code&device_code=tkhZ0uoUMy5xgjJqRJblIq3-g44xy2Ms6TEpv3Z_fKw
授與前的範例回應:{ "error": "authorization_pending", "error_description": "Device authorization request pending", "error_uri": null, "minorErrorCode": "authorization_pending", "message": "Device authorization request pending", "stackTrace": null }
授與後的範例回應:{ "access_token": "eyJhbGciOiJSU…HqJaDud1sVA", "token_type": "Bearer", "expires_in": 2592000, "refresh_token": "SsybukUed8SBP2p1AaFiGJhrntQNWZVX" }
如果不確認或拒絕存取要求,使用者代碼會逾時。逾時期限會顯示在裝置授權要求的回應中。
僅當應用程式和管理員使用彼此對應的裝置代碼和使用者代碼時,VMware Cloud Director 才會向應用程式授與主要 API Token。
- 從應用程式取得使用者代碼。必須在步驟 4 中輸入代碼。
程序
結果
服務要求狀態變更為 Granted
。VMware Cloud Director 將以 API Token 的形式向連結到服務帳戶的應用程式授與其主要 API Token。根據 RFC 的要求,回應中會包含一個 OAuth 存取 Token,表示服務帳戶可立即使用使用者工作階段。如果應用程式未立即使用 OAuth 存取 Token,則根據設定的閒置工作階段逾時,工作階段將逾時。服務帳戶也可能明確登出,這不僅出於安全原因建議使用,而且還可為服務帳戶提供對 VMware Cloud Director 進行 API 呼叫的良好測試執行。當應用程式擷取 API Token 後,狀態將變更為 Active
。
下一步
- 若要變更指派的服務帳戶角色、軟體識別碼、軟體版本、用戶端 URI 或配額限制,請選取一個服務帳戶,然後按一下編輯服務帳戶。變更將在下次 Token 重新整理時生效。
- 若要撤銷服務帳戶存取權以使授與的 API Token 無效,請按一下撤銷。VMware Cloud Director 將終止所有作用中工作階段。雖然撤銷 API Token 不會刪除服務帳戶,但帳戶的狀態將變更為
Created
。如果應用程式已再次要求存取權,則服務帳戶的狀態將變更為Requested
。您必須再次按照此程序為服務帳戶授與存取權,以使該帳戶變為Active
。