今回は 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株式会社
ご興味のある方は是非、お気軽にお問い合わせください。
