为了方便MaxCompute的项目空间所有者(Project Owner)或安全管理员对项目空间进行日常安全运维和保障数据安全,在您开始配置安全功能之前,建议您先进行安全模型的学习。

MaxCompute有安全模型,DataWorks也有安全模型。当通过DataWorks使用MaxCompute,而DataWorks的安全模型不满足业务安全需求时,需要合理地将两个安全模型结合使用。

您也可以通过观看MaxCompute安全管理解析视频进行安全管理基础的学习。

MaxCompute安全模型

  • 安全体系
    MaxCompute多租户的数据安全体系,主要包括如下内容:
    • 用户认证

      支持云账号和RAM账号两种账号体系。对于RAM账号,仅识别账号体系不识别RAM权限体系。即可以将主账号拥有的任意RAM子账号加入MaxCompute的项目中,但MaxCompute在对该RAM子账号进行权限验证时,并不会考虑RAM中的权限定义。

    • 用户与授权管理

      您可以在MaxCompute项目空间中对用户进行添加(Add)、移除(Remove)、授权(Grant)管理,还可以通过角色(Role)管理授权。MaxCompute项目空间默认有Admin角色。授权方式包含ACL和Policy方式,此处只讲解ACL方式。

      ACL使用的语法类似于SQL92定义的GRANT和REVOKE语法,通过简单的授权语句来完成对已存在的项目空间对象的授权或撤销授权。授权语法举例如下。
      grant actions on object to subject;
      revoke actions on object from subjec;
    • 标签安全策略

      基于标签的安全(LabelSecurity)是项目空间级别的一种强制访问控制策略(Mandatory Access Control, MAC)。它可以让项目空间管理员能更加灵活地控制用户对列级别敏感数据的访问。

    • 跨项目空间的资源分享

      Package是一种跨项目空间共享数据及资源的机制,主要用于解决跨项目空间的用户授权问题。即可以分享Table、Resource、Function等资源给其他项目,但无需对其他项目的用户进行管理。

    • 项目空间的数据保护

      主要解决类似于不允许用户将数据转移到项目空间之外的需求。

  • 对象赋权、Role和Label关系
    MaxCompute安全体系包含多种策略 ,而各种策略赋权是权限递增关系。下面以获取一个L4等级表权限的具体步骤来举例说明权限递增关系:
    1. 如果用户未有过授权记录,且非本项目用户,首先需要将该用户添加至此项目中。这个过程中,用户还没有任何实际权限。
    2. 授权用户对象的操作权限。方式如下:
      • 直接将操作权限赋予给用户。
      • 将ACL赋权给角色,再将角色赋权给用户。 如果资源没有设置Label,那么此时用户已经拥有该资源的权限。
    3. 对于拥有Label的资源(例如数据表、打包了数据表的Package),还需要为用户赋予Label权限。方式如下:
      • 针对某个数据表的字段授权。
      • 针对某个数据表授权(暂不支持)。
      • 针对某个Package授权。
      • 针对指定用户进行批量的Label授权,不支持对角色进行Label授权。
    各权限赋权过程及关系图如下:
  • 数据流出保护机制和Package关系

    数据流出保护机制是MaxCompute防止项目内的数据批量流出的安全功能。开启数据流出保护机制后,如果项目空间之间没有建立Trusted Project Group ,访问其它项目空间的数据就必须通过Package方式进行。Package得到授权后,对方Package可以自主赋权Package内的资源给组内用户。

    部分资源(例如某些常用表、UDF等),如果想通过Package管理赋权,也可以将资源打包后赋权给其他项目空间。

    数据流出保护机制支持例外处理,即部分特殊的业务场景下,可以针对应用的IP地址、产品云账号执行Exception策略,以满足特殊的数据流出需求。

DataWorks安全模型

DataWorks是提供多人协同数据开发工作的平台,其安全模型需要考虑如下方面:
  1. 企业之间数据的安全隔离。
    • DataWorks支持用户认证以及对接RAM。云账号可以作为主账号开通并创建DataWorks项目,而项目成员必须为该主账号的RAM子账号,不能是其他云账号。
    • 同一个主账号创建的项目作为一个组织,项目与项目之间的任务可以进行依赖配置。不同主账号创建的项目之间数据(各种任务)隔离。
  2. 数据开发(即ETL)过程中的安全问题。例如,生产任务如何保障不可随意变更、哪些成员可以进行代码编辑调试、哪些成员可以进行发布生产任务等。

    DataWorks通过业务划分开发项目与生产项目进行任务开发调试和稳定生产的隔离。通过成员角色控制哪些成员可以进行任务开发调试,哪些成员可以运维生产任务等。

  3. 由于底层的MaxCompute有自己的安全模型,项目成员进行ETL过程肯定会需要MaxCompute的各种资源(Table、Resource、Function、Instance)的相关权限。

    DataWorks在MaxCompute成功创建项目空间的同时,也会创建与DataWorks角色对应的MaxCompute角色,并给不同的角色进行赋权。