プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Platform Security Servicesによるアプリケーションの保護
12c (12.2.1)
E72537-01
  目次へ移動
目次

前
 
次
 

E スクリプトおよびMBeanを使用した管理

この付録では、WebLogic Scripting Tool (WLST)コマンドおよびOPSS MBean APIを使用して実行する管理タスクについて説明します。

次の項目について説明します。

E.1 スクリプトを使用したサービスの構成

アプリケーションでユーザーおよびロールAPIを使用しており、デフォルトのcn属性とは異なるプロバイダのユーザー属性にアクセスする必要がある場合は、必要なユーザー属性を使用するように認証プロバイダを構成し、プロバイダを適切に初期化する必要があります。

次の手順に従って、プロバイダの初期化を変更するスクリプトを作成し、ユーザーおよびロールAPIで指定のユーザー属性を使用して、構成されたプロバイダのデータにアクセスできるようにします。

  1. 次の内容のスクリプト・ファイルを作成します。

    import sys
    connect('userName', 'userPassword', 'url', 'adminServerName')
    domainRuntime()
    
    val = None
    key = None
    si = None
    for  i in range(len(sys.argv)):
        if sys.argv[i] == "-si":
            si = sys.argv[i+1]
        if sys.argv[i] == "-key":
            key  = sys.argv[i+1]
        if sys.argv[i] == "-value":
            val = sys.argv[i+1]
     
    on = ObjectName("com.oracle.jps:type=JpsConfig")
    sign = ["java.lang.String","java.lang.String","java.lang.String"]
    params = [si,key,val]
    mbs.invoke(on, "updateServiceInstanceProperty", params, sign)
    mbs.invoke(on, "persist", None, None)
    
  2. userNameuserPasslocalHostおよびportNumberを、目的のドメイン内の管理サーバーに接続するのに適した値で置換します。connectを使用するには、スクリプトがコールされたときに接続先のサーバーが稼働している必要があります。このスクリプトを/tmp/updateServiceInstanceProperty.pyとして保存するとします。

  3. $ORACLE_HOME/common/binディレクトリに変更してwlst.shを実行します。

    >cd $ORACLE_HOME/common/bin
    >wlst.sh /tmp/updateServiceInstanceProperty.py -si servInstName -key propKey -value propValue
    

    説明:

    • servInstNameは、変更対象のプロパティがあるサービス・インスタンス・プロバイダの名前です。

    • propKeyは、挿入または変更するプロパティの名前を識別します。

    • propValueは、追加または更新する値の名前です。

    コマンドでは、渡されたインスタンス・プロバイダに対してプロパティを追加または更新することによって、$DOMAIN_HOME/config/fmwconfig/jps-config.xmlドメイン構成ファイルが変更されます。プロパティの名前と一致するキーを渡すと、そのプロパティは渡された値で更新されます。

  4. Oracle WebLogic Serverを再起動します。

使用例

ドメインでidstore.ldap認証プロバイダを使用していることを前提とします。次のコマンドを実行します。

wlst.sh /tmp/updateServiceInstanceProperty.py -si idstore.ldap -key "myPropName" -value "myValue"

このインスタンス・プロバイダの指定のプロパティが追加(または更新)されます。

<serviceInstance provider="idstore.ldap.provider" name="idstore.ldap">
   ...
   <property name="myPropName" value="myValue"/>
   ...
</serviceInstance>

E.2 MBeanを使用したサービスの構成

OPSSには、Fusion Middleware Controlおよびスクリプトによってサービスの管理、構成および監視に使用される、一連のJMXに準拠したJava EE Beanが用意されています。MBeanは、Java EEアプリケーションでのみ使用することをお薦めします。

次の各項では、OPSS MBeanの使用方法について説明します。

E.2.1 サポートされるOPSS MBean

表E-1に、OPSSでサポートされるMBeanとその基本機能、およびタスクを実行するために(カスタム・スクリプトまたはJava SEプログラムで)使用するオブジェクト名を示します。

表E-1 OPSS MBeansのリスト

MBean 機能 MBeanServerオブジェクト名

Jps構成

jps-config.xmlのドメイン構成を管理します。このMBeanは、構成データを変更するための唯一の方法として機能します。

更新または書込み操作では、サーバーを再起動して変更を有効にする必要があります。

com.oracle.jps:type=JpsConfig

資格証明ストア

資格証明データを管理します。

更新または書込み操作の場合は、変更を有効にするためにサーバーを再起動する必要はありません。変更はすべて即座に反映されます。アクセスは、セキュリティ管理者のみに制限されます。

com.oracle.jps:type=JpsCredentialStore

グローバル・ポリシー・ストア

デフォルトのコンテキストで構成されたセキュリティ・ストアで、グローバル・ポリシーを管理します。

更新または書込み操作の場合は、変更を有効にするためにサーバーを再起動する必要はありません。変更はすべて即座に反映されます。

com.oracle.jps:type=JpsGlobalPolicyStore

アプリケーション・ポリシー・ストア

デフォルトのコンテキストで構成されたセキュリティ・ストアで、アプリケーション・ポリシーを管理します。

更新または書込み操作の場合は、変更を有効にするためにサーバーを再起動する必要はありません。変更はすべて即座に反映されます。

com.oracle.jps:type=JpsApplicationPolicyStore

管理ポリシー・ストア

現在のJMXコンテキストにログインしたユーザーが特定のロールに属しているかどうかを検証します。これによって構成の変更が容易になることはありません。

com.oracle.jps:type=JpsAdminPolicyStore


E.2.2 OPSS MBeanの使用

OPSS MBeanをコールするには、スクリプトを作成してWLSTを使用して実行するか、Javaプログラムを作成するか、Fusion Middleware ControlのMBeanブラウザを使用します。

Fusion Middleware Controlを使用してOPSS MBeanをコールするには、次の手順を実行します。

  1. 適切なドメインで、「AdminServer」「システムMBeanブラウザ」の順に選択します。「システムMBeanブラウザ」ページが表示されます。

  2. このページで、「アプリケーション定義のMBean」「com.oracle.jps」「ドメイン」の順にノードを開きます。

  3. MBeanを選択し、右側のペインの「属性」「操作」および「通知」の各タブを使用し、MBean属性値およびメソッドを調べます。

    たとえば、指定されたマップおよびキーを持つ資格証明を取得するには、スクリプトを使用してMBean操作JpsCredentialMXBean.getPortableCredential(map, key)をコールします。


関連項目:

第E.2.3項「OPSS MBeanを使用したプログラミング」

『WebLogic Scripting Toolの理解』の「MBeanのナビゲート」


E.2.3 OPSS MBeansを使用したプログラミング

次の例は、JpsConfiguration MBeanのコール方法を示しています。次の点に注意してください。

  • 次のJARファイルがクラスパスに入っていることを前提とします。

    • $ORACLE_HOME/oracle_common/modules/oracle.jps_12.2.1/jps-api.jar

    • $ORACLE_HOME/oracle_common/modules/oracle.jps_12.2.1/jps-mbeans.jar

    • $ORACLE_HOME/oracle_common/modules/oracle.jmx_12.2.1/jmxframework.jar

    • $ORACLE_HOME/oracle_common/modules/oracle.idm_12.2.1/identitystore.jar

    • $WEBLOGIC_HOME/server/lib/wljmxclient.jar

  • 接続は、initメソッドを使用して確立されています。

  • 更新操作の後では必ず、維持のためのコールを行います。

import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanServerConnection;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
import javax.management.openmbean.CompositeData;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.naming.Context;
 
import oracle.security.jps.mas.mgmt.jmx.credstore.PortableCredential;
import oracle.security.jps.mas.mgmt.jmx.credstore.PortablePasswordCredential;
import oracle.security.jps.mas.mgmt.jmx.policy.PortableApplicationRole;
import oracle.security.jps.mas.mgmt.jmx.policy.PortableCodeSource;
import oracle.security.jps.mas.mgmt.jmx.policy.PortableGrant;
import oracle.security.jps.mas.mgmt.jmx.policy.PortableGrantee;
import oracle.security.jps.mas.mgmt.jmx.policy.PortablePermission;
import oracle.security.jps.mas.mgmt.jmx.policy.PortablePrincipal;
import oracle.security.jps.mas.mgmt.jmx.policy.PortableRoleMember;
import oracle.security.jps.mas.mgmt.jmx.util.JpsJmxConstants;
 
public class InvokeJpsMbeans {
    private static JMXConnector connector;
    private static MBeanServerConnection wlsMBeanConn;
    private static ObjectName configName;
    private static ObjectName credName;
    private static ObjectName appPolName;
    private static ObjectName gloPolName;
    private static ObjectName adminPolName;

    private final static String STR_NAME =String.class.getName();

    public static void main(String args[]) {
        // Intialize connection and retrieve connection object
        init();

        //Check registration
        if (isRegistered(configName)) 
            System.out.println("Jps Config MBean is registered");
        if (isRegistered(credName))
            System.out.println("Jps Credential Mbean is registered");
        if (isRegistered(appPolName)) 
            System.out.println("Jps Application policy Mbean is registered");
        if (isRegistered(gloPolName))
            System.out.println("Jps Global policy Mbean is registered");
        if (isRegistered(adminPolName)) 
           System.out.println("Jps Admin Policy Mbean is registered");

        //invoke MBeans
        invokeConfigMBeanMethods();
        invokeCredentialMBeanMethods();
        invokeApplicationPolicyMBeanMethods();
        invokeGlobalPolicyMBeanMethods();
        invokeAdminPolicyMBeanMethhods();
    }
    
    private static void invokeConfigMBeanMethods() {
        String KEY = "myKey";
        String VALUE = "myValue";
        String strVal;
        try {
            strVal = (String) wlsMBeanConn.invoke(configName, "updateProperty",
                     new Object[] { KEY, VALUE }, 
                     new String[] { STR_NAME, STR_NAME });
            wlsMBeanConn.invoke(configName,"persist",null,null);

            strVal = (String) wlsMBeanConn.invoke(configName, "getProperty", 
                     new Object[] { KEY }, new String[] { STR_NAME });
            System.out.println("Updated the property: " + strVal.equals(strVal));

            strVal = (String) wlsMBeanConn.invoke(configName, "removeProperty",
                     new Object[] { KEY }, new String[] { STR_NAME });
            wlsMBeanConn.invoke(configName,"persist",null,null);
        } catch (InstanceNotFoundException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (MBeanException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (ReflectionException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // auto-generated catch block
            e.printStackTrace();
        }
    }
 
private static void  invokeCredentialMBeanMethods() {
        
        String USER = "jdoe";
        String PASSWORD = "welcome1";
        String ALIAS = "mapName";
 String KEY = "keyValue";
         
 PortableCredential cred = new PortablePasswordCredential(USER, PASSWORD.toCharArray());
       
  try {
       //seed a password credential
       wlsMBeanConn.invoke(credName, "setPortableCredential", new Object[] { ALIAS, KEY, cred.toCompositeData(null) }, new String[] { STR_NAME, STR_NAME, CompositeData.class.getName() });
        boolean bContainsMap = (Boolean) wlsMBeanConn.invoke(credName, "containsMap", new Object[] { ALIAS }, new String[] { STR_NAME });
        System.out.println("Credstore contains map: " + ALIAS + " - " +bContainsMap);
 
        boolean bContainsCred = (Boolean) wlsMBeanConn.invoke(credName, "containsCredential", new Object[] { ALIAS, KEY }, new String[] { STR_NAME, STR_NAME });
        System.out.println("Contains Credential; " + bContainsCred);
 
        CompositeData cd = (CompositeData) wlsMBeanConn.invoke(credName, "getPortableCredential", new Object[] { ALIAS, KEY }, new String[] { STR_NAME, STR_NAME });
        cred = PortableCredential.from(cd);
 
        PortablePasswordCredential pc = (PortablePasswordCredential) cred;
 
        System.out.println("User name should be " +  USER + " Retrieved - " + pc.getName());
        System.out.println("Password should be " + PASSWORD + "retrieved - " +  new String(pc.getPassword()));
            
        //delete entire map
        wlsMBeanConn.invoke(credName, "deleteCredentialMap", new Object[] {ALIAS}, new String[] {STR_NAME} );
            
        } catch (InstanceNotFoundException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (MBeanException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (ReflectionException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // auto-generated catch block
            e.printStackTrace();
        }
 
    }

private static void invokeApplicationPolicyMBeanMethods() {
        //add grants to approles
        
        //first create application policy
        String TESTGET_APP_ROLES_MEMBERS = "testgetAppRolesMembers";
        try {
            wlsMBeanConn.invoke(appPolName, "deleteApplicationPolicy", new Object[] { TESTGET_APP_ROLES_MEMBERS }, new String[] { STR_NAME });
        } catch (Exception e ) {
            System.out.println("IGNORE: App " + TESTGET_APP_ROLES_MEMBERS + " might not exist");
        }
        try {
            wlsMBeanConn.invoke(appPolName, "createApplicationPolicy", new Object[] { TESTGET_APP_ROLES_MEMBERS }, new String[] { STR_NAME });
            // add remove members to applicaiton roles
            // Create App Role here
            String APP_ROLE_NAME = "ravenclaw_house";
            wlsMBeanConn.invoke(appPolName, "createApplicationRole", new Object[] { TESTGET_APP_ROLES_MEMBERS, APP_ROLE_NAME, null, null, null }, new String[] { STR_NAME, STR_NAME, STR_NAME, STR_NAME, STR_NAME });
            
            CompositeData cd = (CompositeData) wlsMBeanConn.invoke(appPolName, "getApplicationRole", new Object[] { TESTGET_APP_ROLES_MEMBERS, APP_ROLE_NAME }, new String[] { STR_NAME, STR_NAME });
            PortableApplicationRole appRole = PortableApplicationRole.from(cd);
            
            //Add custom principal here
            PortableRoleMember prm_custom = new PortableRoleMember("My.Custom.Principal","CustomPrincipal",null,null,null);
 
            CompositeData[] arrCompData = { prm_custom.toCompositeData(null) };
            cd = (CompositeData) wlsMBeanConn.invoke(appPolName, "addMembersToApplicationRole", new Object[] { TESTGET_APP_ROLES_MEMBERS, appRole.toCompositeData(null), arrCompData }, new String[] { STR_NAME, CompositeData.class.getName(), CompositeData[].class.getName() });
            
            // Chk if member got added
            CompositeData[] arrCD = (CompositeData[]) wlsMBeanConn.invoke(appPolName, "getMembersForApplicationRole", new Object[] { TESTGET_APP_ROLES_MEMBERS, appRole.toCompositeData(null) }, new String[] { STR_NAME, CompositeData.class.getName() });
            PortableRoleMember[] actRM = getRMArrayFromCDArray(arrCD);
            PortableRoleMember[] expRM = { prm_custom};
            chkRoleMemberArrays(actRM, expRM);
 
            cd = (CompositeData) wlsMBeanConn.invoke(appPolName, "removeMembersFromApplicationRole", new Object[] { TESTGET_APP_ROLES_MEMBERS, appRole.toCompositeData(null), arrCompData }, new String[] { STR_NAME, CompositeData.class.getName(), CompositeData[].class.getName() });
 
            // Chk if member got removed
            arrCD = (CompositeData[]) wlsMBeanConn.invoke(appPolName, "getMembersForApplicationRole", new Object[] { TESTGET_APP_ROLES_MEMBERS, appRole.toCompositeData(null) }, new String[] { STR_NAME, CompositeData.class.getName() });
            System.out.println("length should be zero :" + arrCD.length);
 
            // Remove the App Role
            wlsMBeanConn.invoke(appPolName, "removeApplicationRole", new Object[] { TESTGET_APP_ROLES_MEMBERS, APP_ROLE_NAME }, new String[] { STR_NAME, STR_NAME });
            wlsMBeanConn.invoke(appPolName, "deleteApplicationPolicy", new Object[] { TESTGET_APP_ROLES_MEMBERS }, new String[] { STR_NAME });
 
        } catch (InstanceNotFoundException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (MBeanException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (ReflectionException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // auto-generated catch block
            e.printStackTrace();
        }
    }

    private static PortableRoleMember[] getRMArrayFromCDArray(CompositeData[] arrCD) {
        PortableRoleMember[] actRM = new PortableRoleMember[arrCD.length];
        int idx = 0;
        for (CompositeData cdRM : arrCD) {
            actRM[idx++] = PortableRoleMember.from(cdRM);
        }
        return actRM;
    }

    private static void chkRoleMemberArrays(PortableRoleMember[] arrExpectedRM, PortableRoleMember[] arrActRM) {
 
        List < PortableRoleMember > lstExpRM = new ArrayList < PortableRoleMember >(Arrays.asList(arrExpectedRM));
        List < PortableRoleMember > lstActRM = new ArrayList < PortableRoleMember >(Arrays.asList(arrActRM));
 
        for (PortableRoleMember actRM : lstActRM) {
            for (int idx = 0; idx < lstExpRM.size(); idx++) {
                PortableRoleMember expRM = (PortableRoleMember) lstExpRM.get(idx);
                if (expRM.equals(actRM)) {
                    lstExpRM.remove(idx);
                    break;
                }
            }
        }
        System.out.println("List should be empty - " + lstExpRM.size());
    }

    private static void  invokeAdminPolicyMBeanMethhods() {
        //Connection is established as weblogic user, who by OOTB gets all permissions
        Boolean bool;
        try {
            bool = (Boolean) wlsMBeanConn.invoke(adminPolName,"checkRole",new Object[]{"Admin"}, new String[]{STR_NAME});
            System.out.println("Werblogic has Admin role: " + bool);
            bool = (Boolean) wlsMBeanConn.invoke(adminPolName,"checkRole",new Object[] {"Configurator"}, new String[]{STR_NAME});
            System.out.println("Werblogic has Configurator role: " + bool);
            bool = (Boolean) wlsMBeanConn.invoke(adminPolName,"checkRole", new Object[]{new String[] {"Operator", "Admin", "Configurator"}},
                    new String[]{String[].class.getName()});
            System.out.println("Werblogic has Admin,Operator,Configurator role: " + bool);
        } catch (InstanceNotFoundException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (MBeanException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (ReflectionException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // auto-generated catch block
            e.printStackTrace();
        }
    }

    private static void invokeGlobalPolicyMBeanMethods() {
        // lets create a grant in system policy
        PortablePrincipal CUSTOM_JDOE = new PortablePrincipal("oracle.security.jps.internal.core.principals.CustomXmlUserImpl", "jdoe", PortablePrincipal.PrincipalType.CUSTOM);
        PortablePrincipal CUSTOM_APP_ADMINS = new PortablePrincipal("oracle.security.jps.internal.core.principals.CustomXmlEnterpriseRoleImpl", "oc4j-app-administrators", PortablePrincipal.PrincipalType.CUSTOM);
        PortablePrincipal[] arrPrincs = {CUSTOM_JDOE, CUSTOM_APP_ADMINS};
        //codesource URL        
        String URL = "http://www.oracle.com/as/jps-api.jar";
        PortableCodeSource pcs = new PortableCodeSource(URL);
        PortableGrantee pge = new PortableGrantee(arrPrincs, pcs);
        PortablePermission CSF_PERM = new PortablePermission("oracle.security.jps.service.credstore.CredentialAccessPermission", "context=SYSTEM,mapName=MY_MAP,keyName=MY_KEY", "read");
        PortablePermission[] arrPerms = {CSF_PERM};
        PortableGrant grnt = new PortableGrant(pge, arrPerms);
        CompositeData[] arrCompData = { grnt.toCompositeData(null) };
        try {
            System.out.println("Creating System Policy grant");
            wlsMBeanConn.invoke(gloPolName, "grantToSystemPolicy", new Object[] { arrCompData }, new String[] { CompositeData[].class.getName() });
            System.out.println("Deleting the created grant");
            wlsMBeanConn.invoke(gloPolName, "revokeFromSystemPolicy", new Object[] { arrCompData }, new String[] { CompositeData[].class.getName() });
            
        } catch (InstanceNotFoundException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (MBeanException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (ReflectionException e) {
            // auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // auto-generated catch block
            e.printStackTrace();
        }
    }

    private static boolean isRegistered(ObjectName name) {
        try {
            return wlsMBeanConn.isRegistered(name);
        } catch (IOException e) {
            // auto-generated catch block
            e.printStackTrace();
        }
        return false;
    }
 
    private static void init() {
        String protocol = "t3";
        String jndi_root = "/jndi/";
        String wlserver = "myWLServer";
        String host =  "myHost.com";
        int port =  7001;
        String adminUsername = "myAdminName";
        String adminPassword = "myAdminPassw";
        JMXServiceURL url;
        try {
            url = new JMXServiceURL(protocol,host,port,jndi_root+wlserver);
            HashMap<String, Object> env = new HashMap<String, Object>();
            env.put(Context.SECURITY_PRINCIPAL, adminUsername);
            env.put(Context.SECURITY_CREDENTIALS, adminPassword);
            env.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,
                    "weblogic.management.remote");
            connector = JMXConnectorFactory.connect(url, env);
            wlsMBeanConn = connector.getMBeanServerConnection();
                        //create object names
        // the next string is set to com.oracle.jps:type=JpsConfig
            configName = new
                 ObjectName(JpsJmxConstants.MBEAN_JPS_CONFIG_FUNCTIONAL);
// the next string is set to com.oracle.jps:type=JpsApplicationPolicyStore
            appPolName = new
                 ObjectName(JpsJmxConstants.MBEAN_JPS_APPLICATION_POLICY_STORE);
// the next string is set to com.oracle.jps:type=JpsGlobalPolicyStore
            gloPolName = new
                 ObjectName(JpsJmxConstants.MBEAN_JPS_GLOBAL_POLICY_STORE);
// the next string is set to com.oracle.jps:type=JpsAdminPolicyStore
            adminPolName = new
                 ObjectName(JpsJmxConstants.MBEAN_JPS_ADMIN_POLICY_STORE);
// the next string is set to com.oracle.jps:type=JpsCredentialStore
            credName = new ObjectName(JpsJmxConstants.MBEAN_JPS_CREDENTIAL_STORE);
        } catch (MalformedURLException e) {
            // take proper action
            e.printStackTrace();
        } catch (IOException e) {
            // take proper action
            e.printStackTrace();
        } catch (MalformedObjectNameException e) {
            // auto-generated catch block
            e.printStackTrace();
        }
    }
}

E.3 MBeanへのアクセスの制限

ここでの説明はOPPS MBeansにのみ限定されるものではなく、Oracle Fusion Middleware MBeans全般に当てはまります。

論理ロールとは、Java EEアプリケーションで宣言またはプログラムによって指定するロールです。アプリケーション・デプロイメント・ディスクリプタで定義し、アプリケーション・コード内で使用します。論理ロールは、エンタープライズ・グループまたはユーザーにマップできますが、アプリケーション・ロールにはマップできません。

MBeansへのセキュリティ・アクセスは、セキュリティ許可ではなく、論理ロールに基づいています。MBeanには、JMX Frameworkによって実行時に施行されるロールベースの制約を受けた注釈が付けられます。

次の各項では、注釈の使用方法と特定のアクセス制限を示し、エンタープライズ・グループへの論理ロールのマッピングについて説明します。

E.3.1 注釈の例

次の例は、MBeanインタフェースでのエンタープライズ・グループの注釈(太字テキストの部分)の使用方法を示しています。

@Description(resourceKey = "demo.ScreenCustomizerRuntimeMBean.description",
             resourceBundleBaseName = "demo.runtime.Messages")
@ImmutableInfo("true")
@Since("1.1")
public interface ScreenCustomizerRuntimeMXBean {
  @Description(resourceKey = "demo.ScreenCustomizerRuntimeMBean.Active",
               resourceBundleBaseName = "demo.runtime.Messages") 
  @AttrributeGetterRequiredGlobalSecurityRole(GlobalSecurityRole.Operator)
    public boolean isActive();
  @AttrributeSetterRequiredGlobalSecurityRole(GlobalSecurityRole.Admin)
    public void setActive(boolean val);
 
  @Description(resourceKey =
                     "demo.ScreenCustomizerRuntimeMBean.ActiveVirtualScreenId",
               resourceBundleBaseName = "demo.runtime.Messages") 
  @DefaultValue("0")
  @LegalValues( {"0", "2", "4", "6", "8" })
  @RequireRestart(ConfigUptakePolicy.ApplicationRestart) 
  @OperationRequiredGlobalSecurityRole(GlobalSecurityRole.Admin)
     public void setActiveVirtualScreenId(int id) throws IllegalArgumentException;
  …
}

説明:

  • @AtrributeGetterRequiredGlobalSecurityRoleは、ユーザーがgetメソッドのisActiveにアクセスするには、Operatorロールに属している必要があることを指定します。

  • @AtrributeSetterRequiredGlobalSecurityRoleは、ユーザーがsetActiveメソッドにアクセスするには、Adminロールに属している必要があることを指定します。

  • @OperationRequiredGlobalSecurityRoleは、ユーザーがsetActiveVirtualScreenIdメソッドMBeanにアクセスするには、Adminロールに属している必要があることを指定します。

この3つの注釈はすべて、インタフェース内の特定のアイテムにのみ適用されることに注意してください。

次の例は、範囲の異なる注釈(太字テキスト)の使用方法を示しています。

@Description(resourceKey = "demo.ScreenCustomizerRuntimeMBean.description",
             resourceBundleBaseName = "demo.runtime.Messages")
@ImmutableInfo("true")
@Since("1.1")
@MBeanRequiredGlobalSecurityRole(GlobalSecurityRole.Admin)
public interface ScreenCustomizerRuntimeMXBean { … }

@MbeanRequiredGlobalSecurityRoleは、ユーザーがMBeanの操作または属性にアクセスするには、Adminロールに属している必要があることを指定しているため、MBean全体が対象範囲になります。メソッドまたは属性の範囲を指定している注釈は、MBean全体に適用される注釈よりも優先されます。

GlobalSecurityRoleは、セキュリティ・チェックの実行前に、環境内で実際のロールにマップされるグローバルの論理ロール・セットを定義します。この列挙には、注釈付き操作または属性に対してすべてのユーザーが読取り/書込み権限を持っていることを示す値NONEが含まれています。

E.3.2 エンタープライズ・グループへの論理ロールのマッピング

表E-2は、エンタープライズ・グループへの論理ロールのマッピングを示しています。

表E-2 WebLogicグループへの論理ロールのマッピング

論理ロール デフォルトのパーミッション WebLogicグループ

Admin

すべてのMBeansへの読取り/書込み権限

Admin

Configurator

構成MBeansへの読取り/書込み権限

Admin

Operator

構成MBeanへの読取り権限。実行時MBeanへの読取り/書込み権限

Operator

Monitor

すべてのMBeansへの読取り権限

Monitor

ApplicationAdmin

すべてのアプリケーションMBeansへの読取り/書込み権限

Admin

ApplicationConfigurator

すべてのアプリケーションMBeansへの読取り/書込み権限

Admin

ApplicationOperator

アプリケーション構成MBeanへの読取り権限。アプリケーション実行時MBeanへの読取り/書込み権限

Operator

ApplicationMonitor

すべてのアプリケーション実行時MBeansおよび構成MBeansへの読取り権限

Monitor



関連項目:

『Oracle WebLogic Serverロールおよびポリシーによるリソースの保護』の「ユーザー、グループ、セキュリティ・ロール」


E.3.3 特定のアクセス制限

デフォルトでは、すべてのMBeanの書込み操作および更新操作には、ユーザーがAdminロールまたはConfiguratorロールのメンバーである必要があります。また、@Impact(value=1)タグで注釈を付けられた操作には、ユーザーがAdminロールのメンバーである必要があり、@Impact(value=0)タグで注釈を付けられた操作には、ユーザーがAdminロールまたはOperatorロールのメンバーである必要があります。

表E-3は、MBeanの属性および操作へのアクセスに必要なロールの説明をまとめたものです。

表E-3 操作別に必要なロール

影響値を持つ操作 MBeanのタイプ 必要なロール

INFOまたは属性ゲッター

システム構成MBean

Monitor、Operator、Configurator、Admin

INFOまたは属性ゲッター

アプリケーション構成MBean

Monitor、Operator、Configurator、Admin、ApplicationMonitor、ApplicationOperator、ApplicationConfigurator、ApplicationAdmin

ACTION、ACTION_INFO、UNKNOWNまたは属性セッター

システム構成MBean

Admin、Configurator

ACTION、ACTION_INFO、UNKNOWNまたは属性セッター

アプリケーション構成MBean

Admin、Configurator、ApplicationAdmin、ApplicationConfigurator

INFOまたは属性ゲッター

システム実行時MBean

Monitor、Operator、Configurator、Admin

INFOまたは属性ゲッター

アプリケーション実行時MBean

Monitor、Operator、Configurator、Admin、ApplicationMonitor、ApplicationOperator、ApplicationAdmin

ACTION、ACTION_INFO、UNKNOWNまたは属性セッター

システム実行時MBean

Admin、Operator

ACTION、ACTION_INFO、UNKNOWNまたは属性セッター

アプリケーション実行時MBean

Admin、Operator、ApplicationAdmin、ApplicationOperator