WSAではAPIを利用してレポーティングやトラッキングのデータを取得することができます。この記事ではcurlコマンドを使ったAPIの利用例を紹介します。APIの有効化の方法や機能の詳細につきましては、各バージョンのAPIドキュメントをご参照ください。また、本記事のコマンド例は、以下の環境で動作確認を行なっております。お使いの環境に合わせて適宜書き換えてご利用ください。
クライアント:
AlmaLinux 8.6
WSA:
モデル: S100V
バージョン: 14.5.0
ホスト名: wsa.example.com
HTTPS用API port: 6443
ID: admin
Password: ironport
APIの認証について
APIの認証方法として、Basic認証を使いリクエストの度にID/Passwordの情報を送る方法と、ID/Passwordの代わりにJSON Web Token(JWT)を利用する方法があります。WSAでは、一定期間が経過するとJWTを無効化するため、Basic認証と比較してセキュリティ面で優位です。
JWTは、以下のようにbase64でエンコードしたIDとPasswordをリクエストボディとして、curlコマンドでトークン取得用のエンドポイントにリクエストを送信することで取得することができます。"jwtToken": "eyJhbGciOiJIUzI1.............4Qv6Lq0GNxA" の部分がJWTになります。
$ echo -n admin | base64 # idをbase64でエンコード
YWRtaW4=
$ echo -n ironport | base64 # passwordをbase64でエンコード
aXJvbnBvcnQ=
$ curl -X POST -H 'Content-Type: application/json' -d '{"data":{"userName":"YWRtaW4=", "passphrase":"aXJvbnBvcnQ="}}' https://wsa.example.com:6443/wsa/api/v2.0/login
Response:
{"data": {"userName": "admin", "is2FactorRedirectRequired": "false", "role": "Administrator", "email": [], "jwtToken": "eyJhbGciOiJIUzI1.............4Qv6Lq0GNxA"}}
APIの利用例
JWTを利用する場合
jwtTokenヘッダーを付加し、値には上記で取得したJWTをセットしてリクエストします。APIのエンドポイントや各パラメータ等の詳細は各バージョンのAPIドキュメントをご参照ください。
以下の例では、2022/5/1から2022/6/30までのWebトラッキングのプロキシサービスの情報を取得しています。
$ curl -X GET -H 'jwtToken: eyJhbGciOiJIUzI1.............4Qv6Lq0GNxA' 'https://wsa.example.com:6443/wsa/api/v2.0/web-tracking/web_transaction?startDate=2022-05-01T00:00:00.000Z&endDate=2022-07-01T00:00:00.000Z&filterBy=proxy_services&filterOperator=is&limit=20&offset=0&device_type=wsa&orderBy=timestamp&orderDir=desc&transactionStatus=all&'
Response:
{"meta": {"totalCount": 20}, "data": [{"attributes": {"webCategory": "URL Filtering Bypassed", "contentType": "-", "pageResources": "tunnel://............"Allow", "ampVerdict": "1"}}]}
Basic認証を利用する場合
Basic認証を利用する場合は、jwtTokenヘッダーの代わりに-uオプションでIDとPasswordを指定します。
$ curl -X GET -u 'admin:ironport' 'https://wsa.example.com:6443/wsa/api/v2.0/web-tracking/web_transaction?startDate=2022-05-01T00:00:00.000Z&endDate=2022-07-01T00:00:00.000Z&filterBy=proxy_services&filterOperator=is&limit=20&offset=0&device_type=wsa&orderBy=timestamp&orderDir=desc&transactionStatus=all&'
Response:
{"meta": {"totalCount": 20}, "data": [{"attributes": {"webCategory": "URL Filtering Bypassed", "contentType": "-", "pageResources": "tunnel://............"Allow", "ampVerdict": "1"}}]}