环境:OS X EI Capitan 10.11.3 + ActiveMQ 5.13
1. 认证
(1)默认的认证方式
Broker 默认使用 JAAS 作为认证的 Provider。
可以设置环境变量:java.security.auth.login.config,指向JAAS的配置文件。
在启动脚本中,修改变量 ACTIVEMQ_OPTS,增加-Djava.security.auth.login.config=...
如果没有设置该变量,Activemq 会在 classpath 中找名为 login.config 的文件。
conf/login.config 文件内容如下:
activemq {
org.apache.activemq.jaas.PropertiesLoginModule required
org.apache.activemq.jaas.properties.user="users.properties"
org.apache.activemq.jaas.properties.group="groups.properties";
reload=true;
};
其中 reload=true; 表示 Activemq 会自动加载修改后的 users.properties 和 groups.properties 文件。
conf/users.properties 文件内容如下:
admin=admin
conf/groups.properties 文件内容如下:
admins=admin
(2)使用 Simple Authentication Plugin 认证方式
注意,这种方式一般用于测试环境,不用于生产环境,其好处是搭建简单快捷。
在 conf/activemq.xml 中 broker 的配置的开头增加如下内容:
<plugins>
<simpleAuthenticationPlugin anonymousAccessAllowed="true">
<users>
<authenticationUser username="system" password="manager"
groups="users,admins"/>
<authenticationUser username="user" password="password"
groups="users"/>
<authenticationUser username="guest" password="password" groups="guests"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
其中,anonymousAccessAllowed="true" 表示允许匿名访问 broker。
默认的匿名用户是 anonymous,匿名组是 anonymous
你可以通过设置属性 anonymousUser 和 anonymousGroup,修改默认的匿名用户和组。
这里定义的用户和组,可以用于 broker 的授权定义。
2. 授权
Activemq 提供的权限操作有三个:
(1)read 浏览并消费 destination 中的消息
(2)write 发送消息到 destination
(3)admin 动态创建或者延迟创建 destination
3. JAAS 认证 + 授权的例子
(1)在 conf/activemq.xml 中 broker 的配置的开头增加如下内容:
<plugins>
<!-- use JAAS to authenticate using the login.config file on the classpath to configure JAAS -->
<jaasAuthenticationPlugin configuration="activemq-domain" />
<!-- lets configure a destination based authorization mechanism -->
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=">" read="admins" write="admins" admin="admins" />
<authorizationEntry queue="USERS.>" read="users" write="users" admin="users" />
<authorizationEntry queue="GUEST.>" read="guests" write="guests,users" admin="guests,users" />
<authorizationEntry topic=">" read="admins" write="admins" admin="admins" />
<authorizationEntry topic="USERS.>" read="users" write="users" admin="users" />
<authorizationEntry topic="GUEST.>" read="guests" write="guests,users" admin="guests,users" />
<authorizationEntry topic="ActiveMQ.Advisory.>" read="guests,users" write="guests,users" admin="guests,users"/>
</authorizationEntries>
<!-- let's assign roles to temporary destinations. comment this entry if we don't want any roles assigned to temp destinations -->
<tempDestinationAuthorizationEntry>
<tempDestinationAuthorizationEntry read="tempDestinationAdmins" write="tempDestinationAdmins" admin="tempDestinationAdmins"/>
</tempDestinationAuthorizationEntry>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
其中,组 admins 对所有 queue 和 topic 拥有全部权限:read、write、admin;
组 users 对所有以 USERS. 开头的 queue 和 topic 拥有全部权限:read、write、admin;
组 users 对所有以 GUEST. 开头的 queue 和 topic 拥有 write 和 admin 权限;
组 guests 对所有以 GUEST. 开头的 queue 和 topic 拥有全部权限:read、write、admin;
组 users 和 guests 对所有以 ActiveMQ.Advisory. 开头的 topic 拥有全部权限:read、write、admin,这是因为 Activemq 使用其创建和删除临时的 destination。
(2)修改后的 conf/login.config 内容如下:
activemq-domain {
org.apache.activemq.jaas.PropertiesLoginModule required
debug=true
org.apache.activemq.jaas.properties.user="users.properties"
org.apache.activemq.jaas.properties.group="groups.properties";
};
(3)修改后的 conf/users.properties 内容如下:
admin=admin
maping=maping
guo=guo
(4)修改后的 conf/groups.properties 内容如下:
admins=admin
users=maping
guests=guo
参考文献:
1. http://activemq.apache.org/security.html
1. 认证
(1)默认的认证方式
Broker 默认使用 JAAS 作为认证的 Provider。
可以设置环境变量:java.security.auth.login.config,指向JAAS的配置文件。
在启动脚本中,修改变量 ACTIVEMQ_OPTS,增加-Djava.security.auth.login.config=...
如果没有设置该变量,Activemq 会在 classpath 中找名为 login.config 的文件。
conf/login.config 文件内容如下:
activemq {
org.apache.activemq.jaas.PropertiesLoginModule required
org.apache.activemq.jaas.properties.user="users.properties"
org.apache.activemq.jaas.properties.group="groups.properties";
reload=true;
};
其中 reload=true; 表示 Activemq 会自动加载修改后的 users.properties 和 groups.properties 文件。
conf/users.properties 文件内容如下:
admin=admin
conf/groups.properties 文件内容如下:
admins=admin
(2)使用 Simple Authentication Plugin 认证方式
注意,这种方式一般用于测试环境,不用于生产环境,其好处是搭建简单快捷。
在 conf/activemq.xml 中 broker 的配置的开头增加如下内容:
<plugins>
<simpleAuthenticationPlugin anonymousAccessAllowed="true">
<users>
<authenticationUser username="system" password="manager"
groups="users,admins"/>
<authenticationUser username="user" password="password"
groups="users"/>
<authenticationUser username="guest" password="password" groups="guests"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
其中,anonymousAccessAllowed="true" 表示允许匿名访问 broker。
默认的匿名用户是 anonymous,匿名组是 anonymous
你可以通过设置属性 anonymousUser 和 anonymousGroup,修改默认的匿名用户和组。
这里定义的用户和组,可以用于 broker 的授权定义。
2. 授权
Activemq 提供的权限操作有三个:
(1)read 浏览并消费 destination 中的消息
(2)write 发送消息到 destination
(3)admin 动态创建或者延迟创建 destination
3. JAAS 认证 + 授权的例子
(1)在 conf/activemq.xml 中 broker 的配置的开头增加如下内容:
<plugins>
<!-- use JAAS to authenticate using the login.config file on the classpath to configure JAAS -->
<jaasAuthenticationPlugin configuration="activemq-domain" />
<!-- lets configure a destination based authorization mechanism -->
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=">" read="admins" write="admins" admin="admins" />
<authorizationEntry queue="USERS.>" read="users" write="users" admin="users" />
<authorizationEntry queue="GUEST.>" read="guests" write="guests,users" admin="guests,users" />
<authorizationEntry topic=">" read="admins" write="admins" admin="admins" />
<authorizationEntry topic="USERS.>" read="users" write="users" admin="users" />
<authorizationEntry topic="GUEST.>" read="guests" write="guests,users" admin="guests,users" />
<authorizationEntry topic="ActiveMQ.Advisory.>" read="guests,users" write="guests,users" admin="guests,users"/>
</authorizationEntries>
<!-- let's assign roles to temporary destinations. comment this entry if we don't want any roles assigned to temp destinations -->
<tempDestinationAuthorizationEntry>
<tempDestinationAuthorizationEntry read="tempDestinationAdmins" write="tempDestinationAdmins" admin="tempDestinationAdmins"/>
</tempDestinationAuthorizationEntry>
</authorizationMap>
</map>
</authorizationPlugin>
</plugins>
其中,组 admins 对所有 queue 和 topic 拥有全部权限:read、write、admin;
组 users 对所有以 USERS. 开头的 queue 和 topic 拥有全部权限:read、write、admin;
组 users 对所有以 GUEST. 开头的 queue 和 topic 拥有 write 和 admin 权限;
组 guests 对所有以 GUEST. 开头的 queue 和 topic 拥有全部权限:read、write、admin;
组 users 和 guests 对所有以 ActiveMQ.Advisory. 开头的 topic 拥有全部权限:read、write、admin,这是因为 Activemq 使用其创建和删除临时的 destination。
(2)修改后的 conf/login.config 内容如下:
activemq-domain {
org.apache.activemq.jaas.PropertiesLoginModule required
debug=true
org.apache.activemq.jaas.properties.user="users.properties"
org.apache.activemq.jaas.properties.group="groups.properties";
};
(3)修改后的 conf/users.properties 内容如下:
admin=admin
maping=maping
guo=guo
(4)修改后的 conf/groups.properties 内容如下:
admins=admin
users=maping
guests=guo
参考文献:
1. http://activemq.apache.org/security.html
没有评论:
发表评论