Introduzione
In questo documento viene descritto come configurare l'accesso API e utilizzarlo per recuperare le informazioni sulle risorse da Secure Access.
Prerequisiti
Cisco raccomanda la conoscenza dei seguenti argomenti:
- Python 3.x
- API REST
- Cisco Secure Access
Requisiti
Prima di procedere, è necessario soddisfare i seguenti requisiti:
- Account utente Cisco Secure Access con il ruolo di amministratore completo.
- Account Cisco Security Cloud Single Sign On (SCSO) per accedere a Secure Access.
Componenti usati
Le informazioni fornite in questo documento si basano sulle seguenti versioni software e hardware:
- Dashboard di accesso protetto
- Python
Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.
Configurazione
L'API Secure Access fornisce un'interfaccia REST standard e supporta il flusso di credenziali del client OAuth 2.0. Per iniziare, accedere a Secure Access e creare le chiavi dell'API Secure Access. Quindi, usare le credenziali API per generare un token di accesso API.
Nota: le chiavi API, le password, i segreti e i token consentono di accedere ai dati privati. Le credenziali non devono mai essere condivise con altri utenti o organizzazioni.
Configurare la chiave API dal dashboard di accesso sicuro prima di eseguire gli script menzionati in questo articolo.
Crea una chiave API
Creare una chiave API e un segreto attenendosi alla seguente procedura. Accedere a Secure Access con l'URL: Secure Access
- Dalla barra laterale sinistra, selezionare l'opzione
Admin.
- In
Admin selezionare l'opzione API Keys:
Amministratore dashboard di accesso sicuro - Chiavi API
3. Nell'angolo in alto a destra, fai clic sul + pulsante per aggiungere una nuova chiave API:
Accesso sicuro - Aggiungi chiave API
4. Fornire il API Key Name, Description(Facoltativo) e selezionare il Key scope e Expiry date in base alle proprie esigenze. Al termine, fare clic sul pulsante Create:
Accesso sicuro - Dettagli chiave API
5. Copiare il API Keye il Key Secret e poi fare clic su ACCEPT AND CLOSE:
Accesso sicuro - Chiave e segreto API
Nota: esiste solo un'opportunità per copiare il segreto API. Secure Access non salva il segreto API e non è possibile recuperarlo dopo la creazione iniziale.
Codice Python
Esistono diversi modi per scrivere questo codice, considerando che il token generato è valido per 3600 secondi (1 ora). È possibile creare due script distinti in cui il primo script può essere utilizzato per generare il token Bearer e quindi un secondo script in cui tale token Bearer può essere utilizzato per eseguire la chiamata API (recupero/aggiornamento o eliminazione) alla risorsa a cui si è interessati oppure scrivere un singolo script per eseguire entrambe le azioni assicurandosi che, se un token Bearer è già stato generato, nel codice venga mantenuta una condizione che un nuovo token Bearer non venga generato ogni volta che lo script viene eseguito.
Per fare in modo che funzioni in python, assicurarsi di installare queste librerie:
pip install oauthlib pip install requests_oauthlib
Script 1:
Assicurarsi di menzionare il corretto client_ide client_secretin questo script:
import requests from oauthlib.oauth2 import BackendApplicationClient from oauthlib.oauth2 import TokenExpiredError from requests_oauthlib import OAuth2Session from requests.auth import HTTPBasicAuth token_url = 'https://api.sse.cisco.com/auth/v2/token' client_id = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX" client_secret = "XXXXXXXXXXXXXXXXXXXXXXXXX" class SecureAccessAPI: def __init__(self, url, ident, secret): self.url = url self.ident = ident self.secret = secret self.token = None def GetToken(self): auth = HTTPBasicAuth(self.ident, self.secret) client = BackendApplicationClient(client_id=self.ident) oauth = OAuth2Session(client=client) self.token = oauth.fetch_token(token_url=self.url, auth=auth) return self.token # Get token api = SecureAccessAPI(token_url, client_id, client_secret) print("Token: " + str(api.GetToken()))
Uscita:
L'output di questo script deve essere simile al seguente:
Token: {'token_type': 'bearer', 'access_token': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjcyNmI5MGUzLWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...', 'expires_in': 3600, 'expires_at': 1707767804.6489065}
Il access_tokenè molto lungo con migliaia di caratteri e, quindi, per mantenere l'output leggibile, è stato abbreviato solo per questo esempio.
Script 2:
Il comando access_token from Script 1 può quindi essere utilizzato in questo script per effettuare chiamate API. Ad esempio, utilizzare Script 2 per recuperare le informazioni sui gruppi di tunnel di rete tramite la risorsa /deployments/v2/networktunnelgroups:
import requests import pprint import json url = "https://api.sse.cisco.com/deployments/v2/networktunnelgroups" BT = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjcyNmI5MGUzLWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...'" headers = { 'Authorization':f"Bearer {BT}" ,"Accept": "application/json" } response = requests.request('GET', url, headers=headers) json_object = json.loads(response.content) pprint.pprint(json_object)
Uscita:
L'output di questo script deve essere simile al seguente:
Output Python - Network Tunnel Group
È inoltre possibile recuperare informazioni su criteri, computer mobili, report e così via, tramite la Guida per l'utente degli sviluppatori Secure Access.
Risoluzione dei problemi
Gli endpoint API di accesso sicuro utilizzano i codici di risposta HTTP per indicare l'esito positivo o negativo di una richiesta API. In generale, i codici nell'intervallo 2xx indicano un esito positivo, i codici nell'intervallo 4xx indicano un errore risultante dalle informazioni fornite e i codici nell'intervallo 5xx indicano errori del server. L'approccio per risolvere il problema dipende dal codice di risposta ricevuto:
API REST - Codici di risposta 1
API REST - Codici di risposta 2
Informazioni correlate