可以使用服务帐户自动完成第三方应用程序对 VMware Cloud Director 的访问。

实现

要实现 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 编码。

注: 设备端点未进行身份验证。请考虑在负载均衡器上配置特殊限制规则。
表 1. 服务帐户状态
状态 描述
已创建 帐户在创建后处于初始状态。
已请求 请求者使用设备授权请求发起的访问请求中有一个或多个未完成的请求。
已授予 管理员已授予未完成的请求,正在等待服务帐户轮询和提取 API 令牌。
活动 服务帐户提取了 API 令牌,并且可以使用令牌访问 VMware Cloud Director

限制

由于服务帐户的使用适用于第三方应用程序,因此服务帐户存在一些限制。

使用服务帐户时,应用程序无法执行某些任务。
  • 执行用户管理任务
  • 创建 API 令牌
  • 管理其他服务帐户
使用服务帐户访问 VMware Cloud Director 时,应用程序只有以下资源的查看权限。
  • 用户
  • 角色
  • 全局角色
  • 权限包
使用服务帐户访问 VMware Cloud Director 的应用程序没有以下权限。
  • 令牌:管理
  • 令牌:管理全部

创建服务帐户

可以使用Service Provider Admin Portal创建用于自动访问 VMware Cloud Director 的帐户。

过程

  1. 从顶部导航栏中,选择管理
  2. 在左侧面板的提供者访问控制下,选择服务帐户
  3. 单击新建
  4. 输入服务帐户的名称。
  5. 分配角色下拉菜单中,为服务帐户选择一个角色。
    可用角色列表包括本地系统组织角色,或者如果在租户组织中,除了租户中的任何本地角色外,还包括发布到组织的全局角色。
  6. 输入服务帐户的软件 ID,或者使用生成软件 ID 按钮生成并输入软件 ID。

    服务帐户必须具有软件 ID,即 UUID 格式的唯一标识符,表示连接到 VMware Cloud Director 的软件。对于某一软件的所有版本和实例,此 ID 相同。

    对于较大的解决方案,要保持对服务帐户身份的控制,请不要使用生成软件 ID 选项生成您自己的软件 ID。

  7. (可选) 使用服务帐户输入系统的软件版本。
    软件版本是与服务帐户关联的供应商指定的可选信息性元数据。为跟踪某一软件的更改时间, VMware Cloud Director 使用软件版本。软件版本对于识别服务帐户可能非常有用。
  8. (可选) 输入客户端 URI。
    客户端统一资源标识符 (URI) 是供应商网页的 URL,提供有关客户端的信息。
  9. 单击下一步
  10. (可选) 为您希望服务帐户管理的资源添加配额。
    这些配额将限制服务帐户使用存储资源和计算资源的能力。
  11. 查看服务帐户信息,然后单击完成

结果

服务帐户显示在 服务帐户页面上,状态为 Created

示例

也可以使用 VMware Cloud Director API 创建服务帐户。该 API 请求使用与创建用户 API 令牌相同的 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" 

} 

下一步做什么

复制显示在服务帐户详细信息中的客户端 ID。要授予对服务帐户的访问权限,您必须使用客户端 ID。

向服务帐户授予访问权限

创建服务帐户且应用程序请求授权以接收访问令牌后,可以使用 VMware Cloud Director Service Provider Admin Portal授予令牌。

注: 如果超时期限在此过程中过期,则 Service Provider Admin Portal中的服务帐户状态将更改回 Created,此时必须重新启动此过程。

前提条件

  1. Service Provider Admin Portal的服务帐户详细信息中复制客户端 ID。
  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 收到令牌,或者请求超时。

    示例请求:
    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 令牌。

  3. 从应用程序获取用户代码。必须在步骤 4 中输入代码。

过程

  1. 从顶部导航栏中,选择管理
  2. 在左侧面板的提供者访问控制下,选择服务帐户
  3. 单击查看访问请求
  4. 输入在必备条件 3 中获取的应用程序的用户代码,单击查找,然后确认请求的访问详细信息。
  5. 向应用程序授予访问权限。
    如果拒绝访问应用程序,则 Service Provider Admin Portal中的服务帐户状态将更改回 Created

结果

服务请求状态更改为 GrantedVMware Cloud Director 将以 API 令牌的形式向链接到服务帐户的应用程序授予其主 API 令牌。根据 RFC 的要求,响应中会包含一个 OAuth 访问令牌,表示服务帐户可立即使用用户会话。如果应用程序未立即使用 OAuth 访问令牌,则根据配置的空闲会话超时,会话将超时。服务帐户也可能明确注销,这不仅出于安全原因建议使用,而且还可为服务帐户提供对 VMware Cloud Director 进行 API 调用的良好测试运行。一旦应用程序提取 API 令牌,状态将更改为 Active

下一步做什么

  • 要更改分配的服务帐户角色、软件 ID、软件版本、客户端 URI 或配额限制,请选择一个服务帐户,然后单击编辑服务帐户。更改将在下次令牌刷新时生效。
  • 要撤销服务帐户访问权限以使授予的 API 令牌无效,请单击撤销VMware Cloud Director 将终止所有活动会话。虽然撤销 API 令牌不会删除服务帐户,但是帐户的状态将更改为 Created。如果应用程序已再次请求访问权限,则服务帐户的状态将更改为 Requested。您必须再次按照此过程为服务帐户授予访问权限,以使该帐户变为 Active