0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM Cloud SCCWP CSPMレポートAPIによる取得

Posted at

はじめに

IBM Cloudは、今までCSPM(Cloud Security Posture Management)機能を提供するSCC(Security and Compliance Center)サービスを提供してまいりましたが、2025年12月15日にサポート終了となります。代わりに、以前からサービス提供しておりましたSCCWP(Security and Compliance Center Workload Protection)が後継サービスとしてCSPM機能を提供します。
SCCではCSPMのスキャンレポートをICOS上に保存する事ができたのですが、SCCWPでは外部へのレポート保存の場合、以下2種類の方法が存在します。

  • SCCWPコンソール上のReports Managerからダウンロードする
  • IBM CloudのAPIにアクセスしてダウンロードする

本記事では、定期的なスケジュール等で自動的にダウンロードする為に後者のAPIによるレポートダウンロード方法についてご説明します。

SCCWPインスタンス作成

SCCWPのインスタンスを作成します。インスタンスの作成自体は非常に簡単です。こちらのドキュメント新しいWorkload Protectionインスタンスに統合するを参照ください。

SCCWPレポートの種類

以下に主要なレポートの種類を示します。本記事では、Policiy Compliance Reportを使用して説明します。

 テンプレート名 分類 レポート内容 推奨用途
Policy Compliance Report Compliance 特定のポリシーとゾーンのコンプライアンスレポート 監査対応、定期チェック
Resource Posture Report Posture リソースのセキュリティポスチャ評価 セキュリティ改善、設定ミス検出
Vulnerability Report Vulnerability 脆弱性の詳細分析とリスク評価 パッチ管理、リスク評価
K8s Workload Vulnerabilities Vulnerability K8sワークロードの脆弱性分析 コンテナセキュリティ

定期的なレポート作成の設定

APIによるレポートのダウンロードに際し、スケジュールベースのアーキテクチャを採用しております。
定期的に作成されるレポートに対して、各種APIを活用してレポートをダウンロードします。基本フローとしては、以下となります。

  1. 定期的にレポートをスケジュールで作成する
  2. 既存のレポートスケジュールを取得する(スケジュール一覧取得)
  3. 特定のスケジュールの実行履歴を取得(ジョブ履歴取得)
  4. 最新のレポートをダウンロードする

上記の2〜4項については、次項の説明でAPIにて処理を行います。
1項、「1.定期的にレポートをスケジュールで作成する」は、UIにて実行します。以下、スケジュール作成の手順についてご説明します。

レポートの設定

作成したSCCWPインスタンスページの<Dashboard>を選択して、SCCWPのダッシュボードを開きます
SCCWP_API_Dashboard.jpg
SCCWPダッシュボードのメニューの<Reporting>から<Report Manager>を選択し、<New Report>を選択し、Report作成を行います。
SCCWP_API_ReportManager.jpg
テンプレートを選択します。今回は、コンプライアンスレポートを選択します。
SCCWP_API_NewReport.png
レポートの詳細情報を入力します。今回は、ポリシーとして「CIS IBM Cloud Foundation Benchmark」を選択します。直ぐにレポートを作成する際は、<Download>を選択します。今回は、APIでダウンロードする為、<Schedule>を選択します。
SCCWP_API_NewReport2.jpg

スケジュールの設定

<Schedule>を選択するとレポート作成にて入力した情報に、詳細スケジュール情報を入力する画面となります。適切な情報を入力下さい。今回は、毎日AM5時にレポートを作成するので、スケジュールネームを「Daily_Policy Compliance Report_Production」と付与しました。
SCCWP_API_Schedule.png
入力すると<Report Manager>上にてスケジュール一覧が表示されます。予定された時間になればレポートが作成されます。SCCWP_API_Schedule2.png

APIによるダウンロード

IBM Cloud APIへのアクセス

IBM CloudのAPI関連情報は、Workload Protection APIを参考にして下さい。
IBM CloudへのAPIアクセスには、GUIDとIAM_TOKENが必要となります。
GUIDは、SCCWPインスタンスページの表示をご確認下さい。
IAM_TOKENは、事前に作成したAPIKEYから、以下のコマンドにて入手します。APIKEYの作成は、IBM Cloud APIKEYの作成(取得)方法を参考にして下さい。

IAM_TOKENの入手
APIKEY=pVsxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
IAM_TOKEN=`curl -sX POST https://iam.cloud.ibm.com/identity/token -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=${APIKEY}" | jq -r '.access_token'`

APIによるスケジュール一覧取得

既存のレポートスケジュールを取得するスケジュール一覧APIは、APIリクエストList Repoort Schedulesを参照下さい。

スケジュール一覧取得
GUID=07axXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
curl -sS https://jp-tok.security-compliance-secure.cloud.ibm.com/api/platform/reporting/v1/schedules -H "Authorization: Bearer ${IAM_TOKEN}" -H "content-type: application/json" -H "IBMInstanceID: ${GUID}" | jq

リンク先のドキュメントでは、2025年12月15日現在、リクエストパスの表記が間違っております(/apiが必要)。上記、コマンド例をご参考下さい。

APIによるジョブ履歴取得

特定のスケジュールの実行履歴を取得するジョブ履歴取得APIは、APIリクエストList Report Job Runsを参照下さい。

ジョブ取得
curl -sS https://jp-tok.security-compliance-secure.cloud.ibm.com/api/platform/reporting/v1/jobs  -H "Authorization: Bearer ${IAM_TOKEN}" -H "content-type: application/json" -H "IBMInstanceID: ${GUID}"| jq   

Phthonスクリプトによるダウンロード

前項では、APIリクエストを説明しましたが、以下にPythonスクリプト例を表示します。レポートスケジュール実行タイミングを考慮して定期的にこのスクリプトを実行する事で、最新のレポートをダウンロードする事が可能です。

download_report.py
import requests
import os
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator 

# 1. 環境変数からAPIトークン及びGUIDを取得
api_key = os.environ.get('APIKEY')
if not api_key:
    raise ValueError("環境変数 APIKEY が設定されていません")
authenticator = IAMAuthenticator(api_key)
api_token = authenticator.token_manager.get_token()
guid = os.environ.get('GUID')
if not guid:
    raise ValueError("環境変数 GUID が設定されていません")
# 2. リージョンとエンドポイントを設定
region_endpoints = {
'jp-tok': 'https://jp-tok.security-compliance-secure.cloud.ibm.com',
'jp-osa': 'https://jp-osa.security-compliance-secure.cloud.ibm.com'
}
region = os.environ.get('SYSDIG_REGION', 'jp-tok')
api_endpoint = region_endpoints[region]
# 3. HTTPヘッダーを設定
headers = {
    'Authorization': f'Bearer {api_token}', 
    'IBMInstanceID': f'{guid}', 
    'Accept': 'application/json',
    'Content-Type': 'application/json',
}
# 4. スケジュール一覧を取得
print("📋 スケジュール一覧を取得中...")
response = requests.get(
f'{api_endpoint}/api/platform/reporting/v1/schedules',
headers=headers
)
response.raise_for_status()
schedules = response.json()
print(f"✅ {len(schedules)}個のスケジュールを取得")
# 5. 最初のスケジュールを選択
schedule = schedules[0]
print(f"\n📊 使用するスケジュール: {schedule['name']}")
# 6. ジョブ履歴を取得
print(f"\n🔍 ジョブ履歴を取得中...")
response = requests.get(
f'{api_endpoint}/api/platform/reporting/v1/jobs',
headers=headers,
params={'scheduleId': schedule['id']}
)
response.raise_for_status()
jobs = response.json()
# 7. 最新の完了ジョブを取得
completed_jobs = [j for j in jobs if j['status'] == 'COMPLETED']
latest_job = completed_jobs[0]
print(f"\n📥 最新のレポート: {latest_job['id']}")
# 8. レポートをダウンロード
file_url = latest_job['filePath']
full_url = f'{api_endpoint}{file_url}'
compression = latest_job.get('compression', 'gzip')
# 拡張子を正しく設定
compression_ext = {'gzip': 'gz', 'zip': 'zip', 'none': ''}
ext = compression_ext.get(compression, compression)
output_path = f"report.pdf.{ext}" if ext else "report.pdf"
print(f"\n📥 ダウンロード中: {output_path}")
response = requests.get(full_url, stream=True)
response.raise_for_status()
with open(output_path, 'wb') as f:
    for chunk in response.iter_content(chunk_size=8192):
        f.write(chunk)
file_size = os.path.getsize(output_path)
print(f"✅ ダウンロード完了! サイズ: {file_size / 1024:.2f} KB")

APIKEY、GUID、SYSDIG_REGIONを環境変数を登録します。SYSDIG_REGIONは、SCCWPリソースのリージョン指定となります。オプションにしておりますので、特に指定しない場合は、東京リージョン指定となります。(大阪リージョンの場合は、SYSDIG _REGION=jp-osaとします)

環境変数設定
export APIKEY=pVsx_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
export GUID=dffeXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

APIKEYからのIAM_TOKEN生成に外部ライブラリibm_cloud_sdk_coreを利用します。未導入の場合はpip等で導入してください。

外部ライブラリインストール確認
sccwp % pip list | grep ibm-cloud 
ibm-cloud-sdk-core          3.24.2

Pythonのスクリプトを実行します。

レポートダウンロード実行
sccwp % python3 download_report.py 
📋 スケジュール一覧を取得中...
✅ 1個のスケジュールを取得

📊 使用するスケジュール: Daily_Policy Compliance Report_Production

🔍 ジョブ履歴を取得中...

📥 最新のレポート: 36qmK1fqq3qnJGqx3AVoSAzESCp

📥 ダウンロード中: report.pdf.zip
✅ ダウンロード完了! サイズ: 6.78 KB

SCCWPのレポートをローカルフォルダにダウンロードしました。

ダウンロードしたファイルの確認
sccwp % ls
download_report.py	report.pdf.zip

まとめ

本記事では、SCCWPの各種レポートをAPIにてダウンロードする方法についてご紹介しました。本記事で紹介したスクリプトを参考に、レポートの保存先をICOSに設定し、レポート作成周期に合わせてスクリプトを定期的に実行する事で永続的にCSPMスキャンレポートを保存する事が可能となります。
今回は、シンプルにレポートを取得する方法について説明しましたが、APIドキュメント等を参照し、又必要によりサンプルスクリプトを編集し、皆様の環境に最適な変更を加えて活用頂ければと思います。

参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?