使用子应用体系对资源隔离

最近更新时间:2019-05-10 16:31:54

概述

开发者在使用云点播服务的过程中,可能存在某些场景需要对点播资源进行隔离,例如公司内多个部门同时使用点播,或者需要区分正式环境/测试环境等,点播子应用体系可以帮助开发者快速实现这一类需求。

注意:

点播资源包括开发者及其用户上传的视频、视频附属信息、由视频衍生的其它视频和截图、点播配置、域名(含默认域名和自定义域名)以及开发者及其用户使用点播服务产生的统计信息等。

应用场景

多部门使用点播

如果开发者公司内部有多个部门需要使用到点播业务,并要求各部门的点播资源隔离,那么可以使用点播子应用体系来实现,只需要为每个部门创建一个子应用即可。

测试账号

如果开发者希望对某些点播特性进行测试,又担心会影响线上运营(例如修改 事件通知 的回调方式),之前只能通过创建一个新的腾讯云账号来进行测试,现在可以通过子应用体系来实现。开发者创建一个子应用专用于测试即可,其点播资源是独立的,不影响线上环境。

包装云服务

开发者可能希望对点播中的某些能力进行包装,以云上云的形式提供出去,那么可以使用子应用体系。这种场景与多部门使用点播相似,但是对于安全性因素要求较为严格,因此开发者需要在这些方面投入更多精力。

身份定义

点播子应用体系中有两类身份:管理员子应用。我们结合下图来说明它们的定义。
子应用

  1. 腾讯云用户开通了点播业务后便成为点播开发者,称为“自己”(用橙色头像表示)。开发者的所有点播资源都归属于“自己”。
  2. 开发者开通点播子应用功能后,就增加了一个子应用管理员的身份,称为“管理员”(用绿色头像表示)。此时“自己”就表现为“管理员”下的一个子应用。“管理员”不直接拥有任何点播资源,所有点播资源仍然属于“自己”。
  3. 开发者使用“管理员”身份创建一个“子应用”(用灰色头像表示),这个新建的子应用和“自己”平等且相互隔离,它拥有独立的点播资源。
  4. 开发者使用“管理员”身份再次创建一个“子应用”(用灰色头像表示),它与其它所有子应用平等且相互隔离,它也拥有独立的点播资源,依此类推。

注意:

点播的“子应用”与 互动直播云通信 中的“应用”(也称 SdkAppid)是互通的,详见下方的创建子应用操作说明。

能力

点播子应用体系主要提供以下能力:

  1. 控制台身份选择:开发者登录点播控制台后,可以在管理员或任一子应用中随意切换身份,同一时刻仅且必须选择一个身份。开发者在控制台所能操作的点播资源由当前身份决定。
  2. 管理员身份 - 子应用管理:开发者在控制台上选择管理员身份后,可以创建子应用以及停用子应用。创建时,开发者可以为子应用命名,点播后台为每个子应用分配一个全局唯一的 ID。停用子应用会使对应的点播资源无法被访问,但不会被清除。后续将提供注销子应用的功能。
  3. 管理员身份 - 数据统计:开发者在控制台上选择管理员身份后,可以查看所有子应用(无法只选择部分子应用)的带宽、流量和存储总统计信息。
  4. 子应用身份 - 控制台标准功能:开发者在控制台上选择某一子应用身份后,可以操作属于该子应用的点播资源,且不影响其它子应用。操作内容和操作方式与未开通子应用功能时完全一致。
  5. 子应用身份 - 服务端 API:开发者可以在调用服务端 API 时指定操作某个子应用的点播资源,且不影响其它子应用。

限制

点播子应用体系具有以下限制:

  1. 不支持子应用维度的授权操作:不支持单独将某个子应用的点播资源授权给另一个腾讯云开发者,不论是控制台操作权限,还是服务端 API 权限。一个开发者如果拥有了某个子应用的控制台或者服务端 API 权限,就意味着该开发者能够访问归属于同一管理员的所有子应用。
  2. 不支持为子应用生成单独的点播账单:在计费层面,一个腾讯云开发者下的所有点播子应用都归属于该开发者,所有点播用量(存储、流量和转码时长)都会进行合并计算。同样,不支持单独为某个子应用缴纳费用,开发者需要为所有子应用的点播用量统一付费。

使用方法

开通

开发者如果需要开通点播子应用功能,请提工单申请

控制台

身份选择

开发者开通子应用功能后,在点播控制台左侧菜单栏会出现一个身份选择下拉框,开发者可以在这里选择身份。如果开发者刚开通子应用功能,则下拉框内只有两个选项:管理员和自己。用户新创建子应用后,下拉框会新增对应的身份选项。
身份选择

管理员

  • 【服务概览】:管理员身份下,该页面展示该点播开发者的计费方式,和所有子应用的总存储及总流量。
  • 【统计分析】:管理员身份下,该页面展示所有子应用的总带宽、总流量和总存储统计信息。
  • 【应用管理】:管理员身份下,该页面可以查看、创建和停用子应用。创建时,先单击【添加应用】,然后选择“创建方式”。其中“选用现有应用”表示选择用户在 互动直播 或者 云通信 中已经开通的应用,此时会将开发者在互动直播或云通信中的 SdkAppid 作为点播子应用 ID。“新建应用”表示申请一个新的子应用 ID。后续按界面提示操作即可。
    应用管理
    添加应用

子应用

子应用身份下,点播控制台和未开通子应用功能时基本一致,开发者可以查看和操作归属于该子应用的点播资源。

区别在于:服务概览页面展示的计费方式,是该子应用所属腾讯云开发者的点播计费方式,子应用自身没有独立的计费方式。
服务概览

服务端 API

开发者开通点播子应用功能后,通过点播服务端 API 来访问点播资源时,需要表明是操作哪个子应用下的资源。

使用方法

除了本文有特殊说明的情况外,点播服务端 API 可以通过以下方式来支持子应用:

请求中增加一个 SubAppId 参数(注意大小写),该参数与服务端 API 的 公共请求参数 平级,其值为子应用 ID。子应用 ID 在控制台选择管理员身份后,可以在应用管理页面看到。

参数名称 必填 类型 说明
SubAppId Integer 要操作的子应用 ID。如果未填写填写0或者填写用户的腾讯云 AppId,则操作的子应用为“自己”。

注意:

SubAppId 参数也要参与服务端 API 的 签名计算,计算规则相同。

支持子应用的服务端 API 列表

服务端 API 概览 中列出的接口均支持以上述方式指定子应用。

安全性考虑

点播开发者开通了子应用功能后,所有子应用调用服务端 API 时共享该开发者的 安全凭证(即 SecretId 和 SecretKey)。也就是说,如果某个子应用的使用者掌握了安全凭证,就可以操作其它任意子应用的点播资源。

在某些场景下,开发者可能不希望子应用使用者拥有这种权限,因此安全凭证仅由管理员掌握,而不开放给子应用使用者(SecretId 是可以公开的,只需要保管好对应的 SecretKey 即可)。为了让子应用使用者也能调用服务端 API,开发者需要自行开发权限管理和签名生成功能。一种参考方案如下图所示(该方案与 客户端上传 中生成签名的方式相类似):
服务端 API 签名

  1. 子应用使用者向点播开发者(即管理员)请求创建一个子应用。具体请求方式由点播用户与子应用使用者约定。
  2. 管理员执行创建子应用。目前该操作仅能在控制台通过管理员身份进行,服务端 API 接口暂未提供。
  3. 点播后台创建子应用。
  4. 点播后台将子应用 ID 返回给管理员。
  5. 管理员将子应用 ID 返回给子应用使用者,注意此处管理员并未返回安全凭证内容。
  6. 子应用使用者想要调用服务端 API,但由于自身并未持有安全凭证,无法生成签名,因此需要先向安全凭证的持有者 - 管理员请求服务端 API 签名。
  7. 管理员根据请求的内容,按照服务端 API 签名生成 的要求计算出签名,返回给子应用使用者。注意此处只返回签名计算结果,不返回 SecretKey。
  8. 子应用使用者利用获取到的签名向点播后台发起服务端 API 请求。
  9. 点播后台校验签名并返回结果。

文件上传

直播录制

直播录制 支持子应用体系,录制到点播中的文件归属于指定的子应用。 如果子应用未填写填写0或者填写开发者的腾讯云 AppId,则上传的文件归属于“自己”。

直播录制指定子应用的方式为:在直播推流参数中增加一个 vod_sub_app_id 参数(注意大小写)。

服务端上传

服务端上传 支持子应用体系,上传的文件归属于指定的子应用。 如果子应用未填写填写0或者填写开发者的腾讯云 AppId,则上传的文件归属于“自己”。

  • API 方式:ApplyUploadCommitUpload 接口按照上述方式增加 SubAppId 参数,上传文件 步骤中的接口不需要修改。

  • JAVA SDK 方式:在调用接口时增加一个 SubAppId 参数(注意大小写)。

    extraParams.put("SubAppId", 子应用 ID);
  • PHP SDK 方式:在调用接口时增加一个 SubAppId 参数(注意大小写)。

    array (
      'SubAppId' => xxxx,    
    )

客户端上传

客户端上传 支持子应用体系,上传的文件归属于指定的子应用。 如果子应用未填写填写0或者填写开发者的腾讯云 AppId,则上传的文件归属于“自己”。

客户端上传指定子应用的方式为:在 客户端上传签名 中增加一个 vodSubAppId 参数(注意大小写),该参数与签名中的必选参数平级,其值为子应用 ID。

参数名称 必填 类型 说明
vodSubAppId Integer 上传文件所归属的子应用 ID。如果不填写、填写 0 或者填写开发者的腾讯云 AppId,则操作的子应用为“自己”。

注意:

vodSubAppId 参数也要参与服务端 API 的 签名计算,计算规则相同。

URL 拉取上传

URL 拉取视频上传可以在控制台页面进行,也可以使用服务端 API。

  • 控制台:登录点播控制台后先选择所需的子应用身份,后续操作与不开通子应用功能时完全一样,在视频拉取页面按提示操作即可。
  • 服务端 API:使用 MultiPullVodFile 接口,按照上述的服务端 API 支持子应用通用方法增加SubAppId 参数即可。如果未填写填写0或者填写开发者的腾讯云 AppId,则操作的子账户为“自己”。

FAQ

开通子应用功能后,是否影响线上已有的点播资源和业务逻辑?

不影响。当开发者操作点播资源时,如果不指定子应用,默认为操作“自己”,也就是说和未开通子应用功能时保持兼容。

点播子应用功能与腾讯云 CAM 的关系

腾讯云提供了 访问管理 CAM 功能,用于各种授权场景。本文所描述的点播子应用功能与腾讯云 CAM 无关。为了避免开发者混淆,此处简单介绍 CAM 用于点播业务时与子应用功能的区别。

  • 点播开发者(以下称为授权者)可以在 访问管理控制台 新建用户(以下称为被授权者)进行点播授权。被授权者可以是 协作者,也可以是 子用户
  • 授权者对被授权者进行 授权管理,授权策略为默认策略 QcloudVODFullAccess。
  • 被授权者登录点播控制台后(如果是协作者,则登录时会提示选择开发商,应选择授权者的帐号),能够以授权者的身份操作授权者的点播资源。
  • 这种授权方式仅提供被授权者在控制台操作授权者点播资源的能力,但并未提供被授权者(用自己的安全凭证)通过服务端 API 操作授权者点播资源的能力。
  • 以上授权与点播子应用功能无关,被授权者并非点播子应用。

点播开发者停服会有什么影响?

开发者的点播服务停服时(包括 欠费停服、开发者主动要求停服或违规被封停等),其名下的所有点播子应用都会被停服。但管理员可以在控制台上单独停用某个子应用,使该子应用的点播资源无法再被访问,而不影响其它子应用的使用。