[PYTHON] Hit API ERS d'ISE avec PowerShell

introduction

Si vous souhaitez utiliser l'API facilement, vous utiliserez souvent cURL, Postman, HTTP Client fourni par divers langages de programmation, etc., mais il peut ne pas être possible de préparer un tel environnement en raison de diverses restrictions. N'est-ce pas?

Dans cet article, je présenterai l'API de Cisco Identity Services Engine (ci-après dénommée ISE) que vous pouvez utiliser l'API REST au moins avec un terminal Windows (PowerShell).

Les deux utilisent la commande ʻInvoke-WebRequest`, qui est disponible par défaut dans PowerShell. Pour référence, un exemple d'implémentation de la même opération en Python est également présenté.

environnement

・ Windows 10 Professionnel -PowerShell version 5.1 (paramètres par défaut après l'installation de Windows) · Cisco ISE version 2.6

Préparation

Voir les articles Qiita (https://qiita.com/naixia/items/5c521183c2b606a891b1) ou les articles DevNet (https://developer.cisco.com/docs/identity-services-engine/).

Ce que vous voulez faire ① Obtenez des informations par GET

Exemple d'implémentation PowerShell


#Traitement pour éviter les erreurs SSL
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


#Définition variable
$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'
 }

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

#Exemple de méthode de confirmation
return $responseData
return $responseData.StatusCode
return $responseData.Header
return $responseData.RawContent
return $responseData.Content

Par défaut, PowerShell fournit la commande ʻInvoke-RestMethod en plus de ʻInvoke-WebRequest en tant que client HTTP. Pour afficher l'en-tête et le contenu de la réponse sous une forme facile à voir comme cette fois-ci, il est préférable d'ajouter -UserBasicParsing à ʻInvoke-WebRequest, et si vous voulez gérer la valeur de retour directement et faire quelque chose, ʻInvoke -RestMethod semble être utile. Quelle est la différence entre ici et [ici](https://www.it-swarm.dev/ja/windows/invokewebrequest et invokerestmethod? / 944432281 /) est également utile.

Exemple d'implémentation de référence Python

Utiliser la bibliothèque de requêtes pour les appels d'API en python3.7 (mac) (c'est plus simple)


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) #Cette fois, ISE utilise un certificat auto-signé, activez ainsi l'option d'évitement d'erreur SSL

data = r.json()

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

Ce que vous voulez faire ② Mettre à jour les informations par PUT

Exemple d'implémentation PowerShell


#Traitement pour éviter les erreurs SSL
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


#Définition variable
$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 +L'ID de l'utilisateur cible devient l'URL

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

#Contenu dans l'en-tête-Ajouter un type
$headers = @{
'Authorization'= "Basic $encodedCredentials"; 
'Accept'= 'application/json'; 
'cache-control'= 'no-cache';
'content-type'= 'application/json'
 }

#Définition du corps. Le paramètre est l'identifiant du compte que vous souhaitez modifier, name,mot de passe minimum requis
$body = @{
"InternalUser" = @{
"id" = "57d1fada-3ab6-4d62-94eb-9b77be36dc7e";
"name" = "user1";
"password"="Password123"
}
} | convertTo-Json

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

#Méthode de confirmation
return $responseData.RawContent
return $responseData
return $responseData.StatusCode
return $responseData.Header
return $responseData.Content

Exemple d'implémentation de référence Python


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 de l'utilisateur à mettre à jour

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))

référence

Comment faire l'authentification de base dans PowerShell 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

Un débutant en Python a écrit un script à l'aide de l'API ISE ERS https://qiita.com/naixia/items/5c521183c2b606a891b1

Quelle est la différence entre Invoke-WebRequest et Invoke-RestMethod? https://www.it-swarm.dev/ja/windows/invokewebrequestとinvokerestmethodの違いは何ですか?/944432281/

Recommended Posts

Hit API ERS d'ISE avec PowerShell
Hit l'API Zabbix (1.8, 2.0)
Accédez à l'API Twitter après l'authentification Oauth avec Django
Hit API de Mastodon en Python
Téléchargement d'image avec l'API Flickr
Utiliser l'API Trello avec python
Créer une API avec Django
Utiliser l'API Twitter avec Python
API avec Flask + uWSGI + Nginx
Environnement Venv avec Windows PowerShell
API Web avec Python + Falcon
Soutenez-vous avec l'API Twitter
Appelez l'API avec python3.
Utiliser l'API subsonique avec python3
Update_with_media réussi avec l'API Twitter
[PowerShell] Analyse morphologique avec SudachiPy
Qiita API Oauth avec Django
Obtenez un classement avec l'API Rakuten