詳細な管理セキュリティーを実装するには、コード内で管理対象 Bean (MBean) が表すリソース・インスタンスを識別し、目的のリソース・インスタンスの必須ロールをユーザーに割り当てる必要があります。
このトピックでは、リソースを識別し、必須ロールを割り当てるための作業について説明します。
また、別のユーザー ID で MBean メソッドを実行して、MBean メソッドから別のリソース・インスタンスにアクセスする方法についても説明します。
最後に、プログラマチック・インターフェースを使用して、MBean メソッドがリソース・インスタンスにアクセスしたかどうかをチェックする方法を示します。
このタスクについて
以下のタスクを実行して、MBean または MBean メソッドが保護されているかどうかを確認します。
MBean または MBean メソッドが表しているリソース・インスタンスを識別し、MBean にアクセスするために必要なロールを割り当てます。このタスクは MBean の開発中に実行します。
プロシージャー
- MBean が表すリソース・インスタンスおよび必須ロールを判別して、MBean メソッドを起動します。
すべての MBean メソッドにデフォルトの MBean セキュリティー・ポリシーがあります。MBean メソッドでデフォルト・セキュリティー・ポリシーを使用する場合、MBean が表すリソース・インスタンスは MBean を実行中のサーバーであると想定されます。MBean または MBean メソッドが、MBean を実行しているサーバー以外のリソース・インスタンスを表している場合は、以下のステップを実行します。
- MBean が表すリソース・インスタンスを識別します。
- Server MBean などの MBean が、MBean を実行しているサーバーにアクセスして変更する場合は、ユーザーが起動した MBean にこのサーバーへのアクセス権が付与されていることを確認するセキュリティー・ポリシーを指定しないでください。デフォルト・セキュリティー・ポリシーが強制的に適用されます。
通常は、MBean を使用してサーバーにアクセスし、変更します。
- サーバー内部で実行している MBean が、そのサーバーに直接属さないリソースにアクセスし、変更することができる場合は、MBean を起動しているユーザーにそのリソース・インスタンスへのアクセス権が付与されているかどうかをチェックしてから、MBean メソッドを実行します。
通常は、目的のリソース・インスタンスを表す MBean のオブジェクト名内のキー値ペアを識別して、リソース・インスタンスを識別します。
キーは resourceIndentifierKey 属性によって定義されます。
例えば、EJBModule MBean を使用して、サーバー内部で実行しているアプリケーション内の Enterprise JavaBeans
(EJB) モジュールにアクセスすることができます。この場合、EJBModule MBean のオブジェクト名にキー値ペアが含まれています。
このキーは Application です。この値は 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 記述子内の対応するパラメーター・メタデータをリソース ID としてマークします。
パラメーターをリソース ID としてマークするには、resourceType 属性を追加します。この属性はパラメーター値に含まれるリソース・タイプを指定します。
MBean メソッド・パラメーター用の resourceType 属性がある場合は、このパラメーター値によって MBean メソッドが表すリソース・インスタンスが判別されます。
例えば、サーバーごとに ApplicationManager MBean のインスタンスが 1 つずつ実行されます。同じ 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 がアクセス・チェックから除外するようにマークすると、そのすべてのメソッドもアクセス・チェックから除外されます。
例えば、デプロイメント・マネージャーで実行している ConfigService MBean を使用して、セル内のすべてのリソースを構成します。
この MBean をアクセス・チェックから除外してから、MBean メソッドを起動します。MBean からリソースにアクセスする場合は、ConfigService 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 メソッドを別のユーザー ID で実行して、MBean メソッドから別のリソース・インスタンスにアクセスできるようにする必要があります。
例えば、CellSync MBean 内の syncNode 処理は、ユーザーに同期中のノードのインスタンスへのオペレーター・ロールを付与します。
syncNode 処理はセルの有効範囲のリソースへのアクセスを試行します。
ユーザーはセル・ディレクトリーのファイルにアクセスして開くことができない場合があります。
アクセス拒否問題が発生することなくこの処理を完了するには、初期アクセス・チェック後に MBean を System として実行する必要があります。
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>
結果
これで、指定された MBean メソッドがアクセスしているリソース・タイプが判別され、必須のアクセス・チェックが実行されて、WebSphere Application Server からりソースにアクセスできるようになります。