通过安全管理基础篇了解到MaxCompute和DataWorks的相关安全模型,以及学习了各种安全功能配置后,您就可以开始动手实践安全管理案例了。本章节我们通过列举两个常见的基础业务需求来介绍项目创建和管理。

创建基本ETL开发业务项目

场景描述

多人协同开发,成员责任划分明确,需遵循正常的开发、调试、发布流程,生产数据查看须严格控制。

需求分析
  • 多人协同开发,DataWorks项目本身就满足这一点。
  • 成员责任划分明确,DataWorks的基础成员角色(项目管理、开发、运维、部署、访客)基本可以满足需求。
  • 遵循正常开发、调试、发布流程,生产数据需严格控制。通过在DataWorks上创建并区分开发生产项目,可以实现控制。
操作步骤
  1. 创建项目
    1. 创建项目主要配置如图所示。

      • 项目模式选择标准模式(开发跟生产隔离)。该模式创建的结果是一个DataWorks项目空间绑定关联两个MaxCompute project(开发和生产project)。开发环境上进行开发调试,生产环境任务由开发环境通过发布流程发布过来进行稳定运行。
      • 开发环境MaxCompute访问身份为个人账号。项目成员在开发环境做任务开发调试时用个人账号进行操作。这样做的目的在于:每个成员根据业务需求在开发调试过程中需要用到的MaxCompute各种生产资源(table、Resource、function)不同。为防止权限过大,每个成员自己申请自己所需的权限(主要是生产表权限),同时还可以更好的做后续的安全审计。
      • 生产环境MaxCompute访问身份为项目负责人账号即project的owner。生产环境要保障稳定和安全生产,正常情况下:不允许成员可以随意提交job,不允许个人账号拥有生产表的删除、修改权限以免通过命令行工具进行操作无法受到更好的控制。个人账号需要读生产表的权限示,必须进行申请以便更好的管理数据安全。
  2. 添加项目成员
    DataWorks上添加RAM子账号为项目成员,按需分配角色。同时,对应的开发环境project会将对应的role授权给子账号。
    • 项目管理员:除拥有开发角色和运维角色全部权限外,还可以进行添加/移出项目成员并授予角色创建自定义资源组等项目级别的操作。同时拥有MaxCompute开发project的role_project_admin这个role。
    • 开发:负责数据开发页面设计和维护工作流。同时拥有MaxCompute开发project的role_project_dev这个role。
    • 运维:负责在运维中心页面管理全部任务的运行情况并做相应处理。同时拥有MaxCompute开发project的role_project_pe这个role。
    • 部署:仅在多项目模式时审核任务代码并决定是否提交运维。同时拥有MaxCompute开发project的role_project_deploy这个role。
    • 访客:仅有只读权限,可查看数据开发页面的工作流设计和代码内容。同时拥有MaxCompute开发project的role_project_guest这个role。
    • 安全管理员:仅有数据保护伞模块的操作权限,无其他模块权限。同时拥有MaxCompute开发project的role_project_security这个role。
  3. 任务开发调试

    开发角色成员在DataWorks的数据开发模块(对应MaxCompute开发project)进行任务开发调试,其间用到的生产project表,可以到DataWorks的数据管理模块进行申请。

  4. 任务发布到生产环境

    开发角色成员调试好任务后,进行打包。运维角色成员可以进行代码review(开发角色成员需要线下通知运维角色成员这个流程)后执行发布包将任务发布到生产环境。 这个过程保障任务不能随意发布到生产环境执行。

  5. 开发成员生产任务测试

    任务发布到生产环境后,建议开发成员还需要到运维中心对生产环境任务测试执行一次,以确保生产任务的可正常执行。若任务执行返回成功状态,还是需要先查看日志判断执行是否正常,进一步验证就需要查询结果表是否有正常的产出。此时,通常您需要在开发界面进行表查询,而个人对生产环境产出的表默认无权限,可以到DataWorks的数据管理模块进行申请。

说明
  • DataWorks的数据开发模块是多人协同开发,所有本项目的成员都可以查看任务代码,且有编辑权限的成员都可以进行修改编辑。因此,无法很好地保密一些核心的敏感度高的代码。有类似高保密性的任务及数据,目前可以由单独项目的固定成员进行开发。
  • 生产环境都是通过project owner访问MaxCompute,因此创建的table、function、resource的owner显示的是project owner的账号。这样会出现创建的表的owner不是创建者自己、创建表的人没有权限查看自己建的表的情况。
  • 由于开发和生产项目owner都是同一个账号,请谨防通过发布任务到生产项目将生产项目表读写到开发项目,再通过开发项目获取生产数据。

单项目且每个成员只能操作自己创建的表

场景描述

业务单一,成员角色基本一致,后续业务不会扩展。如专供取数,即不做数据开发,只需要查询下载业务数据(例如运营角色需要获取一些数据进行分析)。

需求分析
  • 本项目不做数据开发,则需要分析的数据必定是在其他项目中。为了避免不同主账号资源隔离,本项目的owner(主账号)必须与数据开发生产项目的owner同一账号。
  • 本项目目的主要为完成数据查询下载,所以需要每个成员用自己的权限进行数据查询下载。因此这个项目的MaxCompute设置MaxCompute访问身份属性为个人账号
  • 当设置MaxCompute访问身份属性为个人账号后,DataWorks中每个项目成员将会被授予对应MaxCompute的role权限。由于需求是每个成员只能操作自己创建的表,因此您需要处理好这个默认的role权限。
操作步骤
  1. 创建项目
    1. 主账号必须是需要分析的数据所在的项目主账号,创建项目主要配置如图所示。

  2. 创建MaxCompute自定义role并授权
    主账号通过客户端进行操作。
    create role custom_dev;--创建自定义role
    grant List, CreateInstance,CreateTable,CreateFunction,CreateResource on project prj_name to role custom_dev;--给自定义role赋权
  3. MaxCompute的project设置允许对象创建者默认拥有访问权限
    主账号通过客户端进行操作。
    set ObjectCreatorHasAccessPermission=true;--实际上这个flag默认已经为true,可以通过如下命令查看。
    show SecurityConfiguration;
    也可以在DataWorks的 项目管理 > MaxCompute高级配置中进行配置。
  4. 添加项目成员
    DataWorks上添加子账号为新成员。例如添加成员时角色为 开发,则添加成功后,在对应MaxCompute的project里该成员对应的role是role_project_dev。主账号可以通过 show grants for ram$主账号:子账号;命令行进行查看。

  5. 修改新成员的MaxCompute权限
    主账号通过客户端进行操作。
    revoke role_project_dev from ram$主账号:子账号;--将新成员从默认授予的role中移除。
    grant custom_dev to ram$主账号:子账号;--给新成员授予自定义角色。
说明
  • 该项目的成员若重新操作添加如上描述中的开发角色,则成员又会重新被授予role_project_dev的role。
  • 该项目经过上述配置后,只能做到每个成员可以查看自己创建的表(对象),但是做不到每个成员只能看到自己创建的任务。
  • 该项目成员需要查询的表的权限必须由自己通过正常的权限申请流程(可在DataWorks的数据管理中申请),或者通过package授权方式,把其他生产项目的表加到package中,再将package安装到该项目并授权给成员。详情可参见用户与权限管理