可以使用服务帐户自动完成第三方应用程序对 VMware Cloud Director 的访问。
只有具有查看服务帐户和管理服务帐户权限的系统管理员和组织管理员可以创建服务帐户和管理服务帐户对 VMware Cloud Director 的访问。
共享
从 VMware Cloud Director 10.4.1 开始,如果您只有有限服务帐户视图权限,则只能查看有关服务帐户的有限信息。在有限的查看范围下,当您对服务帐户发出 GET 请求时,在响应中,服务帐户的 softwareId
、softwareVersion
、uri
和 status
显示为 null
。
实现
要实现 VMware Cloud Director 的自动访问,服务帐户应使用 API 令牌。服务帐户仅适用于基于 API 的访问。向服务帐户授予访问权限后,经身份验证的客户端应用程序将接收其 API 令牌(即 OAuth 刷新令牌)和访问令牌(表示其第一个 VMware Cloud Director 会话)供立即使用。应用程序需要 API 令牌才能向 VMware Cloud Director 进行身份验证。访问令牌是 VMware Cloud Director 会话令牌 (JWT 令牌),应用程序通过它来使用服务帐户发出 API 请求。应用程序的服务帐户使用 API 令牌,因此在 VMware Cloud Director 中与用户 API 令牌具有相同的限制。
使用“请求服务帐户授权”向服务帐户授予访问权限。这可以保证只有必须使用令牌的应用程序有权访问和使用令牌。其他参与者无法访问该令牌。作为管理员,您管理对服务帐户的访问权限。但是,即使管理员也无权访问授予访问权限的实际令牌。VMware Cloud Director 仅将令牌提供给服务帐户。为此,VMware Cloud Director 依赖于一个已知标准。为确保您与要向其授予令牌的应用程序在整个授予和令牌传输过程中保存同步,您只能通过了解应用程序的用户代码来启动 API 令牌授予过程。
与用户 API 令牌不同,按照 RFC 6749 第 6 部分,授予服务帐户的 API 令牌在每次使用时都会轮换。除非您撤销,否则未使用的服务帐户 API 令牌永不过期。
服务帐户只能有一个角色。在符合 OAuth 的 API 中,通过范围字段以角色名称的 URL 编码的统一资源名称 (URN) 形式进行角色通信。URN 格式为 urn:vcloud:role:[roleName]
。请参见 RFC 8141 了解 URN 编码。
状态 | 描述 |
---|---|
已创建 | 帐户在创建后处于初始状态。 |
已请求 | 请求者使用设备授权请求发起的访问请求中有一个或多个未完成的请求。 |
已授予 | 管理员已授予未完成的请求,正在等待服务帐户轮询和提取 API 令牌。 |
活动 | 服务帐户提取了 API 令牌,并且可以使用令牌访问 VMware Cloud Director。 |
限制
由于服务帐户的使用适用于第三方应用程序,因此服务帐户存在一些限制。
- 执行用户管理任务
- 创建 API 令牌
- 管理其他服务帐户
- 用户
- 组
- 角色
- 全局角色
- 权限包
- 令牌:管理
- 令牌:管理全部
多站点
从 VMware Cloud Director 10.4.1 开始,服务帐户可以使用多站点功能将分布于不同地理位置的多个 VMware Cloud Director 安装或服务器组及其组织作为单个实体进行管理和监控。有关多站点功能的详细信息,请参见配置和管理多站点部署。如果您向不同于对其进行身份验证的组织发出请求,请确认服务帐户存在于关联的组织中,并且具有相同的名称和软件 ID。此外,还必须包含 X-VMWARE-VCLOUD-AUTH-CONTEXT 标头,用于指定必须完成请求的组织的名称。请参见《VMware Cloud Director API 编程指南》中有关配置和管理多站点部署的信息。
创建服务帐户
可以使用Tenant Portal创建用于自动访问 VMware Cloud Director 的帐户。
前提条件
过程
结果
Created
。
示例
也可以使用 VMware Cloud Director API 创建服务帐户。该 API 请求使用与创建用户 API 令牌相同的 API 端点,但存在 software_id
字段表示用于创建服务帐户。
POST /oauth/tenant/tenant_name/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:Organization%20Administrator", "client_uri": "https://www.company_name.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:Organization%20Administrator" }
下一步做什么
向服务帐户授予访问权限
创建服务帐户且应用程序请求授权以接收访问令牌后,可以使用 VMware Cloud Director Tenant Portal授予令牌。
Created
,此时必须重新启动此过程。
前提条件
- 确认您已经以具有查看服务帐户和管理服务帐户权限的系统管理员或组织管理员身份登录。
- 从Tenant Portal的服务帐户详细信息中复制客户端 ID。
- 确认请求帐户的应用程序向 https://site.cloud.example.com/oauth/tenant/tenant_name/device_authorization API 端点发出符合 OAuth 2.0 Device Authorization Grant RFC 的请求。有关设备授权请求的详细信息,请参见 RFC 8628 第 3.1 部分。
键 值 client_ID
Generated_Client_ID
应用程序请求访问权限后,Tenant Portal中的服务帐户状态将更改为
Requested
。应用程序将接收设备代码、用户代码以及一些其他信息。示例请求:
POST /oauth/tenant/tenant_name/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]/tenant/tenant_name/administration/access-control/service-accounts", "expires_in": 3600, "interval": 60 }
设备必须按照 RFC 以上述响应中指定的频率(以秒为单位)轮询
/oauth/tenant/tenant_name/token
。设备必须使用设备代码,直到其从 VMware Cloud Director 收到令牌,或者请求超时。示例请求:
POST: /oauth/tenant/tenant_name/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 令牌。
- 从应用程序获取用户代码。必须在步骤 4 中输入代码。
过程
结果
服务请求状态更改为 Granted
。VMware Cloud Director 将以 API 令牌的形式向链接到服务帐户的应用程序授予其主 API 令牌。根据 RFC 的要求,响应中会包含一个 OAuth 访问令牌,表示服务帐户可立即使用用户会话。如果应用程序未立即使用 OAuth 访问令牌,则根据配置的空闲会话超时,会话将超时。服务帐户也可能明确注销,这不仅出于安全原因建议使用,而且还可为服务帐户提供对 VMware Cloud Director 进行 API 调用的良好测试运行。一旦应用程序提取 API 令牌,状态将更改为 Active
。
下一步做什么
- 要更改分配的服务帐户角色、软件 ID、软件版本、客户端 URI 或配额限制,请选择一个服务帐户,然后单击编辑服务帐户。更改将在下次令牌刷新时生效。
- 要撤销服务帐户访问权限以使授予的 API 令牌无效,请单击撤销。VMware Cloud Director 将终止所有活动会话。虽然撤销 API 令牌不会删除服务帐户,但是帐户的状态将更改为
Created
。如果应用程序已再次请求访问权限,则服务帐户的状态将更改为Requested
。您必须再次按照此过程为服务帐户授予访问权限,以使该帐户变为Active
。