はじめに
このドキュメントでは、APIアクセスを設定し、これを使用してセキュアアクセスからリソース情報を取得する手順について説明します。
前提条件
次の項目に関する知識があることが推奨されます。
- Python 3.x
- REST API
- シスコセキュアアクセス
要件
次の手順に進む前に、次の要件を満たす必要があります。
- Full Adminuserロールを持つCisco Secure Accessユーザアカウント。
- セキュアアクセスにサインインするためのCisco Security Cloudシングルサインオン(SCSO)アカウント
使用するコンポーネント
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
設定
Secure Access APIは、標準のRESTインターフェイスを提供し、OAuth 2.0クライアント資格情報フローをサポートします。開始するには、セキュアアクセスにサインインし、セキュアアクセスAPIキーを作成します。次に、APIクレデンシャルを使用してAPIアクセストークンを生成します。
注:APIキー、パスワード、シークレット、トークンを使用すると、プライベートデータにアクセスできます。他のユーザーまたは組織と資格情報を共有することはできません。
この記事で説明されているスクリプトを実行する前に、Secure Access DashboardからAPIキーを設定します。
APIキーの作成
次の手順でAPIキーとシークレットを作成します。URL:Secure AccessでSecure Accessにサインインします。
- 左側のサイドバーから
Admin
オプションを選択します。
Admin
でオプションを選択します。 API Keys:
セキュアアクセスダッシュボードの管理者 – APIキー
3. 右上隅の「+
」ボタンをクリックして、新しいAPIキーを追加します。
セキュアアクセス – APIキーの追加
4. API Key Name, Description
(オプション)を入力し、要件に応じてKey scope
およびExpiry date
を選択します。完了したら、Create
ボタンをクリックします。
セキュアアクセス – APIキーの詳細
5. API Key
とKey Secret
をコピーして、ACCEPT AND CLOSE
をクリックします。
セキュアアクセス – APIキーとシークレット
注:APIシークレットをコピーする機会は1回だけです。セキュアアクセスではAPIシークレットは保存されず、最初の作成後は取得できません。
Pythonコード
生成されたトークンが3600秒間(1時間)有効であることを考慮して、このコードを記述する方法は複数あります。 最初のスクリプトを使用してBearer Tokenを生成し、次にBearer Tokenを使用して対象のリソースにAPIコール(フェッチ/更新または削除)を実行できる2つ目のスクリプトを作成するか、またはbearer Tokenがすでに生成されている場合は、スクリプトが実行されるたびに新しいbearer tokenが生成されないという条件をコードに記述して、両方のアクションを実行します。
Pythonで動作させるには、以下のライブラリをインストールしてください:
pip install oauthlib
pip install requests_oauthlib
スクリプト 1:
このスクリプトで、client_id
およびclient_secret
が正しいことを必ず言及してください。
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()))
出力:
このスクリプトからの出力は、次のようになります。
Token: {'token_type': 'bearer', 'access_token': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjcyNmI5MGUzLWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...', 'expires_in': 3600, 'expires_at': 1707767804.6489065}
access_token
は数千文字と非常に長い文字列であるため、この例では出力を読みやすくするために省略しています。
スクリプト 2:
その後、このスクリプトで、スクリプト1のaccess_token
を使用してAPIコールを発信できます。たとえば、/deployments/v2/networktunnelgroups
リソースを使用してネットワークトンネルグループに関する情報を取得するには、スクリプト2を使用します。
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)
出力:
このスクリプトからの出力は、次のようになります。
Python出力 – ネットワークトンネルグループ
また、『セキュアアクセス開発者ユーザガイド』を使用して、ポリシー、ローミングコンピュータ、レポートなどに関する情報を取得することもできます。
トラブルシュート
Secure Access APIエンドポイントは、HTTP応答コードを使用してAPI要求の成功または失敗を示します。一般に、2xxの範囲のコードは成功を示し、4xxの範囲のコードは提供された情報に起因するエラーを示し、5xxの範囲のコードはサーバエラーを示します。問題を解決するアプローチは、受信した応答コードによって異なります。
REST API:応答コード1
REST API:応答コード2
関連情報