Nach der Authentifizierung eines Clients (wie im vorherigen Schritt)
können Sie über die Berechtigungsmechanismen von eXtreme Scale
Sicherheitsberechtigungen erteilen.
Informationen zu diesem Vorgang
Im vorherigen Schritt dieses Lernprogramms wurde veranschaulicht, wie die Authentifizierung in einem
eXtreme-Scale-Grid aktiviert wird. Aufgrund der Aktivierung kann kein nicht authentifizierter
Client eine Verbindung zu Ihrem Server mehr herstellen und Anforderungen an Ihr System übergeben.
Jeder authentifizierte Client hat jedoch dieselben Berechtigungen oder Privilegien beim Server, z. B.
Lesen, Schreiben oder Löschen von Daten, die in ObjectGrid-Maps gespeichert sind.
Clients können auch jeden Typ von Abfrage absetzen.
In diesem Abschnitt wird gezeigt, wie Sie über eXtreme-Scale-Berechtigungen
verschiedenen authentifizierten Benutzern unterschiedliche Privilegien erteilen.
Ähnlich wie viele andere Systeme verwendet
eXtreme Scale einen rechtebasierten Berechtigungsmechanismus.
WebSphere eXtreme Scale hat verschiedene Berechtigungskategorien, die von verschiedenen Berechtigungsklassen
dargestellt werden.
Hier wird die Berechtigungsklasse "MapPermission" verwendet.
Informationen zur vollständigen Berechtigungskategorie finden Sie unter
Programmierung der Clientberechtigung.
In
WebSphere eXtreme Scale stellt die Klasse "com.ibm.websphere.objectgrid.security.MapPermission"
Berechtigungen für die eXtreme-Scale-Ressourcen dar, insbesondere die Methoden
der Schnittstellen "ObjectMap" und "JavaMap".
WebSphere eXtreme Scale definiert
die folgenden Berechtigungszeichenfolgen für den Zugriff auf die Methoden der Schnittstellen
"ObjectMap" und "JavaMap":
- read: Erteilt die Berechtigung zum Lesen der Daten aus der Map.
- write: Erteilt die Berechtigung zum Aktualisieren der Daten in der Map.
- insert: Erteilt die Berechtigung zum Einfügen der Daten in die Map.
- remove: Erteilt die Berechtigung zum Entfernen der Daten aus der Map.
- invalidate: Erteilt die Berechtigung zum Ungültigmachen der Daten in der Map.
- all: Erteilt alle zuvor beschriebenen Berechtigungen: read, write, insert, remote und invalidate.
Die
Berechtigung findet statt, wenn ein Client eine Methode von ObjectMap oder JavaMap aufruft.
Der Laufzeitumgebung von eXtreme Scale prüft verschiedene
Map-Berechtigungen für verschiedene Methoden.
Wenn dem Client die erforderlichen Berechtigungen nicht erteilt wurden, wird eine Ausnahme des Typs "AccessControlException" ausgegeben.
Dieses Lernprogramm veranschaulicht, wie über JAAS-Berechtigung verschiedenen Benutzern Berechtigungen für Map-Zugriffe erteilt werden.
- Aktivieren Sie die eXtreme-Scale-Berechtigung. Zum Aktivieren der Berechtigung im ObjectGrid müssen Sie das Attribut
"securityEnabled" für das gewünschte ObjectGrid in der XML-Datei auf
true setzen.
Die Sicherheit im ObjectGrid zu aktivieren, bedeutet, dass Sie die Berechtigung aktivieren.
Verwenden Sie die folgenden Befehle, um eine neue ObjectGrid-XML-Datei mit aktivierter Sicherheit zu erstellen.
- Navigieren Sie zum Verzeichnis xml.
cd objectgridRoot/xml
- Kopieren Sie die Datei SimpleApp.xml in die Datei
SecureSimpleApp.xml.
cp SimpleApp.xml SecureSimpleApp.xml
- Öffnen Sie die Datei SecureSimpleApp.xml, und fügen Sie, wie in der folgenden XML gezeigt,
securityEnabled="true" auf ObjectGrid-Ebene hinzu.
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
xmlns="http://ibm.com/ws/objectgrid/config">
<objectGrids>
<objectGrid name="accounting" securityEnabled="true">
<backingMap name="customer" readOnly="false" copyKey="true"/>
</objectGrid>
</objectGrids>
</objectGridConfig>
- Definieren Sie die Berechtigungsrichtlinie.
Im vorherigen Schritt haben Sie zur Vorbereitung
der Clientauthentifizierung drei Benutzer im Keystore erstellt: cashier, manager und administrator.
In diesem Beispiel wird gezeigt, dass der Benutzer "cashier" nur Leseberechtigungen für alle Maps und der
Benutzer "manager" alle Berechtigungen besitzt. In diesem Beispiel wird die JAAS-Berechtigung verwendet. Die JAAS-Berechtigung verwendet
eine Berechtigungsrichtliniendatei, um Principals Berechtigungen zu erteilen.
Die folgende Datei og_auth.policy wird im Verzeichnis "security" definiert: og_auth.policy
grant codebase "http://www.ibm.com/com/ibm/ws/objectgrid/security/PrivilegedAction"
principal javax.security.auth.x500.X500Principal "CN=cashier,O=acme,OU=OGSample" {
permission com.ibm.websphere.objectgrid.security.MapPermission "accounting.*", "read ";
};
grant codebase "http://www.ibm.com/com/ibm/ws/objectgrid/security/PrivilegedAction"
principal javax.security.auth.x500.X500Principal "CN=manager,O=acme,OU=OGSample" {
permission com.ibm.websphere.objectgrid.security.MapPermission "accounting.*", "all";
};
Anmerkung:
- codebase "http://www.ibm.com/com/ibm/ws/objectgrid/security/PrivilegedAction" ist ein speziell
reservierter URL für ObjectGrid. Alle ObjectGrid-Berechtigungen, die
Principals erteilt werden, müssen diese spezielle Codebasis verwenden.
- Die erste grant-Anweisung erteilt dem Principal "CN=cashier,O=acme,OU=OGSample"
die Map-Berechtigung "read", so dass der Benutzer "cashier" ausschließlich Leseberechtigung für
alle Maps im ObjectGrid "accounting" hat.
- Die zweite grant-Anweisung erteilt dem Principal "CN=manager,O=acme,OU=OGSample"
die Map-Berechtigung "all", so dass der Benutzer "manager" alle Berechtigungen für die Maps im ObjectGrid "accounting" hat.
Jetzt können Sie einen Server mit einer Berechtigungsrichtlinie starten.
Die JAAS-Berechtigungsrichtliniendatei kann mit der Standardeigenschaft
-D definiert werden: -Djava.security.auth.policy=../security/og_auth.policy
- Führen Sie die Anwendung aus.
Nachdem Sie die zuvor beschriebenen Dateien erstellt haben, können Sie die Anwendung ausführen.
Verwenden Sie die folgenden Befehle, um den Katalogserver zu starten.
Weitere Informationen zum Starten des Katalogservice finden Sie unter
Eigenständigen Katalogservice starten.
Beachten Sie die folgenden Unterschiede zum vorherigen Startbefehl für den Katalogserver:
- Verwenden Sie die Datei SecureSimpleApp.xml anstelle der Datei
SimpleApp.xml.
- Es wird eine weitere Eigenschaft -Djava.security.auth.policy hinzugefügt, um die JAAS-Berechtigungsrichtliniendatei
für den Container-Serverprozess zu definieren.
Verwenden Sie denselben Befehl wie im vorherigen Schritt des Lernprogramms.
- Navigieren Sie zum Verzeichnis "bin".
- java -classpath ../lib/objectgrid.jar;../applib/sec_sample.jar
com.ibm.websphere.objectgrid.security.sample.guide.SecureSimpleApp
../security/client.properties manager manager1
Da der Benutzer
"manager" alle Berechtigungen für die Maps im ObjectGrid "accounting" hat, wird die
Anwendung ordnungsgemäß ausgeführt.
Jetzt verwenden Sie an Stelle des Benutzers "manager" den Benutzer
"cashier", um die Clientanwendung zu starten.
- Navigieren Sie zum Verzeichnis "bin".
- java -classpath ../lib/objectgrid.jar;../applib/sec_sample.jar
com.ibm.ws.objectgrid.security.sample.guide.SecureSimpleApp ../security/client.properties
cashier cashier1
Die folgende Ausnahme wird ausgegeben:
Exception in thread "P=387313:O=0:CT" com.ibm.websphere.objectgrid.TransactionException:
rolling back transaction, see caused by exception
at com.ibm.ws.objectgrid.SessionImpl.rollbackPMapChanges(SessionImpl.java:1422)
at com.ibm.ws.objectgrid.SessionImpl.commit(SessionImpl.java:1149)
at com.ibm.ws.objectgrid.SessionImpl.mapPostInvoke(SessionImpl.java:2260)
at com.ibm.ws.objectgrid.ObjectMapImpl.update(ObjectMapImpl.java:1062)
at com.ibm.ws.objectgrid.security.sample.guide.SimpleApp.run(SimpleApp.java:42)
at com.ibm.ws.objectgrid.security.sample.guide.SecureSimpleApp.main(SecureSimpleApp.java:27)
Caused by: com.ibm.websphere.objectgrid.ClientServerTransactionCallbackException:
Client Services - received exception from remote server:
com.ibm.websphere.objectgrid.TransactionException: transaction rolled back,
see caused by Throwable
at com.ibm.ws.objectgrid.client.RemoteTransactionCallbackImpl.processReadWriteResponse(
RemoteTransactionCallbackImpl.java:1399)
at com.ibm.ws.objectgrid.client.RemoteTransactionCallbackImpl.processReadWriteRequestAndResponse(
RemoteTransactionCallbackImpl.java:2333)
at com.ibm.ws.objectgrid.client.RemoteTransactionCallbackImpl.commit(RemoteTransactionCallbackImpl.java:557)
at com.ibm.ws.objectgrid.SessionImpl.commit(SessionImpl.java:1079)
... 4 more
Caused by: com.ibm.websphere.objectgrid.TransactionException: transaction rolled back, see caused by Throwable
at com.ibm.ws.objectgrid.ServerCoreEventProcessor.processLogSequence(ServerCoreEventProcessor.java:1133)
at com.ibm.ws.objectgrid.ServerCoreEventProcessor.processReadWriteTransactionRequest
(ServerCoreEventProcessor.java:910)
at com.ibm.ws.objectgrid.ServerCoreEventProcessor.processClientServerRequest(ServerCoreEventProcessor.java:1285)
at com.ibm.ws.objectgrid.ShardImpl.processMessage(ShardImpl.java:515)
at com.ibm.ws.objectgrid.partition.IDLShardPOA._invoke(IDLShardPOA.java:154)
at com.ibm.CORBA.poa.POAServerDelegate.dispatchToServant(POAServerDelegate.java:396)
at com.ibm.CORBA.poa.POAServerDelegate.internalDispatch(POAServerDelegate.java:331)
at com.ibm.CORBA.poa.POAServerDelegate.dispatch(POAServerDelegate.java:253)
at com.ibm.rmi.iiop.ORB.process(ORB.java:503)
at com.ibm.CORBA.iiop.ORB.process(ORB.java:1553)
at com.ibm.rmi.iiop.Connection.respondTo(Connection.java:2680)
at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2554)
at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:62)
at com.ibm.rmi.iiop.WorkerThread.run(ThreadPoolImpl.java:202)
at java.lang.Thread.run(Thread.java:803)
Caused by: java.security.AccessControlException: Access denied (
com.ibm.websphere.objectgrid.security.MapPermission accounting.customer write)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:155)
at com.ibm.ws.objectgrid.security.MapPermissionCheckAction.run(MapPermissionCheckAction.java:141)
at java.security.AccessController.doPrivileged(AccessController.java:275)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:727)
at com.ibm.ws.objectgrid.security.MapAuthorizer$1.run(MapAuthorizer.java:76)
at java.security.AccessController.doPrivileged(AccessController.java:242)
at com.ibm.ws.objectgrid.security.MapAuthorizer.check(MapAuthorizer.java:66)
at com.ibm.ws.objectgrid.security.SecuredObjectMapImpl.checkMapAuthorization(SecuredObjectMapImpl.java:429)
at com.ibm.ws.objectgrid.security.SecuredObjectMapImpl.update(SecuredObjectMapImpl.java:490)
at com.ibm.ws.objectgrid.SessionImpl.processLogSequence(SessionImpl.java:1913)
at com.ibm.ws.objectgrid.SessionImpl.processLogSequence(SessionImpl.java:1805)
at com.ibm.ws.objectgrid.ServerCoreEventProcessor.processLogSequence(ServerCoreEventProcessor.java:1011)
... 14 more
Diese Ausnahme tritt ein, weil der Benutzer "cashier" keine Schreibberechtigung hat und deshalb die Map "Customer" nicht
aktualisieren kann.
Jetzt unterstützt Ihr System Berechtigung.
Sie können Berechtigungsrichtlinien definieren, um unterschiedlichen Benutzern unterschiedliche Berechtigungen zu erteilen.
Weitere Informationen zur Berechtigung finden Sie unter Anwendungsclientberechtigung.
Nächste Schritte
Führen Sie den nächsten Schritt des Lernprogramms aus
(siehe
Lernprogramm zur Java-SE-Sicherheit - Schritt 6).