在 MBean 描述符中指定细密度 MBean 安全性
要实现细密度管理安全性,代码必须标识受管 Bean (MBean) 表示的资源实例,并且向用户指定资源实例所必需的角色。 本主题讨论如何标识资源并指定必需角色。本主题还会讨论如何让 MBean 在不同用户标识下运行以便该方法可以访问其他资源实例。最后,本主题会讨论如何检查 MBean 方法是否能够通过使用程序化接口来访问资源实例。
开始之前
关于此任务
过程
- 确定 MBean 表示的资源实例和调用 MBean 方法所需的角色。
每个 MBean 方法都有缺省 MBean 安全策略。当 MBean 方法使用缺省安全策略时,MBean 表示的资源实例将作为运行 MBean 的服务器。如果 MBean 或 MBean 方法表示的不是运行服务器的资源实例,请执行以下步骤:
- 标识 MBean 表示的资源实例。
- 如果 MBean(如服务器 MBean)访问和修改运行 MBean 的服务器,那么不要指定安全策略来验证调用 MBean 的用户是否有权访问服务器,这是因为将强制实施缺省安全策略。在大多数情况下,使用 MBean 来访问和修改服务器。
- 如果在服务器中运行的 MBean 可以访问和修改并非直接属于服务器的资源,那么在允许运行
MBean 方法之前,检查调用该 MBean
的用户是否有权访问资源实例。
在大多数情况下,通过在表示资源实例的 MBean 的对象名称中标识“键/值”对来标识该资源实例。resourceIndentifierKey 属性定义该键。
例如,可使用 EJBModule MBean 来访问服务器中运行的应用程序内的 Enterprise JavaBeans (EJB) 模块。在此情况下,EJBModule MBean 的对象名包含键/值对。该键为应用程序。该值表示 EJBModule MBean 尝试访问的资源实例。将验证调用此 MBean 方法的用户以确保在允许运行 MBean 方法之前已授予该用户对此应用程序实例的访问权。
以下示例显示如何在 MBean 描述符中描述 EJBModule 类型的 MBean 的细密度管理安全性。<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE MBean SYSTEM "MbeanDescriptor.dtd"> <MBean type="EJBModule" j2eeType="EJBModule" version="5.0" platform="dynamicproxy" resourceIdentifierKey="Application" resourceType="Application" deployerMBean="true" description="Management interface for the EJBModule component.">
- 如果可以在调用 MBean 之前确定 MBean 访问的资源,但不能使用 MBean 对象名来确定
MBean 访问的资源实例,那么使用传递至 MBean 的实例的参数。
使用表示资源实例的参数值来标识 MBean 方法参数名。在 MBean 描述符中将相应参数元数据标记为资源标识。要将参数标记为资源标识,请添加 resourceType 属性。该属性指定参数值包含的资源类型。存在用于任何 MBean 方法参数的 resourceType 属性时,参数值将确定 MBean 方法表示的资源实例。
例如,ApplicationManager MBean 的一个实例在每个服务器中运行。可使用相同 MBean 在服务器中启动和停止所有应用程序。此 MBean 的每个启动和停止方法将应用程序名用作参数。它们使用该参数来确定此 MBean 方法尝试访问的应用程序的实例。
以下示例显示如何在 MBean 描述符中描述此类型的 MBean 的细密度管理安全性。<operation description="Start Application" impact="ACTION" name="startApplication" role="operation" targetObjectType="objectReference" type="void" proxyInvokeType="spray"> <signature> <parameter description="Application Name" resourceType="Application" name="applicationName" type="java.lang.String"/> </signature> </operation>
- 如果在调用 MBean 之前不能确定 MBean 访问的资源,那么通过使用应用程序编程接口 (API) 来检查调用 MBean 的用户是否有权访问资源实例。
通过使用 excludeAccessCheck 属性,在 MBean 描述符中将 MBean 或 MBean 方法标记为不进行访问权检查。将 MBean 标记为不进行访问权检查时,它的所有方法也不会进行访问权检查。
例如,在 Deployment Manager 中运行的 ConfigService MBean 将用于配置单元中的所有资源。在调用 MBean 方法之前,将此 MBean 标记为不进行访问权检查。在 ConfigService MBean 尝试访问配置资源时检查该 MBean 是否有权访问该资源。
以下示例显示如何在 MBean 描述符中描述 ConfigServices 类型的 MBean 的细密度管理安全性。
为了便于打印,某些语句被拆分为几行。<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE MBean SYSTEM "MbeanDescriptor.dtd"> <MBean version="5.0" platform="proxy" collaboratorClass="com.ibm.ws390.management.proxy.ConfigServiceManager" description="Config Service component provides service of configuration related tasks on top of configuration repository service." type="ConfigService" excludeAccessCheck="true" configureMBean="true">
以下示例显示如何调用 MBean 方法逻辑以通过编程方式执行授权检查:// Get administration authorizer. AdminAuthorizer aa = AdminAuthorizerFactory.getAdminAuthorizer(); // Set the role that is required for this operation. String role = com.ibm.ws.security.util.Constants.CONFIG_ROLE; // Set the resource name. // cells/cellName is optional. String resource = "/nodes/"+ nodeName + /servers/" + serverName; // Check access if ( aa != null && !aa.checkAccess(resource, role) ) // Disallow access. else // Allow access.
- 对 MBean 和 MBean 方法指定必需的角色。
按照有关缺省 MBean 安全策略的主题中所述,将根据 MBean 的类型和 MBean 方法的影响来自动指定必需的角色。
- 标识 MBean 表示的资源实例。
- 指定委派方式。
在某些情况下,在执行初始访问权检查之后,MBean 方法可能需要在不同用户标识下运行以便可以访问其他资源实例。例如,CellSync MBean 中的 syncNode 操作将要同步的节点实例的操作员角色授予用户。syncNode 操作尝试访问单元范围内的资源。用户可能无法访问单元目录中的打开文件。在初始访问权检查之后,MBean 必须作为系统运行,以便该操作可以顺利完成,不会产生任何拒绝访问问题。
将 runAs 属性设置为 System 以指定 MBean 或 MBean 方法的委派方式。在设置 MBean 的 runAs 属性时,该值适用于该 MBean 的所有 MBean 方法。
以下示例显示如何在 MBean 描述符中描述 CellSync 类型的 MBean 的细密度管理安全性。<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE MBean SYSTEM "MbeanDescriptor.dtd"> <MBean type="CellSync" version="5.0.1" platform="common" runAs="System" description="Management interface for the configuration synchronization logic performed at the central deployment manager for the cell."> <operation description="Initiate a synchronization request for a given node" impact="ACTION" name="syncNode" role="operation" targetObjectType="objectReference" type="ja va.lang.Boolean"> <signature> <parameter resourceType="Node" description="The name of the node" name="nodeName" type="java.lang.String"/> </signature> </operation>
结果


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjmx_admin_finegr_mbsec
文件名:tjmx_admin_finegr_mbsec.html