JMX-Sicherheit (Java Management Extensions)

Sie können MBean-Aufrufe (Managed Beans) in einer verteilten Umgebung sichern.

Weitere Informationen zu den verfügbaren MBeans finden Sie unter Verwaltung mit Managed Beans (MBeans).

In der verteilten Implementierungstopologie befinden sich MBeans direkt in den Katalogservern und Container-Servern. Im Allgemeinen folgt die JMX-Sicherheit in einer verteilten Topologie der JMX-Sicherheitsspezifikation, die in der Spezifikation "Java Management Extensions" festgelegt ist. Sie setzt sich aus den folgenden drei Komponenten zusammen:
  1. Authentifizierung: Der ferne Client muss im Connector-Server authentifiziert werden.
  2. Zugriffssteuerung: Die MBean-Zugriffssteuerung legt fest, wer auf die MBean-Informationen zugreifen und wer die MBean-Operationen durchführen kann.
  3. Sicherer Transport: Der Transport zwischen dem JMX-Client und dem Server kann mit TLS/SSL gesichert werden.

Authentifizierung

JMX stellt den Connector-Servern Methoden für die Authentifizierung der fernen Clients zur Verfügung. Für den RMI-Connector wird die Authentifizierung durchgeführt, indem beim Erstellen des Connector-Servers ein Objekt übergeben wird, das die Schnittstelle JMXAuthenticator implementiert. Deshalb implementiert eXtreme Scale die Schnittstelle JMXAuthenticator, um das ObjectGrid-Authenticator-Plug-in zu nutzen, um die fernen Clients zu authentifizieren. Einzelheiten zum Authentifizierung eines Clients in eXtreme Scale finden Sie unter Lernprogramm zur Java-SE-Sicherheit - Schritt 2.

Der JMX-Client folgt den JMX-APIs, um die Berechtigungsnachweise für die Verbindungsherstellung zum Connector-Server bereitzustellen. Das JMX-Framework übergibt die Berechtigungsnachweise an den Connector-Server und ruft dann die JMXAuthenticator-Implementierung für die Authentifizierung auf. Wie zuvor beschrieben, delegiert die JMXAuthenticator-Implementierung die Authentifizierung an die ObjectGrid-Authenticator-Implementierung.

Sehen Sie sich das folgende Beispiel an, das veranschaulicht, wie mit einem Berechtigungsnachweis eine Verbindung zu einem Connector-Server hergestellt wird:

javax.management.remote.JMXServiceURL jmxUrl = new JMXServiceURL(
        "service:jmx:rmi:///jndi/rmi://localhost:1099/objectgrid/MBeanServer");

    environment.put(JMXConnector.CREDENTIALS, new UserPasswordCredential("admin", "xxxxxx"));

    // JMXConnectorServer erstellen
    JMXConnector cntor = JMXConnectorFactory.newJMXConnector(jmxUrl, null);

    // Verbindung herstellen und eine Operation im fernen MBeanServer aufrufen
    cntor.connect(environment);

Im vorherigen Beispiel wird ein UserPasswordCredential-Objekt mit der Benutzer-ID admin und dem Kennwort xxxxx bereitgestellt. Dieses UserPasswordCredential-Objekt wird in der Umgebungs-Map gesetzt, die von der Methode JMXConnector.connect(Map) verwendet wird. Anschließend wird dieses UserPasswordCredential-Objekt über das JMX-Framework zunächst an den Server und schließlich zur Authentifizierung an das ObjectGrid-Authentifizierungsframework übergeben.

Das Clientprogrammiermodell folgt strikt der JMX-Spezifikation.

Zugriffssteuerung

Ein JMX-MBean-Server kann Zugriff auf sensible Informationen haben und deshalb in der Lage sein, sensible Operationen durchzuführen. JMX stellt die erforderliche Zugriffssteuerung bereit, die feststellt, welche Clients auf diese Informationen zugreifen und welche Clients diese Operationen durchführen dürfen. Die Zugriffssteuerung wird in das Java-Standardsicherheitsmodell integriert, indem Berechtigungen definiert werden, die den Zugriff auf den MBean-Server und seine Operationen steuern.

Bei der Zugriffssteuerung und -berechtigung für JMX-Operationen stützt sich eXtreme Scale auf die JAAS-Unterstützung, die die JMX-Implementierung bereitstellt. Zu jedem beliebigen Zeitpunkt während der Ausführung eines Programms besitzt ein Ausführungs-Thread einen aktuellen Satz an Berechtigungen. Wenn ein solcher Thread eine Operation der JMX-Spezifikation aufruft, handelt es sich um die so genannten "gehaltenen Berechtigungen". Bei der Durchführung einer JMX-Operation wird eine Sicherheitsprüfung durchgeführt, um festzustellen, ob die "gehaltenen Berechtigungen" die erforderliche Berechtigung abdecken.

Die MBean-Richtliniendefinition folgt dem Java-Richtlinienformat. Die folgende Richtlinie erteilt beispielsweise allen Unterzeichnern und allen Codebasen das Recht, die JMX-Adresse des Servers für die MBean "PlacementServiceMBean" abzurufen. Die Unterzeichner und die Codebasen werden jedoch in der Domäne "com.ibm.websphere.objectgrid" registriert.

grant {
    permission javax.management.MBeanPermission
        "com.ibm.websphere.objectgrid.management.PlacementServiceMBean#retrieveServerJMXAddress 
					[com.ibm.websphere.objectgrid:*,type=PlacementService]",
        "invoke";
}

Sie können das folgende Richtlinienbeispiel verwenden, um die Berechtigung auf der Basis der Identität des fernen Clients durchzuführen. Die Richtlinie erteilt dieselben MBean-Berechtigungen wie im vorherigen Beispiel, aber nur den Benutzern mit dem X500Principal-Namen CN=Administrator,OU=software,O=IBM,L=Rochester,ST=MN,C=US.

grant principal javax.security.auth.x500.X500Principal "CN=Administrator,OU=software,O=IBM,
				L=Rochester,ST=MN,C=US" {permission javax.management.MBeanPermission
        "com.ibm.websphere.objectgrid.management.PlacementServiceMBean#retrieveServerJMXAddress 
				[com.ibm.websphere.objectgrid:*,type=PlacementService]",
        "invoke";
}

Java-Richtlinien werden nur geprüft, wenn der Sicherheitsmanager aktiviert ist. Starten Sie Katalogserver und Container-Server mit dem JVM-Argument "-Djava.security.manager", um die Zugriffssteuerung für MBean-Operationen umzusetzen.

Sicherer Transport

Der Transport zwischen dem JMX-Client und dem Server kann mit TLS/SSL gesichert werden. Wenn das Attribut "transportType" des Katalogserver oder Containerservers auf "SSL_Required" oder "SSL_Supported" gesetzt ist, müssen Sie SSL verwenden, um die Verbindung zum JMX-Server herzustellen.

Zur Verwendung von SSL müssen Sie den Truststore, den Truststore-Typ und das Truststore-Kennwort im MBean-Client mit Systemeigenschaften konfigurieren, die mit "-D" beginnen:
  1. -Djavax.net.ssl.trustStore=TRUST_STORE_LOCATION
  2. -Djavax.net.ssl.trustStorePassword=TRUST_STORE_PASSWORD
  3. -Djavax.net.ssl.trustStoreType=TRUST_STORE_TYPE
Wenn Sie "com.ibm.websphere.ssl.protocol.SSLSocketFactory" als SSL-Socket-Factory in der Datei Java-Ausgangsverzeichnis/jre/lib/security/java.security verwenden, definieren Sie die folgenden Eigenschaften:
  1. -Dcom.ibm.ssl.trustStore=TRUST_STORE_LOCATION
  2. -Dcom.ibm.ssl.trustStorePassword=TRUST_STORE_PASSWORD
  3. -Dcom.ibm.ssl.trustStoreType=TRUST_STORE_TYPE
Zum Abrufen dieser Informationen, wenn Transport Layer Security/Secure Sockets Layer (TLS/SSL) in eigenständigen Konfigurationen aktiviert ist, müssen Sie die Katalog- und Container-Server mit definiertem JMX-Service-Port starten. Verwenden Sie eine der folgenden Methoden, um den JMX-Service-Port zu definieren:
  • Verwenden Sie die Option -JMXServicePort im Script startOgServer.
  • Wenn Sie einen integrierten Server verwenden, rufen Sie die Methode setJMXServicePort in der Schnittstelle ServerProperties auf, um den JMX-Service-Port zu definieren.
Der Standardwert für den JMX-Service-Port in Katalogservern ist 1099. Sie müssen für jede JVM in Ihrer Konfiguration eine andere Portnummer verwenden. Wenn Sie JMX/RMI verwenden, geben Sie die Option -JMXServicePort und die Portnummer explizit an, selbst wenn Sie den Standardportwert verwenden möchten.

Die Definition des JMX-Service-Ports ist erforderlich, wenn Sie Informationen zum Container-Server aus dem Katalogserver anzeigen möchten. Der Port ist beispielsweise erforderlich, wenn Sie den Befehl xscmd -c showMapSizes verwenden.

Setzen Sie den JMX-Connector-Port, um die Erstellung ephemerer Ports zu verhindern. Verwenden Sie eine der folgenden Methoden, um den JMX-Connector-Port zu setzen.
  • Verwenden Sie die Option -JMXConnectorPort mit dem Script startOgServer.
  • Wenn Sie einen eingebetteten Server verwenden, rufen Sie die Methode setJMVConnectorPort in der Schnittstelle ServerProperties auf.