可以使用服務帳戶自動完成第三方應用程式對 VMware Cloud Director 的存取。

共用

VMware Cloud Director 10.4.1 開始,如果要限制使用者可以查看的服務帳戶資訊,可以僅向某些角色授與有限服務帳戶視圖權限。具有有限服務帳戶視圖權限的使用者對服務帳戶發出 GET 要求時,在回應中,服務帳戶的 softwareIdsoftwareVersionuristatus 顯示為 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 編碼。

備註: 裝置端點未進行驗證。請考慮在負載平衡器上設定特殊節流規則。
表 1. 服務帳戶狀態
狀態 描述
已建立 帳戶在建立後處於初始狀態。
已要求 請求者使用裝置授權要求起始的存取要求中有一或多個未完成的要求。
已授與 管理員已授與未完成的要求,正在等待服務帳戶輪詢和擷取 API Token。
作用中 服務帳戶擷取了 API Token,並且可以使用 Token 存取 VMware Cloud Director

限制

由於服務帳戶的使用適用於第三方應用程式,因此服務帳戶存在一些限制。

使用服務帳戶時,應用程式無法執行某些工作。
  • 執行使用者管理工作
  • 建立 API Token
  • 管理其他服務帳戶
使用服務帳戶存取 VMware Cloud Director 時,應用程式只有以下資源的檢視權限。
  • 使用者
  • 群組
  • 角色
  • 全域角色
  • 權限服務包
使用服務帳戶存取 VMware Cloud Director 的應用程式沒有以下權限。
  • 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 的帳戶。

程序

  1. 從頂部導覽列中,選取管理
  2. 在左面板中的提供者存取控制下,選取服務帳戶
  3. 按一下新增
  4. 輸入服務帳戶的名稱。
  5. 指派角色下拉式功能表中,為服務帳戶選取一個角色。
    可用角色清單包括本機系統組織角色,或者如果在承租人組織中,除了承租人中的任何本機角色外,還包括發佈到組織的全域角色。
  6. 輸入服務帳戶的軟體識別碼,或使用產生軟體識別碼按鈕產生並輸入軟體識別碼。

    服務帳戶必須具有軟體識別碼,即 UUID 格式的唯一識別碼,表示連接連線到 VMware Cloud Director 的軟體。對於某一軟體的所有版本和執行個體,此識別碼相同。

    對於較大的解決方案,若要保持對服務帳戶身分的控制,請不要使用產生軟體識別碼選項產生您自己的軟體識別碼。

  7. (選擇性) 使用服務帳戶輸入系統的軟體版本。
    軟體版本是與服務帳戶關聯的廠商指定的可選資訊中繼資料。為追蹤某一軟體的變更時間, VMware Cloud Director 會使用軟體版本。軟體版本可能對於識別服務帳戶非常有用。
  8. (選擇性) 輸入用戶端 URI。
    用戶端統一資源識別碼 (URI) 是廠商網頁的 URL,可提供有關用戶端的資訊。
  9. 下一步
  10. (選擇性) 為您想要服務帳戶管理的資源新增配額。
    這些配額會限制服務帳戶能夠耗用的儲存與計算資源。
  11. 檢閱服務帳戶資訊,然後按一下完成

結果

服務帳戶隨即會顯示在 服務帳戶頁面上,狀態為 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。

備註: 如果逾時期限在此過程中到期,則 Service Provider Admin Portal中的服務帳戶狀態將變更回 Created,此時必須重新啟動此程序。

必要條件

  1. Service Provider Admin Portal的服務帳戶詳細資料中複製用戶端識別碼。
  2. 確認要求帳戶的應用程式向 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。

  3. 從應用程式取得使用者代碼。必須在步驟 4 中輸入代碼。

程序

  1. 從頂部導覽列中,選取管理
  2. 在左面板中的提供者存取控制下,選取服務帳戶
  3. 按一下檢閱存取要求
  4. 輸入在必要條件 3 中取得的應用程式的使用者代碼,按一下查閱,然後驗證要求的存取詳細資料。
  5. 向應用程式授與存取權。
    如果拒絕存取應用程式,則 Service Provider Admin Portal中的服務帳戶狀態將變更回 Created

結果

服務要求狀態變更為 GrantedVMware 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