Oracle® Fusion Middleware Oracle Platform Security Servicesによるアプリケーションの保護 12c (12.2.1) E72537-01 |
|
前 |
次 |
この付録では、WebLogic Scripting Tool (WLST)コマンドおよびOPSS MBean APIを使用して実行する管理タスクについて説明します。
次の項目について説明します。
アプリケーションでユーザーおよびロールAPIを使用しており、デフォルトのcn
属性とは異なるプロバイダのユーザー属性にアクセスする必要がある場合は、必要なユーザー属性を使用するように認証プロバイダを構成し、プロバイダを適切に初期化する必要があります。
次の手順に従って、プロバイダの初期化を変更するスクリプトを作成し、ユーザーおよびロールAPIで指定のユーザー属性を使用して、構成されたプロバイダのデータにアクセスできるようにします。
次の内容のスクリプト・ファイルを作成します。
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)
userName
、userPass
、localHost
およびportNumber
を、目的のドメイン内の管理サーバーに接続するのに適した値で置換します。connect
を使用するには、スクリプトがコールされたときに接続先のサーバーが稼働している必要があります。このスクリプトを/tmp/updateServiceInstanceProperty.py
として保存するとします。
$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
ドメイン構成ファイルが変更されます。プロパティの名前と一致するキーを渡すと、そのプロパティは渡された値で更新されます。
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>
OPSSには、Fusion Middleware Controlおよびスクリプトによってサービスの管理、構成および監視に使用される、一連のJMXに準拠したJava EE Beanが用意されています。MBeanは、Java EEアプリケーションでのみ使用することをお薦めします。
次の各項では、OPSS MBeanの使用方法について説明します。
表E-1に、OPSSでサポートされるMBeanとその基本機能、およびタスクを実行するために(カスタム・スクリプトまたはJava SEプログラムで)使用するオブジェクト名を示します。
表E-1 OPSS MBeansのリスト
MBean | 機能 | MBeanServerオブジェクト名 |
---|---|---|
|
更新または書込み操作では、サーバーを再起動して変更を有効にする必要があります。 |
|
|
資格証明データを管理します。 更新または書込み操作の場合は、変更を有効にするためにサーバーを再起動する必要はありません。変更はすべて即座に反映されます。アクセスは、セキュリティ管理者のみに制限されます。 |
|
|
デフォルトのコンテキストで構成されたセキュリティ・ストアで、グローバル・ポリシーを管理します。 更新または書込み操作の場合は、変更を有効にするためにサーバーを再起動する必要はありません。変更はすべて即座に反映されます。 |
|
|
デフォルトのコンテキストで構成されたセキュリティ・ストアで、アプリケーション・ポリシーを管理します。 更新または書込み操作の場合は、変更を有効にするためにサーバーを再起動する必要はありません。変更はすべて即座に反映されます。 |
|
|
現在のJMXコンテキストにログインしたユーザーが特定のロールに属しているかどうかを検証します。これによって構成の変更が容易になることはありません。 |
|
OPSS MBeanをコールするには、スクリプトを作成してWLSTを使用して実行するか、Javaプログラムを作成するか、Fusion Middleware ControlのMBeanブラウザを使用します。
Fusion Middleware Controlを使用してOPSS MBeanをコールするには、次の手順を実行します。
適切なドメインで、「AdminServer」→「システムMBeanブラウザ」の順に選択します。「システムMBeanブラウザ」ページが表示されます。
このページで、「アプリケーション定義のMBean」→「com.oracle.jps」→「ドメイン」の順にノードを開きます。
MBeanを選択し、右側のペインの「属性」、「操作」および「通知」の各タブを使用し、MBean属性値およびメソッドを調べます。
たとえば、指定されたマップおよびキーを持つ資格証明を取得するには、スクリプトを使用してMBean操作JpsCredentialMXBean.getPortableCredential(map, key)
をコールします。
次の例は、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(); } } }
ここでの説明はOPPS MBeansにのみ限定されるものではなく、Oracle Fusion Middleware MBeans全般に当てはまります。
論理ロールとは、Java EEアプリケーションで宣言またはプログラムによって指定するロールです。アプリケーション・デプロイメント・ディスクリプタで定義し、アプリケーション・コード内で使用します。論理ロールは、エンタープライズ・グループまたはユーザーにマップできますが、アプリケーション・ロールにはマップできません。
MBeansへのセキュリティ・アクセスは、セキュリティ許可ではなく、論理ロールに基づいています。MBeanには、JMX Frameworkによって実行時に施行されるロールベースの制約を受けた注釈が付けられます。
次の各項では、注釈の使用方法と特定のアクセス制限を示し、エンタープライズ・グループへの論理ロールのマッピングについて説明します。
次の例は、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-2は、エンタープライズ・グループへの論理ロールのマッピングを示しています。
表E-2 WebLogicグループへの論理ロールのマッピング
論理ロール | デフォルトのパーミッション | WebLogicグループ |
---|---|---|
|
すべてのMBeansへの読取り/書込み権限 |
|
|
構成MBeansへの読取り/書込み権限 |
|
|
構成MBeanへの読取り権限。実行時MBeanへの読取り/書込み権限 |
|
|
すべてのMBeansへの読取り権限 |
|
|
すべてのアプリケーションMBeansへの読取り/書込み権限 |
|
|
すべてのアプリケーションMBeansへの読取り/書込み権限 |
|
|
アプリケーション構成MBeanへの読取り権限。アプリケーション実行時MBeanへの読取り/書込み権限 |
|
|
すべてのアプリケーション実行時MBeansおよび構成MBeansへの読取り権限 |
|
関連項目: 『Oracle WebLogic Serverロールおよびポリシーによるリソースの保護』の「ユーザー、グループ、セキュリティ・ロール」 |
デフォルトでは、すべての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 |