概要
このドキュメントでは、アプリケーションプログラミングインターフェイス(API)管理者がネットワーク、ポート、およびURLオブジェクトをFirepower Management Center(FMC)に一括でプッシュする方法について説明します。
前提条件
要件
次の項目に関する知識があることが推奨されます。
使用するコンポーネント
- REST APIが有効なREST API(バージョン6.1以降)をサポートするFirepower Management Center
- Pythonを使用したREST APIインタラクション。
制限
- FMCでは、オブジェクトの名前が64文字を超えることはできません。
- オブジェクト名の先頭にスペースを使用し、末尾にセミコロンを使用することはできません。
- ペイロードには、1回の一括プッシュで1,000を超えるエントリを含めることはできません。
- 1回の一括プッシュでは、ペイロードサイズを2 MBを超えることはできません。
背景説明
ネットワークマネージャがネットワークの設定と管理に使用できる軽量でプログラム可能なアプローチにより、REST APIの普及が進んでいます。FMCは、任意のRESTクライアントを使用し、組み込みのAPIエクスプローラを使用して、設定と管理をサポートします。
このドキュメントの例では、CSVファイルを入力として取り込み、REST APIインターフェイス経由でオブジェクトをFMCにプッシュします。このドキュメントでは、ホストネットワークの一括プッシュのみを扱い、他のオブジェクトに対して同様のロジックを拡張できます。サンプルコードは、URLおよびPortオブジェクトのドキュメントに添付されます。
図に示すように、使用されるネットワークホストのPOSTのAPIリファレンスを次に示します。
設定
ステップ1:REST APIを有効にし、認証トークンを生成します。設定手順と例の詳細については、『FMCでの認証トークンの生成』を参照してください。
import requests
import csv
import json
from requests.auth import HTTPBasicAuth
from getpass import getpass
address = input("Enter IP Address of the FMC: ")
username = input ("Enter Username: ")
password = getpass("Enter Password: ")
api_uri = "/api/fmc_platform/v1/auth/generatetoken"
url = "https://" + address + api_uri
response = requests.request("POST", url, verify=False, auth=HTTPBasicAuth(username, password))
accesstoken = response.headers["X-auth-access-token"]
refreshtoken = response.headers["X-auth-refresh-token"]
DOMAIN_UUID = response.headers["DOMAIN_UUID"]
ステップ2:提供されたCSVファイルをディクショナリに変換し、要求のJSONペイロードとして使用します。各オブジェクトタイプのサンプルCSVファイルがドキュメントに添付されます。
csvFilePath = input("Please enter the CSV Filepath (For eg. : path/to/file/objects.csv) :")
host = []
with open(csvFilePath, encoding='utf-8-sig') as csvf:
csvReader = csv.DictReader(csvf)
for rows in csvReader:
if rows['type'] == "Host":
host.append(rows)
host_payload = json.dumps(host)
この段階のhost_payloadは、次の図のように表示されます。
[{
"name": "Host-1",
"description": "Host-1",
"type": "Host",
"value": "10.10.10.10"
},
{
"name": "Host-2",
"description": "Host-2",
"type": "Host",
"value": "10.10.10.1"
},
{
"name": "Host-3",
"description": "Host-3",
"type": "Host",
"value": "10.10.10.2"
}
]
ステップ3:前のステップで受信した入力から要求を作成し、ペイロードが空でない場合は要求を送信します。
host_api_uri = "/api/fmc_config/v1/domain/" + DOMAIN_UUID + "/object/hosts?bulk =true"
host_url = "https://" + address + host_api_uri
headers = { 'Content-Type': 'application/json', 'x-auth-access-token': accesstoken }
if host != []:
response = requests.request("POST", host_url, headers=headers, data = host_payload, verify = False)
else :
print("Please Validate that the CSV file provided is correct or at correct location")
確認
- 次に示すように、要求が成功したか失敗したかを確認するために、応答のステータスコードを印刷します。
if response.status_code == 201 or response.status_code == 202:
print("Host Objects successfully pushed")
else:
print("Host Object creation failed")
- FMCにログイン図に示すように、[Object] > [Object Management] > [Network]に移動し、ホストオブジェクトを確認します。
トラブルシュート
- RESTクライアントを使用すると、自己署名証明書が原因でSSL証明書の問題に関連するエラーが表示されることがあります。この検証は、使用しているクライアントに応じてオフにできます。
- FMC REST API認証トークンは30分間有効で、最大3回更新できます。
- 要求に関するエラーは、応答本文から抽出できる。これは、トラブルシューティングに役立つログファイルとして収集できます。
logfile = "requestlog.txt"
log = open(logfile,"w+")
log.write(response.text)
log.close
- すべてのREST要求は、FMC上のこれらの2つのログファイルに記録されます。URLを検索します(例:../object/hosts)を使用して正しい操作を行います(GET操作のエラーを探している場合は、ログがGET ...のように始まることを確認します。オブジェクト/ホスト)
tail -f /var/opt/CSCOpx/MDC/tomcat/logs/stdout.logs
tail -f /var/opt/CSCOpx/MDC/log/operation/usmsharedsvcs.log