绝大多数应用系统都会有用户和权限管理的功能,Azkaban当然也有,用户可用于登录页面,权限则可以控制当前用户可以看到哪些project,以及对他的操作范围进行控制。
1. XmlUserManager
XmlUserManager是Azkaban中内置的默认UserManager类,在azkaban.properties
文件中的设置如下:
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml
你可以自定义一个xml文件用于配置用户和角色,当然需要修改user.manager.xml.file
的值,并且你指定的xml文件的根标签必须是:
<azkaban-users>
...
</azkaban-users>
这个文件不能动态修改,因为azkaban只会在web-server启动的时候加载一次这个文件。
(1) Users
添加用户,需要使用<user>这个标签:
<azkaban-users>
<user username="myusername" password="mypassword" roles="a" groups="mygroup" / >
<user username="myusername2" password="mypassword2" roles="a, b" groups="ga, gb" / >
...
</azkaban-users>
属性 | 说明 | 是否必需 |
---|---|---|
username | 用户名 | yes |
password | 密码 | yes |
roles | 角色,多个使用","分隔 | no |
groups | 所属组,多个使用","分隔 | no |
proxy | 这个用户可以代理的用户,多个使用","分隔 | no |
(2) Groups
添加组,需要使用<group>这个标签:
<azkaban-users>
<user username="a" ... groups="groupa" / >
...
<group name="groupa" roles="myrole" / >
...
</azkaban-users>
以上配置中,a用户属于groupa组,因为groupa组有myrole角色,所以a用户也有myrole角色。
属性 | 说明 | 是否必需 |
---|---|---|
name | 组名 | yes |
roles | 组的角色,多个使用","分隔 | on |
(3) Roles
添加角色,需要使用<role>这个标签:
<azkaban-users>
<user username="a" ... groups="groupa" roles="readall" / >
<user username="b" ... / >
...
<group name="groupa" roles="admin" / >
...
<role name="admin" permissions="ADMIN" / >
<role name="readall" permissions="READ" / >
</azkaban-users>
以上配置中,admin角色有"ADMIN"权限,readall角色有"READ"权限,groupa组是admin角色,所以groupa组中成员具有"ADMIN"权限,所以a用户具有"ADMIN"权限,同时由于指定了a用户的roles="readall",所以a用户也具有"READ"权限。
属性 | 说明 | 是否必需 |
---|---|---|
name | 角色名 | yes |
permissions | 权限,多个使用","分隔 | yes |
可以选择的权限如下:
权限名 | 说明 |
---|---|
ADMIN | 具有所有权限 |
READ | 只能访问每个project,并且查看project的日志 |
WRITE | 可以上传文件,修改任务属性,删除project |
EXECUTE | 可以启动任务 |
SCHEDULE | 可以调度任务 |
CREATEPROJECTS | 可以创建project |
2. 自定义用户管理的类
实现UserManager
接口:
public interface UserManager {
public User getUser(String username, String password) throws UserManagerException;
public boolean validateUser(String username);
public boolean validateGroup(String group);
public Role getRole(String roleName);
public boolean validateProxyUser(String proxyUser, User realUser);
}
自定义的类的构造器中应该传入azkaban.utils.Props
对象,打包后放入extlib
目录或者plugins
目录下,修改azkaban.properties
文件:
user.manager.class=com.your.code.MainClass
网友评论