
Idempotente Funktionen für IBM Security Appliance REST-APIs. Derzeit werden ISAM- und ISDS-Appliances abgedeckt.
Dieses Repository enthält Python-Code zur Verwaltung von IBM Security Appliances über ihre jeweiligen REST-APIs. Die ISAM-Appliance hat den ausgereiftesten Code.
Code für die ISDS-Appliance befindet sich in der Entwicklung.
Code für die ISVG-Appliance ist brandneu (nur mit 10.0.1.0 und höher getestet).
Für dieses Paket ist Python v3.9 und höher erforderlich.
Die folgenden Python-Pakete sind erforderlich:
Die folgenden Python-Pakete sind optional:
management_ssl_certificate verwendet)management_ssl_certificate verwendet)Appliances müssen für ihr LMI eine IP-Adresse definiert haben. Dies kann bedeuten, dass Appliances ihre Erstkonfiguration mit Lizenzakzeptanz abgeschlossen haben.
Diese Änderungen sind abwärtskompatibel. Standardmäßig wird nicht verifiziert, aber es wird immer ein Hinweis angezeigt:
Certificate verification has been disabled. Python is NOT verifying the SSL
certificate of the host appliance and InsecureRequestWarning messages are
being suppressed for the following host:
https://{0}:{1}
To use certificate verification:
1. When the certificate is trusted by your Python environment:
Instantiate all instances of ISAMAppliance with verify=True or set
the environment variable IBMSECLIB_VERIFY_CONNECTION=True.
2. When the certificate is not already trusted in your Python environment:
Instantiate all instances of ISAMAppliance with the verify parameter
set to the fully qualified path to a CA bundle.
See the following URL for more details:
https://requests.readthedocs.io/en/latest/user/advanced/#ssl-cert-verification
Um diese Zertifikatsvalidierungswarnung zu beheben, beachten Sie die folgenden Anweisungen:
Korrekte Verwendung:
Wenn Sie das Zertifikat irgendwo auf der Festplatte haben, instanziieren Sie die ISAMAppliance mit:
ISAMAppliance(…, verify=<path to cert>)
Sie können dies von der Appliance mit einem Befehl wie dem folgenden abrufen:
openssl s_client -connect ${HOSTNAME}:${PORT} </dev/null 2>/dev/null | openssl x509 -outform pem > isamAppliance.pem
Wenn das Zertifikat in Ihrer Python-Umgebung bereits vertrauenswürdig ist, instanziieren Sie die ISAMAppliance mit:
ISAMAppliance(…, verify=True)
oder setzen Sie die Umgebungsvariable: IBMSECLIB_VERIFY_CONNECTION=true
Wenn Sie Fehler erhalten, dass der Hostname nicht mit dem Zertifikat übereinstimmt:
Das könnte so aussehen:
<stack trace>
…
raise CertificateError("hostname %r doesn't match %r" % (hostname, dnsnames[0]))
urllib3.util.ssl_match_hostname.CertificateError: hostname '192.168.42.111' doesn't match 'appliance.ibm.com'
Stellen Sie sicher, dass der Hostname, der beim Instanziieren Ihrer ISAMAppliance verwendet wird, mit dem Subject Alternative Name des Zertifikats übereinstimmt.
Überprüfen Sie mit:
openssl x509 -in <cert-pem-file> -text
Beispiel:
$ openssl x509 -in /path/to/appliance.pem -text
Certificate:
Data:
Version: 3 (0x2)
…
X509v3 Subject Alternative Name:
DNS:appliance.ibm.com
…
Das Folgende erzeugt Fehler:
ISAMAppliance(host=”192.168.42.111”, lmi_port=443, verify=/path/to/appliance.pem)
da der Host nicht mit dem Subject Alternative Name übereinstimmt. Verwenden Sie stattdessen:
ISAMAppliance(host=”appliance.ibm.com”, lmi_port=443, verify=/path/to/appliance.pem)
Dieses Paket verwendet ein Datum für die Versionierung. Zum Beispiel: "2017.03.18.0"
Es ist das Datum, an dem das Paket veröffentlicht wird, mit einer Sequenznummer am Ende, um zu behandeln, wenn es mehrere Veröffentlichungen an einem Tag gibt (was voraussichtlich ungewöhnlich ist).
Dieses Python-Paket bietet die folgenden Funktionen:
{
rc: <0 for success, higher for errors>
changed: <True or False>
warnings: <List of strings with warnings - e.g. incompatible version>
data: <JSON data returned by appliance REST API that the function called>
}
Hinweis: Es ist bevorzugt, Warnungen zurückzugeben, anstatt einen Nicht-Null-rc zurückzusenden.
Eine abstrakte ibmappliance-Klasse wird erweitert, um eine Klasse für jede hier unterstützte Appliance zu erstellen.
Derzeit sind das ISAM- und ISDS-Appliances.
Ein abstrakter User wird für jede benötigte Benutzerart erweitert. Für ISAM gibt es einen Benutzer für den Appliance-Zugriff
und einen anderen für die Authentifizierung bei Web Runtime (Policy Server).
Es gibt vier primäre ISAM-Pakete – base, web, aac und fed. web enthält alle Komponenten, die
für die Einrichtung der Web-Funktionalität benötigt werden, einschließlich eingebettetem LDAP, Runtime und Funktionen, die als Teil des
wga-Moduls aktiviert werden. aac enthält Funktionen, die als Teil des mga-Moduls aktiviert werden, und fed die der federation. base
enthält alles andere – einschließlich aac und fed runtime und Audit Configuration (diese sind aac und fed gemeinsam
und befinden sich daher in base).
Die Paket- und Dateinamen wurden mit der folgenden Absicht erstellt:
Enthält verschiedene Funktionen, die generisch und unabhängig von einer IBM Appliance sind, z. B. json_compare().
get_all()Diese Funktion gibt typischerweise alle Objekte zurück, die mit diesem Feature zusammenhängen.
get()Diese Funktion gibt die Details eines bestimmten Objekts zurück.
set()Diese Funktion ermittelt, ob das zu manipulierende Objekt existiert; wenn nicht, ruft sie add() auf, andernfalls ruft sie update() auf.
In Fällen, in denen es kein update() gibt, vergleicht sie, ob es einen Unterschied zwischen dem vorhandenen Wert auf der Appliance
und dem Wert, der über die Funktion gesetzt wird, gibt – wenn unterschiedlich, löscht sie das Objekt mit delete(), bevor sie add() aufruft.
add()Überprüft, ob das Objekt bereits existiert – wenn ja, überspringen, andernfalls hinzufügen.
update()Überprüft, ob das Objekt bereits existiert – wenn ja, prüfen, ob eine Aktualisierung erforderlich ist, bevor eine Änderung vorgenommen wird, andernfalls nichts tun.
delete()Überprüft, ob das Objekt bereits existiert – wenn ja, löschen, andernfalls nichts tun.
import_<>()"import" ist ein reserviertes Wort, daher gibt es ein Suffix, das angibt, was importiert werden soll (z. B. Datei oder Schlüssel). Dies überprüft, ob das Objekt existiert, bevor es importiert wird.
export_<>()Export prüft, ob das Objekt existiert, bevor es exportiert wird – beim Exportieren in eine Datei wird nicht erneut exportiert, wenn die Datei bereits existiert. Export
compare()Compare nimmt die JSON-Ausgabe der get_all()-Funktionen und vergleicht sie. Es entfernt Daten aus JSON, die für jede Appliance eindeutig sind (z. B. UUID-Werte). Der zurückgegebene deleted_keys-Wert listet die JSON-Schlüssel auf, die vor dem Vergleich gelöscht wurden.
Erstellen Sie ein Appliance-Objekt und übergeben Sie es an die Funktion. Appliance und das benötigte User-Objekt sind Klassen, um zukünftige Erweiterungen wie die Authentifizierung mit Zertifikat anstelle von Benutzername/Passwort zu ermöglichen.
check_modeDer Standardwert ist False; übergeben Sie True, um zurückzukehren und keine Änderung vorzunehmen. Das "changed"-Flag wird auf True gesetzt, wenn Änderungen erkannt werden.
forceDer Standardwert ist False; übergeben Sie True, um die Idempotenzlogik zu überschreiben.
Die anderen Parameter entsprechen wörtlich der REST-API-Dokumentation. Die Absicht war, auf die REST-API-Dokumentation zu verweisen und sie nicht zu wiederholen. Bitte lesen Sie die REST-API-Dokumentation für Details.
Bitte erstellen Sie ein Issue auf GitHub, wenn ein Fehler entdeckt wird oder es REST-APIs gibt, die von diesem Paket nicht abgedeckt werden. Geben Sie detaillierte Notizen zusammen mit Trace-Logs an, wenn ein Fehler gemeldet wird.
Der Inhalt dieses Repositorys ist unter der Apache-2.0-Lizenz Open Source.
Copyright 2017 International Business Machines
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.