Atlas简单授权

如授权模型章节中所描述的,Apache Atlas支持可插拔授权模型。简单授权程序是Apache Atlas中包含的默认授权程序实现。简单授权程序使用JSON文件中定义的策略。本文档提供了配置Apache Atlas以使用简单授权程序的步骤的详细信息,以及包含授权策略的JSON文件格式的详细信息。

1. 配置

要将Apache Atlas配置为使用简单授权程序,请在application.properties配置文件中包含以下属性:

  1. atlas.authorizer.impl=simple
  2. atlas.authorizer.simple.authz.policy.file=/etc/atlas/conf/atlas-simple-authz-policy.json

请注意,如果指定的策略文件位置不是绝对路径,则将在以下路径中查找该文件:

  • Apache Atlas配置目录(由系统属性atlas.conf指定)
  • Apache Atlas服务器的当前目录
  • CLASSPATH

2.策略文件格式

简单授权程序使用角色(roles)对权限进行分组,然后可以将权限分配给用户和用户组。以下示例有助于理解策略文件格式的详细信息:

2.1 角色

以下策略文件定义了3个角色:

  • ROLE_ADMIN:拥有所有权限
  • PROD_READ_ONLY:可以访问具有以“@prod”结尾的qualifiedName的读取实体
  • TEST_ALL_ACCESS:具有对以“@test”结尾的qualifiedName的实体的所有访问权限

简单授权程序支持Java reg-ex指定privilege / entity-type / entity-id / classification / typeName / typeCategory的值。

  1. {
  2. "roles": {
  3. "ROLE_ADMIN": {
  4. "adminPermissions": [
  5. {
  6. "privileges": [ ".*" ]
  7. }
  8. ],
  9. "entityPermissions": [
  10. {
  11. "privileges": [ ".*" ],
  12. "entityTypes": [ ".*" ],
  13. "entityIds": [ ".*" ],
  14. "classifications": [ ".*" ]
  15. }
  16. ],
  17. "typePermissions": [
  18. {
  19. "privileges": [ ".*" ],
  20. "typeCategories": [ ".*" ],
  21. "typeNames": [ ".*" ]
  22. }
  23. ]
  24. },
  25. "PROD_READ_ONLY" : {
  26. "entityPermissions": [
  27. {
  28. "privileges": [ "entity-read", "entity-read-classification" ],
  29. "entityTypes": [ ".*" ],
  30. "entityIds": [ ".*@prod" ],
  31. "classifications": [ ".*" ]
  32. }
  33. }
  34. "TEST_ALL_ACCESS" : {
  35. "entityPermissions": [
  36. {
  37. "privileges": [ ".*" ],
  38. "entityTypes": [ ".*" ],
  39. "entityIds": [ ".*@test" ],
  40. "classifications": [ ".*" ]
  41. }
  42. }
  43. },
  44. "userRoles": {
  45. ...
  46. },
  47. "groupRoles": {
  48. ...
  49. }
  50. }

2.2 将角色分配给用户和用户组

上面定义的角色可以分配(授予)给用户,如下所示:

  1. {
  2. "roles": {
  3. ...
  4. },
  5. "userRoles": {
  6. "admin": [ "ROLE_ADMIN" ],
  7. "steward": [ "DATA_STEWARD" ],
  8. "user1": [ "PROD_READ_ONLY" ],
  9. "user2": [ "TEST_ALL_ACCESS" ],
  10. "user3": [ "PROD_READ_ONLY", "TEST_ALL_ACCESS" ],
  11. },
  12. "groupRoles": {
  13. ...
  14. }
  15. }

可以将角色分配(授予)给用户组,如下所示。用户可以属于多个组;分配给用户所属的所有组的角色将用于授权访问。

  1. {
  2. "roles": {
  3. ...
  4. },
  5. "userRoles": {
  6. ...
  7. },
  8. "groupRoles": {
  9. "admins": [ "ROLE_ADMIN" ],
  10. "dataStewards": [ "DATA_STEWARD" ],
  11. "testUsers": [ "TEST_ALL_ACCESS" ],
  12. "prodReadUsers": [ "PROD_READ_ONLY" ]
  13. }
  14. }