[PYTHON] Klicken Sie mit PowerShell auf die ERS-API von ISE

Einführung

Wenn Sie die API einfach bedienen möchten, verwenden Sie häufig cURL, Postman, HTTP-Client, der von verschiedenen Programmiersprachen usw. bereitgestellt wird. Aufgrund verschiedener Einschränkungen ist es jedoch möglicherweise nicht möglich, eine solche Umgebung vorzubereiten. Es ist nicht?

In diesem Beitrag werde ich die API der Cisco Identity Services Engine (im Folgenden als ISE bezeichnet) vorstellen, mit der Sie die REST-API zumindest mit einem Windows-Terminal (PowerShell) betreiben können.

Beide verwenden den Befehl "Invoke-WebRequest", der standardmäßig in PowerShell verfügbar ist. Als Referenz wird auch ein Beispiel für die Implementierung derselben Operation in Python gezeigt.

Umgebung

・ Windows 10 Pro -PowerShell Version 5.1 (Standardeinstellungen nach der Windows-Installation) · Cisco ISE Version 2.6

Vorbereitung

Siehe Qiita-Artikel (https://qiita.com/naixia/items/5c521183c2b606a891b1) oder DevNet-Artikel (https://developer.cisco.com/docs/identity-services-engine/).

Was Sie tun möchten ① Informationen von GET erhalten

PowerShell-Implementierungsbeispiel


#Verarbeitung zur Vermeidung von SSL-Fehlern
add-type @"
  using System.Net;
  using System.Security.Cryptography.X509Certificates;
  public class TrustAllCertsPolicy : ICertificatePolicy {
      public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate,
                                        WebRequest request, int certificateProblem) {
          return true;
      }
   }
"@
 
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy


#Variablendefinition
$username = 'ersadmin' # ERS Admin Username
$password = 'XXXX' # ERS Admin Password
$url = 'https://X.X.X.X:9060/ers/config/internaluser/' # X.X.X.X => ISE's IP address
$credPair = "$($username):$($password)"
 
$encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($credPair))
 hu
$headers = @{
'Authorization'= "Basic $encodedCredentials"; 
'Accept'= 'application/json'; 
'cache-control'= 'no-cache'
 }

#API-Aufruf
$responseData = Invoke-WebRequest -Uri $url -Method Get -Headers $headers -UseBasicParsing

#Beispiel für eine Bestätigungsmethode
return $responseData
return $responseData.StatusCode
return $responseData.Header
return $responseData.RawContent
return $responseData.Content

Standardmäßig bietet PowerShell zusätzlich zu "Invoke-WebRequest" einen Befehl namens "Invoke-RestMethod" als HTTP-Client. Um den Antwortheader und den Inhalt in einer Form anzuzeigen, die für die Benutzer so leicht zu sehen ist, ist es besser, "-UserBasicParsing" zu "Invoke-WebRequest" hinzuzufügen. Wenn Sie den Rückgabewert direkt verarbeiten und etwas tun möchten, rufen Sie "Invoke" auf -RestMethod` scheint nützlich zu sein. Was ist der Unterschied zwischen hier und [hier](https://www.it-swarm.dev/ja/windows/invokewebrequest und invokerestmethod? / 944432281 /) ist ebenfalls hilfreich.

Referenz Python-Implementierungsbeispiel

Verwenden Sie die Anforderungsbibliothek für API-Aufrufe in Python3.7 (Mac) (dies ist einfacher).


import requests
import json
import base64

host = "X.X.X.X" # ISE's IP address
user = "ersadmin" # ERS Admin Username
password = "XXXXXX" # ERS Admin Password

creds = str.encode(':'.join((user, password)))
encodedAuth = bytes.decode(base64.b64encode(creds))

headers = {
    'accept': "application/json",
    'authorization': " ".join(("Basic",encodedAuth)),
    'cache-control': "no-cache",
    }

url = "https://{}:9060".format(host) + "/ers/config/internaluser/"

r = requests.get(url, headers=headers,verify=False) #Diesmal verwendet ISE ein selbstsigniertes Zertifikat. Aktivieren Sie daher die Option zur Vermeidung von SSL-Fehlern

data = r.json()

print(json.dumps(data, indent=4))

Was Sie tun möchten ② Aktualisieren Sie die Informationen per PUT

PowerShell-Implementierungsbeispiel


#Verarbeitung zur Vermeidung von SSL-Fehlern
add-type @"
  using System.Net;
  using System.Security.Cryptography.X509Certificates;
  public class TrustAllCertsPolicy : ICertificatePolicy {
      public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate,
                                        WebRequest request, int certificateProblem) {
          return true;
      }
   }
"@
 
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy


#Variablendefinition
$username = 'ersadmin' # ERS Admin Username
$password = 'XXXX' # ERS Admin Password
$url = 'https://X.X.X.X:9060/ers/config/internaluser/' + "57d1fada-3ab6-4d62-94eb-9b77be36dc7e"  # X.X.X.X => ISE's IP address +Die ID des Zielbenutzers wird zur URL

$credPair = "$($username):$($password)"
 
$encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($credPair))
 

#Inhalt in der Kopfzeile-Typ hinzufügen
$headers = @{
'Authorization'= "Basic $encodedCredentials"; 
'Accept'= 'application/json'; 
'cache-control'= 'no-cache';
'content-type'= 'application/json'
 }

#Körperdefinition. Der Parameter ist die ID des Kontos, das Sie ändern möchten, name,minimal erforderliches Passwort
$body = @{
"InternalUser" = @{
"id" = "57d1fada-3ab6-4d62-94eb-9b77be36dc7e";
"name" = "user1";
"password"="Password123"
}
} | convertTo-Json

#API-Anfrage
$responseData = Invoke-WebRequest -Uri $url -Method PUT -Headers $headers -Body $body -UseBasicParsing

#Bestätigungsmethode
return $responseData.RawContent
return $responseData
return $responseData.StatusCode
return $responseData.Header
return $responseData.Content

Referenz Python-Implementierungsbeispiel


import requests
import json
import base64

host = "X.X.X.X" # ISE's IP address
user = "ersadmin" # ERS Admin Username
password = "XXXXXX" # ERS Admin Password
user_id = "57d1fada-3ab6-4d62-94eb-9b77be36dc7e" #ID des zu aktualisierenden Benutzers

creds = str.encode(':'.join((user, password)))
encodedAuth = bytes.decode(base64.b64encode(creds))

headers = {
    'accept': "application/json",
    'content-type': "application/json",
    'authorization': " ".join(("Basic",encodedAuth)),
    'cache-control': "no-cache",
    }

req_body_json = """  {{
    "InternalUser" : {{
        "id" : "{}",
        "name" : "user1",
        "password" : "Password123",
        "customAttributes" : {{
        }}
    }}
}}
""".format(user_id,user_name,new_passwd)


url = "https://{}:9060".format(host) + "/ers/config/internaluser/{}".format(id)

r = requests.put(url, headers=headers, data=req_body_json, verify=False) 

data = r.json()

print(json.dumps(data, indent=4))

Referenz

So führen Sie die Standardauthentifizierung in PowerShell durch https://pallabpain.wordpress.com/2016/09/14/rest-api-call-with-basic-authentication-in-powershell/

DevNet Cisco ISE ERS API Reference Guide https://developer.cisco.com/docs/identity-services-engine/

ERS API (External RESTful Services API) https://www.cisco.com/c/en/us/td/docs/security/ise/2-6/api_ref_guide/api_ref_book/ise_api_ref_ers1.html

Python-Anfänger haben ein Skript mit der ISE ERS-API geschrieben https://qiita.com/naixia/items/5c521183c2b606a891b1

Was ist der Unterschied zwischen Invoke-WebRequest und Invoke-RestMethod? https://www.it-swarm.dev/ja/windows/invokewebrequestとinvokerestmethodの違いは何ですか?/944432281/

Recommended Posts

Klicken Sie mit PowerShell auf die ERS-API von ISE
Drücken Sie die Zabbix-API (1.8, 2.0)
Klicken Sie nach der Oauth-Authentifizierung mit Django auf die Twitter-API
Hit Mastodons API in Python
Bild herunterladen mit Flickr API
Verwenden Sie die Trello-API mit Python
Erstellen Sie eine API mit Django
Verwenden Sie die Twitter-API mit Python
API mit Flask + uWSGI + Nginx
Venv Umgebung mit Windows Powershell
Web-API mit Python + Falcon
Unterstützen Sie sich mit der Twitter API
Rufen Sie die API mit python3 auf.
Verwenden Sie die Unterschall-API mit Python3
Erfolgreiches update_with_media mit Twitter API
[PowerShell] Morphologische Analyse mit SudachiPy
Qiita API Oauth mit Django
Holen Sie sich ein Ranking mit Rakuten API