Policy授权是一种基于主体的授权。通过Policy授权的权限数据(即访问策略)被看做是授权主体的一种子资源。只有当主体(用户或角色)存在时,才能进行Policy授权操作。当主体被删除时,通过Policy授权的权限数据会被自动删除。Policy授权使用MaxCompute自定义的一种访问策略语言来进行授权,允许或禁止主体对项目空间对象的访问权限。

背景信息

Policy授权是一种新的授权机制,主要解决ACL授权机制无法解决的一些复杂授权场景,例如:
  • 一次操作对一组对象进行授权,如所有的函数、所有以taobao开头的表。
  • 带限制条件的授权,如授权只会在指定的时段内才会生效、当请求者从指定的IP地址发起请求时授权才会生效、或者只允许用户使用SQL(而不允许其它类型的Task)来访问某张表。
您可以从如下文档中,更详细地了解Policy信息:

使用限制

  • 目前仅支持Role Policy和Project Policy,暂不支持User Policy。
  • 每种Policy只支持一个Policy文件。由于Put Policy操作会覆盖已有的Policy,当用户需要修改Policy时,应按如下顺序分步操作:
    1. Get Policy。
    2. 用户自己Merge Policy Statements。
    3. Put Policy。

命令格式

Policy授权命令格式如下:
GET POLICY; 
-- 读取项目空间的Policy。
PUT POLICY <policyFile>; 
-- 设置(覆盖)项目空间的Policy。
GET POLICY ON ROLE <roleName>; 
-- 读取项目空间中某个角色的Policy。
PUT POLICY <policyFile> ON ROLE <roleName>; 
-- 设置(覆盖)项目空间中某个角色的Policy。
说明 MaxCompute支持的Policy类型有Project Policy和Role Policy。Project Policy对Project中的所有用户有效,而Role Policy只对已赋予角色的用户有效。在Policy格式上,Project Policy必须指定Principal(用户),而Role Policy则不能指定Principal(因为用户与角色的指派关系已经存在)。

使用Project Policy授权的示例如下:

场景说明:授权用户alice@aliyun.com只能在2017-11-11 23:59:59这个时间点之前,只能从10.32.180.0~23这个IP段提交请求,只允许在项目空间test_project中执行CreateInstance、CreateTable和List操作,禁止删除test_project下的任何表。

编写Policy如下:
{
"Version": "1",
"Statement":
 [{
    "Effect":"Allow",
    "Principal":"ALIYUN$alice@aliyun.com",
    "Action":["odps:CreateTable","odps:CreateInstance","odps:List"],
    "Resource":"acs:odps:*:projects/test_project",
    "Condition":{
        "DateLessThan": {
            "acs:CurrentTime":"2013-11-11T23:59:59Z"
        },
        "IpAddress": {
            "acs:SourceIp":"10.32.180.0/23"
        }
    }
},
{
    "Effect":"Deny",
    "Principal":"ALIYUN$alice@aliyun.com",
    "Action":"odps:Drop",
    "Resource":"acs:odps:*:projects/test_project/tables/*"
}]
}