全部产品
云市场

基于RAM Policy实现自定义授权

更新时间:2019-05-08 20:37:12

简介

RAM (Resource Access Management) 是阿里云提供的用户身份管理与资源访问控制服务。

RAM Policy(权限策略)使用语法结构描述一组权限,它可以精确地描述被授权的资源集、操作集以及授权条件。通过设置权限策略,并给用户或用户组附加授权,就可以精确控制用户访问您名下哪些资源或服务的权限,比如限制您的用户只拥有上传、播放或审核权限。

RAM本身只做权限的分割和管理,而并非资源本身的隔离,也就是RAM用户(子账号)从属于主账号,并且这些子账号下不能拥有实际的任何资源,所有资源都属于主账号。如果想要进行资源隔离,可配合使用点播 多应用体系

在 RAM 中,权限策略作为一种资源实体,可以创建、更新、删除和查看,相关操作参考权限策略管理。点播已在RAM内置了4种系统策略:

SystemPolicy

但实际上,由于系统策略的授权粒度比较粗,很多时候并不能满足您的细粒度权限控制的需求,此时可以 新建自定义权限策略

授权语法

在开始设置前,需要先了解权限策略的基本元素语法结构,以点播系统策略AliyunVODPlayAuth为例:

  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Action": [
  6. "vod:GetPlayInfo",
  7. "vod:GetVideoPlayAuth",
  8. "vod:GetVideoPlayInfo",
  9. "vod:GetVideoInfo"
  10. ],
  11. "Resource": "*",
  12. "Effect": "Allow"
  13. }
  14. ]
  15. }

Version

Version定义了Policy的版本,本文档中 Version 可以固定设置为1。

Statement

通过Statement描述授权语义,其中可以根据业务场景包含多条语义,每条包含对 Action、Effect、Resource 和 Condition 的描述。每次请求,系统会逐条依次匹配检查,所有匹配成功的 Statement 会根据 Effect 的设置不同分为通过(Allow)、禁止(Deny),其中禁止(Deny)的优先。如果匹配成功的都为通过,该条请求即鉴权通过。如果匹配成功有一条禁止,或者没有任何条目匹配成功,该条请求被禁止访问。

Action

点播支持的Action操作与API一一对应,格式为 vod:API名称,如上面示例的播放操作:vod:GetPlayInfo,所有可用操作参见 点播API列表,注意多个使用英文逗号分隔。通过指定授权的Action列表,就能组合出想要的权限分组。

Resource

Resource 指代的是 VOD 上面的某个具体的资源或者某些资源(支持通配符*),Resource的规则是acs:vod:{region}:*。Resource 也是一个列表,可以有多个 Resource。其中的 region 字段暂不支持,请设置为*。

由于点播现在没有进一步区分资源,故一般建议授权点播时Resource填*。

Effect

Effect 代表本条的Statement的授权的结果,分为 Allow 和 Deny,分别指代通过和禁止。多条 Statement 同时匹配成功时,禁止(Deny)的优先级更高。

Condition

Condition 代表 Policy 授权的一些条件,对访问来源等进行限制,为可选项。

支持的条件如下:

Condition 功能 合法取值
acs:SourceIp 指定 IP 地址或网段 普通的 IP,支持通配符*
acs:SecureTransport 是否是 HTTPS 协议 “true”或者”false”
acs:MFAPresent 用户登录时是否使用了多因素认证 “true”或者”false”
acs:CurrentTime 指定合法的访问时间(云端接收到请求的时间) ISO8601格式,例如:2012-11-11T23:59:59Z

如下面的示例表示只允许 IP 来源为 42.160.1.0 的请求者访问播放接口:

  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Action": [
  6. "vod:GetPlayInfo",
  7. "vod:GetVideoPlayAuth",
  8. "vod:GetVideoPlayInfo",
  9. "vod:GetVideoInfo"
  10. ],
  11. "Resource": "*",
  12. "Effect": "Allow",
  13. "Condition":
  14. {
  15. "IpAddress":
  16. {
  17. "acs:SourceIp": "42.160.1.0"
  18. }
  19. }
  20. }
  21. ]
  22. }

授权示例

根据 点播API概览,可以得到所有对应的Action,进而分组控制权限,以下以授予媒体审核、云剪辑权限为例。

授予使用媒体审核的权限

  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Action": [
  6. "vod:SetAuditSecurityIp",
  7. "vod:ListAuditSecurityIp",
  8. "vod:CreateAudit",
  9. "vod:GetAuditHistory",
  10. "vod:SubmitAIMediaAuditJob",
  11. "vod:GetAIMediaAuditJob",
  12. "vod:GetMediaAuditResult",
  13. "vod:GetMediaAuditResultDetail",
  14. "vod:GetMediaAuditResultTimeline"
  15. ],
  16. "Resource": "*",
  17. "Effect": "Allow"
  18. }
  19. ]
  20. }

授予使用云剪辑的权限

  1. {
  2. "Version": "1",
  3. "Statement": [
  4. {
  5. "Action": [
  6. "vod:ProduceEditingProjectVideo",
  7. "vod:AddEditingProject",
  8. "vod:UpdateEditingProject",
  9. "vod:DeleteEditingProject",
  10. "vod:GetEditingProject",
  11. "vod:SearchEditingProject",
  12. "vod:SetEditingProjectMaterials",
  13. "vod:GetEditingProjectMaterials"
  14. ],
  15. "Resource": "*",
  16. "Effect": "Allow"
  17. }
  18. ]
  19. }

请注意:以上示例中,该API分组下如果增加了新的接口,则需要相应更新Action部分的列表。