在使用云手机提供的客户端服务前,必须通过鉴权流程。为了最大程度地保障密钥的安全,我们建议您通过客户端动态请求服务端发放临时 AK/SK,用以生成一个仅短时间内有效的一次性 Token 来完成鉴权,而不是将长期的 AK/SK 存储在客户端。通过这种方式获取到的临时凭证仅在有限的时间内有效,即使被非法获取,也会很快失效,极大降低了密钥泄露的风险。
本文介绍如何通过安全令牌服务(STS)换取临时鉴权凭证。
步骤
1. 进入控制台
2. 进入访问控制
点击右上角 用户名 ,选择 访问控制。
3. 新建角色并添加权限
3.1 新建角色
在左侧导航栏中选择身份管理-角色 ,点击 新建角色。
3.2 选择信任身份
信任身份类型选择 账号 ,身份选择 当前账号 ,点击下一步。
3.3 配置角色信息
填写 角色名 和其他信息,点击下一步。
3.4 添加权限
搜索并添加 STSAssumeRoleAccess 和 ACEPFullAccess 策略,点击提交。
4. 新建子账户并添加权限
4.1 新建子账户
在左侧导航栏选择 身份管理-用户 ,点击 新建用户。
点击 通过用户名创建,输入 用户名 并点击下一步。
4.2 为新建的子账户赋权限
搜索并添加 STSAssumeRoleAccess 和 ACEPFullAccess 权限,点击下一步进行信息确认,确认无误后点击提交完成子账户创建。
4.3 为新建的子账户新建访问密钥
选择刚创建的用户进入用户详情,点击 密钥-新建密钥 ,获取到子账户 AK、SK。
5. 获取临时鉴权密钥
测试环境
测试环境下,你可以使用子账户的 AK、SK,在控制台生成临时鉴权密钥。
在控制台左侧导航栏点击新手入门,选择存储方案后点击生成临时鉴权密钥。
正式环境
正式环境下,推荐您使用子账户的 AK、SK,通过安全令牌服务(STS)来换取临时鉴权密钥,详情参见 STS 接口说明。 STS 接口提供了参数 Policy 用于进一步限制临时密钥的权限,基于权限最小化原则,推荐您设置 Policy 参数,限制临时密钥可以访问的云手机资源范围。
以下提供了 Policy 示例值:
"trn:ACEP::20000****:product_id/198670449019506****",
"trn:ACEP::20000****:product_id/679850906414910****",
"trn:ACEP::20000****:pod_id/756989046484640****",
"trn:ACEP::20000****:pod_id/590849764404646****",
"trn:ACEP::20000****:pod_id/696445848236401****",
"trn:ACEP::21000****:user_id/14235****",
"trn:ACEP::21000****:user_id/14345****",
"trn:ACEP::21000****:user_id/11235****"
参数说明:
- Action 用于指定服务及操作,格式为 服务ID:接口Action,支持传入多个。
- 例如上述示例值表示临时密钥可以调用云手机(ACEP)的 ListPod、DetailPod 接口。
注意
- 由于 SDK 中的接口实际会调用云手机 OpenAPI 进行对应操作(例如 SDK 中的 start 接口会调用 PodStart 启动实例)。因此,您需要在 Action 中为各客户端 SDK 使用到的 OpenAPI 添加允许(Allow)权限。
- 若您换取的临时鉴权密钥(STS)供客户端 SDK 使用,请确保您为各客户端 SDK 使用到的 OpenAPI(如下)均添加了允许(Allow)权限。
- Web H5 SDK:StartScreenShot、MonitorPod、PodStart、BatchPodStart、StartPodEventSync、UpdatePodEventSync、GetMediaToken、ListPod、GetTaskInfo
- Windows SDK:PodStart、BatchPodStart、StartPodEventSync、UpdatePodEventSync、GetMediaToken、ListPod、GetTaskInfo
- Resource 参数用于指定业务、实例资源、用户 ID,格式如下,支持传入多个。
- 指定业务:trn:服务ID::火山账号ID:product_id/您的云手机业务ID
- 指定实例:trn:服务ID::火山账号ID:pod_id/您的云手机实例ID
- 指定用户:trn:服务ID::火山账号ID:user_id/用户ID
- 例如上述示例值表示临时密钥可以访问云手机(ACEP)内 ID 为 198670449019506**** 、679850906414910****的业务、ID 为 756989046484640**** 、590849764404646****、696445848236401****的实例、用户 ID 为 14235****、14345****、11235**** 的实例。
注意
- 仅当 Action 中指定的接口包含实例相关参数(如 PodId、PodIdlist)时,Resource 中指定的实例资源才生效。
- 仅当 Action 中指定的接口包含 PodStart 时,Resource 中指定的用户 ID 才生效,且仅对该接口生效。
基于火山引擎 SDK 调用 STS 接口获取临时密钥的示例代码如下: