今回は Prisma Cloud ではなく、Cortex Cloud の API を使用してみようと思います。
Cortex Cloud は2025年度第3四半期後半に一般提供される予定のサービスです。
本記事では、Cortex Cloud のデモ環境でAPIを実行したときの手順を解説します。なお、デモ環境のためコンソール画面のスクリーンショットをお見せできないことをご了承ください。
本記事は2025年6月時点の記事になりますので、リリース後変更されている可能性があります。
API URLについて
Cortex Cloudでは、以下フォーマットのURLに対して、リクエストすることでREST APIを使用できます。
https://api-{fqdn}/public_api/v1/{name of api}/{name of call}/
URLのFQDN部分は契約しているお客様ごとに異なり、以下手順でURLを取得できます。
「Settings」>「Configurations」>「API keys」に移動します。
右上の「Copy API URL」が取得できるのでこれをコピーしておきます。
Prisma CloudのAPI URLはリージョンごとにわかれていましたが、Cortex CloudのAPI URLは契約しているお客様事に異なっていて、そこはPrisma Cloudとの違いだなと思いました。
APIキーの発行
APIのキーの発行を行います。
APIキー発行手順(公式ドキュメント)
- Settings > Configurations > Integrations > API Keysに移動します
- 右上の「New Key」を押下します
- セキュリティレベル項目を選択します。
今回は「Standard」を選択しました。 - Roleを選択します。
今回は「Instance Administrator」を選択しました。 - Commentは任意の文字を入れてください。
- Enable Expiration DateはいつまでにこのAPI keyが使用できなくなるかの期限を設定できます。
- 各設定が完了したら「Generate」を押下して、その時のAPI Key IDをコピーしておきます。
作成が完了するとAPI Keyの一覧に追加されていると思います。
API keysテーブルの作成した行の「ID」列の値もコピーしておきます。
セキュリティレベルは2種類あり、StandardとAdvancedがあります。
セキュリティレベル | 説明 |
Standard | APIキーをそのまま使用できます。 Curlのリクエストに適しています。 |
Advanced | nonceとタイムスタンプを使用してハッシュ化する必要があります。 独自のスクリプトに適しており、リプレイ攻撃を防ぐことが目的です。 |
Prisma Cloudと違い、セキュリティレベルの設定があるところが、Cortex CloudとPrisma Cloudの違いかなと思いました。
また、Prisma Cloudでは一時的なAPIキーを発行して、そのAPIキーでREST APIを利用していましたが、APIキーを発行するREST APIが消えてそのままリクエストできるように変更されていました。
実際にAPIを使用してみた
取得したAPI URLと、APIキーを利用して、実際にAPIを利用してみます。
今回は接続しているプロバイダー(インスタンス)情報を取得するAPIとPythonのrequestsライブラリを使用して実際にプログラムを作成し、インスタンス情報を取得します。
事前に必要な値
現在コピーしているのが以下3つです。
・API URL
・API key ID
・APIkeyテーブルの「ID」列の値
コードの作成
api_key_idの変数にはAPIkeyテーブルの「ID」列の値を入れます。
api_keyの変数にはAPI key IDを入力します。
※API key関連は*でマスクしています。
urlには「https://api-{fqdn}」を先ほどコピーしたAPI URLに置き換えます。
api_key_id = "*" api_key = "***************************" url = "https://api-{fqdn}/public_api/v1/cloud_onboarding/get_instances"
ペイロードを作成します。
今回はGCPのインスタンス情報を取得するのでFilterのSEARCH_VALUEをGCPに変更しています。
payload = { "request_data" : { "filter_data" : { "sort" : [ { "FIELD" : "STATUS", "ORDER" : "DESC" } ], "paging" : { "from" : 0, "to" : 50 }, "filter" : { "AND" : [ { "SEARCH_FIELD" : "CLOUD_PROVIDER", "SEARCH_TYPE" : "EQ", "SEARCH_VALUE" : "GCP" } ] } } }
ヘッダーは以下の様に作成しました。
x-xdr-auth-idには先ほど作成したAPIkeyテーブルの「ID」列の値を格納した変数を入力します。
Authorizationには先ほど作成したAPI key IDを格納した変数を入力します。
headers = { 'Content-Type': "application/json", "x-xdr-auth-id": str(api_key_id), "Authorization": api_key }
最後にリクエストし、返ってきた値を標準出力します。
response = requests.post(url, json=payload, headers=headers) print(response.text)
コードの全体像
コードの全体像は以下の通りです。
import requests api_key_id = "5" api_key = "*************************************" url = "https://api-<company>.paloaltonetworks.com/public_api/v1/cloud_onboarding/get_instances" payload = { "request_data" : { "filter_data" : { "sort" : [ { "FIELD" : "STATUS", "ORDER" : "DESC" } ], "paging" : { "from" : 0, "to" : 50 }, "filter" : { "AND" : [ { "SEARCH_FIELD" : "CLOUD_PROVIDER", "SEARCH_TYPE" : "EQ", "SEARCH_VALUE" : "GCP" } ] } } } } headers = { 'Content-Type': "application/json", "x-xdr-auth-id": str(api_key_id), "Authorization": api_key } response = requests.post(url, json=payload, headers=headers) print(response.text)
実行結果
返ってきた値は以下です。
GCPインスタンス情報が確認できます。
載せられない情報は*でマスクしています。
{ "reply": { "DATA": [ { "instance_id": "**********************", "cloud_provider": "GCP", "instance_name": "**********************", "account_name": "**********************", "accounts": 1, "scope": "ACCOUNT", "scan_mode": "MANAGED", "creation_time": 1748334058291, "custom_resources_tags": "[{\"key\": \"managed_by\", \"value\": \"paloaltonetworks\"}]", "provisioning_method": "TF", "additional_capabilities": "{\"xsiam_analytics\": true, \"registry_scanning\": true, \"serverless_scanning\": true, \"registry_scanning_options\": {\"type\": \"ALL\"}, \"data_security_posture_management\": false}", "is_pending_changes": 0, "status": "WARNING", "outpost_id": "**********************" }, { "instance_id": "**********************", "cloud_provider": "GCP", "instance_name": "", "account_name": null, "accounts": null, "scope": "ACCOUNT", "scan_mode": "MANAGED", "creation_time": 1748333605143, "custom_resources_tags": "[{\"key\": \"managed_by\", \"value\": \"paloaltonetworks\"}]", "provisioning_method": null, "additional_capabilities": "{\"xsiam_analytics\": true, \"registry_scanning\": true, \"serverless_scanning\": true, \"registry_scanning_options\": {\"type\": \"ALL\"}, \"data_security_posture_management\": false}", "is_pending_changes": null, "status": "PENDING", "outpost_id": "**********************" } ], "FILTER_COUNT": 2, "TOTAL_COUNT": 13 } }
さいごに
実際に触ってみるとPrisma CloudとAPIキーの発行や使用方法が少し変わっていました。
APIの数が多くないので、一般提供時にはもっと数が増えていそうです。
2025年度第3四半期後半に一般提供される予定ということで、楽しみです。
当社では、複数クラウド環境の設定状況を自動でチェックし、設定ミスやコンプライアンス違反、異常行動などのリスクを診断するCSPMソリューションを販売しております。
マルチクラウド設定診断サービス with CSPM| SCSK株式会社
ご興味のある方は是非、お気軽にお問い合わせください。