
Funzioni idempotenti per le API REST di IBM Security Appliance. Attualmente copre le appliance ISAM e ISDS.
Questo repository contiene codice Python per gestire gli apparati IBM Security tramite le rispettive API REST. L'appliance ISAM dispone del codice più maturo.
Il codice per l'appliance ISDS è in fase di sviluppo.
Il codice per l'appliance ISVG è nuovissimo (testato solo con 10.0.1.0 e versioni successive).
Per questo pacchetto è richiesto Python v3.9 o superiore.
Sono richiesti i seguenti pacchetti Python:
I seguenti pacchetti Python sono opzionali:
Gli appliance devono avere un indirizzo IP definito per la propria LMI. Ciò potrebbe significare che gli appliance hanno completato la configurazione iniziale con l'accettazione della licenza.
Queste modifiche sono retrocompatibili. Per impostazione predefinita non eseguiamo la verifica, ma mostriamo sempre un avviso:
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
Per risolvere questo avviso di validazione del certificato, prendere in considerazione le istruzioni riportate di seguito:
Utilizzo corretto:
Se si dispone del certificato su disco in una posizione qualsiasi, istanziare ISAMAppliance con:
ISAMAppliance(…, verify=<path to cert>)
È possibile recuperarlo dall'appliance utilizzando un comando come:
openssl s_client -connect ${HOSTNAME}:${PORT} </dev/null 2>/dev/null | openssl x509 -outform pem > isamAppliance.pem
Se il certificato è già considerato attendibile nell'ambiente Python, istanziare ISAMAppliance con:
ISAMAppliance(…, verify=True)
oppure impostare la variabile d'ambiente: IBMSECLIB_VERIFY_CONNECTION=true
Se si ricevono errori relativi al nome host che non corrisponde al certificato:
Potrebbe apparire così:
<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'
Assicurarsi che il nome host utilizzato durante l'istanziazione di ISAMAppliance corrisponda al Subject Alternative Name del certificato.
Verificare con:
openssl x509 -in <cert-pem-file> -text
Esempio:
$ openssl x509 -in /path/to/appliance.pem -text
Certificate:
Data:
Version: 3 (0x2)
…
X509v3 Subject Alternative Name:
DNS:appliance.ibm.com
…
Quanto segue genererà errori:
ISAMAppliance(host=”192.168.42.111”, lmi_port=443, verify=/path/to/appliance.pem)
poiché il nome host non corrisponde al Subject Alternative Name. In alternativa, utilizzare:
ISAMAppliance(host=”appliance.ibm.com”, lmi_port=443, verify=/path/to/appliance.pem)
Questo pacchetto utilizza una data per il versionamento. Ad esempio: "2017.03.18.0"
Si tratta della data in cui il pacchetto viene rilasciato, con un numero di sequenza alla fine per gestire i casi in cui vi siano più rilasci nello stesso giorno (cosa che dovrebbe essere rara).
Questo pacchetto Python offre le seguenti funzionalità:
{
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>
}
Nota: è preferibile restituire avvisi piuttosto che un rc diverso da zero.
Una classe astratta ibmappliance viene estesa per creare una classe per ciascun appliance supportato in questo repository. Attualmente si tratta degli appliance ISAM e ISDS.
Una classe astratta User viene estesa per ogni tipo di utente necessario. Per ISAM si tratta di un utente per l'accesso all'appliance e di un altro per l'autenticazione a Web Runtime (Policy Server).
Ci sono quattro pacchetti ISAM primari: base, web, aac e fed. web contiene tutti i componenti necessari per configurare le funzionalità web, inclusi ldap integrato, runtime e funzionalità attivate come parte del modulo wga. aac contiene le funzionalità attivate come parte del modulo mga e fed quelle della federation. base contiene tutto il resto - inclusi runtime di aac e fed e Audit Configuration (questi sono comuni a aac e fed e quindi si trovano in base).
I nomi dei pacchetti e dei file sono stati creati con la seguente intenzione:
Contiene funzioni varie generiche e indipendenti da qualsiasi appliance IBM, ad esempio json_compare().
get_all()Questa funzione in genere restituisce tutti gli oggetti correlati a quella funzionalità.
get()Questa funzione restituisce i dettagli di un particolare oggetto.
set()Questa funzione determina se l'oggetto da manipolare esiste; in caso contrario chiama add(), altrimenti chiama update(). Nei casi in cui non esiste update(), confronta il valore esistente sull'appliance con quello impostato tramite la funzione - se diverso, elimina (delete()) l'oggetto prima di chiamare add().
add()Controlla se l'oggetto esiste già - in tal caso lo salta, altrimenti lo aggiunge.
update()Controlla se l'oggetto esiste già - in tal caso verifica se è necessario un aggiornamento prima di apportare una modifica, altrimenti non fa nulla.
delete()Controlla se l'oggetto esiste già - in tal caso lo elimina, altrimenti non fa nulla.
import_<>()"import" è una parola riservata, quindi viene aggiunto un suffisso per indicare cosa importare (ad esempio file o key). Questa funzione verifica se l'oggetto esiste prima di importarlo.
export_<>()Export verifica se l'oggetto esiste prima di esportarlo - quando si esporta in un file e il file esiste già, non lo riesporta. Esporta
compare()Compare accetta l'output JSON delle funzioni get_all() e lo confronta. Rimuove dall'JSON i dati che sono unici per ciascun appliance (ad esempio i valori UUID). Il valore deleted_keys restituito elenca le chiavi JSON che sono state eliminate prima del confronto.
Creare un oggetto appliance e passarlo alla funzione. L'appliance e l'oggetto User necessari sono classi che consentono future estensioni come l'autenticazione tramite certificato anziché nome utente/password.
check_modeIl valore predefinito è False; passare True per restituire senza apportare modifiche. Il flag "changed" verrà impostato su True se vengono rilevate modifiche.
forceIl valore predefinito è False; passare True per ignorare la logica di idempotenza.
Gli altri parametri corrisponderanno esattamente alla documentazione dell'API REST. L'intenzione era quella di fare riferimento alla documentazione dell'API REST senza doverla ripetere. Fare riferimento alla documentazione dell'API REST per i dettagli.
Si prega di aprire una issue su GitHub quando viene scoperto un bug o quando ci sono API REST non coperte da questo pacchetto. Fornire note dettagliate insieme ai log di traccia quando si segnala un bug.
I contenuti di questo repository sono open-source secondo la licenza Apache 2.0.
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.