Policy授权是一种基于主体的授权。通过Policy授权的权限数据(即访问策略)被看做是授权主体的一种子资源。只有当主体(用户或角色)存在时,才能进行Policy授权操作。当主体被删除时,通过Policy授权的权限数据会被自动删除。Policy授权使用MaxCompute自定义的一种访问策略语言来进行授权,允许或禁止主体对项目空间对象的访问权限。
背景信息
Policy授权是一种新的授权机制,主要解决ACL授权机制无法解决的一些复杂授权场景,例如:
- 一次操作对一组对象进行授权,如所有的函数、所有以taobao开头的表。
- 带限制条件的授权,如授权只会在指定的时段内才会生效、当请求者从指定的IP地址发起请求时授权才会生效、或者只允许用户使用SQL(而不允许其它类型的Task)来访问某张表。
您可以从如下文档中,更详细地了解Policy信息:
- Policy基本术语
介绍Policy包含的访问控制元素主体(Principal)、操作(Action)、资源(Resource)、访问限制(Access Restriction)和效力(Effect)的概念。
- 访问策略语言结构
介绍Policy的授权语句结构、条件块结构、条件操作类型和条件关键字。
- 访问策略语言规范
介绍Policy中Principal、Resource、Action和Condition Keys的命名规范。
- Policy与ACL的区别
介绍Policy和ACL授权的特点。
- 应用限制
使用限制
- 目前仅支持Role Policy和Project Policy,暂不支持User Policy。
- 每种Policy只支持一个Policy文件。由于Put Policy操作会覆盖已有的Policy,当用户需要修改Policy时,应按如下顺序分步操作:
- Get Policy。
- 用户自己Merge Policy Statements。
- 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/*"
}]
}