Python スクリプトを使用して、すべての Resource Directory (RD) メンバーアカウントに対し、Cloud Security Center の緊急脆弱性スキャンを一括でトリガーします。このスクリプトは ModifyEmgVulSubmit API を呼び出し、RD を通じてアカウントを自動検出するため、手動でのアカウントリストの管理が不要になります。
背景情報
あなたの組織では、RD の配下で 150 のメンバーアカウントを管理しています。 polkit pkexec にローカル権限昇格の脆弱性 (CVE-2021-4034) が発見され、セキュリティチームは直ちにすべてのアカウントにわたる影響範囲 (ブラスト半径) を評価する必要があります。
手動でのアプローチには、いくつかの問題があります。
手動対応の遅さ: 150 のアカウントに 1 つずつログインするには数時間かかり、対応が完了する前に封じ込めの機会を逃す可能性があります。
カバレッジのギャップ: 手作業でメンテナンスされているアカウントリストでは、新しく追加された RD メンバーを見逃しがちです。
自動化の落とし穴: API スロットリングなしで並行スクリプトを実行すると、レート制限に達し、一括処理が失敗する原因となります。
可視性の断片化: スキャン結果は個々のアカウントに分散し、組織全体の脆弱性ステータスを単一ペインのビューで確認できません。
ソリューション概要
ローカルマシン上の Python スクリプトが RD からすべてのメンバーアカウントを取得し、Cloud Security Center API を通じて緊急脆弱性スキャンタスクを送信します。スキャン完了後、Agentic SOC ダッシュボードで結果を確認します。
このスクリプトは RAM ユーザーのアクセスキーで認証し、DescribeEmgVulItem を呼び出して脆弱性名を検証します。その後、RD の ListAccounts API を使用してすべてのメンバーアカウントを検出し、各アカウントに対して ModifyEmgVulSubmit を呼び出してスキャンタスクを送信します。結果は Agentic SOC を経由して SLS に集約され、集中監視が可能になります。
操作手順
ステップ 1: 環境と権限の設定
以下の前提条件を確認します。
エンタープライズ検証済みで管理者権限を持つ Alibaba Cloud アカウント。
すべての RD メンバーアカウントで Cloud Security Center (Advanced edition 以上) が有効化されており、Agentic SOC のログ集約が設定済みであること (アクセス設定)。
ローカルに Python 3.6 以降がインストール済みであること。
RAM ユーザーを作成 (例:
VulnScanner) し、以下の権限を付与します。AliyunYundunSASFullAccess(必須): Cloud Security Center のスキャン API へのアクセスを許可します。このトピックでは、迅速な検証のためにシステムポリシーを使用します。本番環境では、ModifyEmgVulSubmit と DescribeEmgVulItem の権限のみを付与するカスタムポリシーを作成してください。AliyunResourceDirectoryReadOnlyAccess(推奨): すべての RD メンバーアカウントの自動検出を有効にします。これがない場合、設定ファイルにアカウント ID を手動でリストアップする必要があります。
OpenAPI アクセスを有効にし、アクセスキーを保存します。これはステップ 3: スキャンの実行で必要になります。
重要スクリプトの実行に、ご自身の Alibaba Cloud アカウント (ルートアカウント) のアクセスキーを絶対に使用しないでください。常に上記で作成した専用の RAM ユーザーのアクセスキーを使用し、認証情報の漏洩リスクを最小限に抑えるために定期的にローテーションしてください。
ステップ 2: スクリプトのダウンロードとスキャンパラメータの設定
以下の 3 つのファイルを作業ディレクトリにダウンロードします。
scan_manager.py: メインスクリプト。アカウントを反復処理し、それぞれに対してスキャン API を呼び出します。config.ini: 設定ファイル。サービスエンドポイント、対象の脆弱性、スキャンパラメータを指定します。requirements.txt: 必要な Python ライブラリ。
config.iniを開き、以下のパラメータを設定します。endpoint: アセットが所在するリージョンの Cloud Security Center サービスエンドポイント。スクリプトは 1 回の実行で 1 つのリージョンを対象とします。アセットが複数のリージョンにまたがる場合は、リージョンごとに個別に実行してください。scan_targets: スキャンする緊急脆弱性名をカンマ区切りで指定します。コンソールの [Urgent Vulnerability] ページから名前を直接コピーしてください。起動時に、スクリプトは DescribeEmgVulItem を呼び出して表示名を内部 API 名に解決します。max_qps: QPS での最大 API リクエストレート。デフォルトは 6 で、ほとんどのシナリオで十分です。アカウント数が多く、より高いレートが必要な場合は、Quota Center でクォータの引き上げを申請してください。member_uids: スキャン対象のメンバーアカウント ID をカンマ区切りで指定します。RAM ユーザーが RD の読み取り権限を持っている場合は、空のままにしてください。スクリプトがすべてのアカウントを自動的に検出します。
ステップ 3: スキャンの実行
(ステップ 1 で作成した) RAM ユーザーのアクセスキーを環境変数としてエクスポートします。
export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESSKEY_ID" export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESSKEY_SECRET"依存関係をインストールします。
pip3 install -r requirements.txtスキャンスクリプトを実行します。
python3 scan_manager.pyスクリプトは進行状況をリアルタイムで出力します。出力例:
Querying the list of emergency vulnerabilities... ✅ 'polkit pkexec Local Privilege Escalation Vulnerability (CVE-2021-4034)' → emg_cve-2021-4034:EMG:AVD-2021-4034 ✅ Successfully matched 1 vulnerability ℹ️ 'member_uids' is empty, attempting to auto-discover member accounts from Resource Directory... ✅ Successfully discovered 150 member accounts from Resource Directory. Starting to process 1 vulnerability × 150 accounts = 150 scan tasks QPS is throttled at 6. Estimated time to completion: 25.0 seconds ✅ [1/150] Success: Vulnerability='polkit pkexec Local Privilege Escalation Vulnerability (CVE-2021-4034)', Account ID=198XXXXXXXXXXX13 (Current avg QPS: 5.8) ✅ [2/150] Success: Vulnerability='polkit pkexec Local Privilege Escalation Vulnerability (CVE-2021-4034)', Account ID=142XXXXXXXXXXX84 (Current avg QPS: 5.9) ✅ [3/150] Success: Vulnerability='polkit pkexec Local Privilege Escalation Vulnerability (CVE-2021-4034)', Account ID=188XXXXXXXXXXX97 (Current avg QPS: 5.7) ... ✅ [150/150] Success: Vulnerability='polkit pkexec Local Privilege Escalation Vulnerability (CVE-2021-4034)', Account ID=156XXXXXXXXXXX62 (Current avg QPS: 5.9) ================================================== Processing complete! Total time: 25.8 seconds Success: 150, Failures: 0, Total: 150 Actual avg QPS: 5.8 (Target QPS: 6) ==================================================
ステップ 4: スキャン結果の表示
RAM ユーザーとして Cloud Security Center コンソール にログインします。左側メニューで、[Agentic SOC] > Log を選択します。Logstore リストから Standardized Log > [Vulnerability Activity] を選択します。スキャンを実行した時間範囲を設定し、[Search & Analyze] をクリックします。

緊急脆弱性はスキャンのみをサポートしており、自動修復はサポートしていません。これらの脆弱性はサーバーにインストールされたソフトウェアで検出されます。脆弱性の詳細に記載されている修復アドバイスに従って、影響を受けるソフトウェアを手動でアップグレードまたは再設定してください。
本番環境向けのベストプラクティス
定期的なスキャンの設定
脆弱性情報が公開された後にのみスクリプトを実行するのではなく、定期的に実行するようにスケジュールすることで、新しい脆弱性を自動的に検出します。
crontab ジョブまたは Windows タスクスケジューラを使用して、スクリプトを毎日実行します。
専用サーバーを維持する必要がないように、スクリプトを時間ベースのトリガーを持つ Function Compute (FC) 関数としてデプロイします。
アクセスキー管理の強化
定期的なローテーション: キーが侵害された場合の影響を限定するために、RAM ユーザーのアクセスキーを 90 日ごとにローテーションします。
インスタンス RAM ロールの使用: スクリプトを ECS インスタンスで実行する場合は、環境変数にアクセスキーをエクスポートする代わりに、インスタンス RAM ロールを割り当てます。
ソース IP の制限: RAM ポリシーに IP 条件を追加して、API コールが運用ネットワークからのみ受け入れられるようにします。
よくある質問
スキャンは正常に送信されたが、Agentic SOC の脆弱性ログにレコードが表示されない
ログ収集が有効になっていない: Agentic SOC で、Log ページの [Vulnerability Activity] 収集トグルが有効になっていることを確認してください。
スキャンがまだ進行中: ModifyEmgVulSubmit はスキャンタスクを送信するだけで、実際のスキャンは非同期で実行され、アセット数によっては数分から数十分かかることがあります。
脆弱性が検出されなかった: 脆弱性ログには、検出された脆弱性のみが記録されます。メンバーアカウントのアセットが影響を受けていない場合、エントリは生成されません。確認するには、メンバーアカウントにログインし、[Risk Governance] > [Vulnerabilities] > [Urgent Vulnerability] を確認してください。
マルチアカウントログが集約されていない: メンバーアカウントのログは、Agentic SOC を通じて管理アカウントに集約される必要があります。すべてのメンバーアカウントで Cloud Security Center が有効になっており、集中型マルチアカウントオンボーディングが完了していることを確認してください。
"No matching emergency vulnerability found" というエラーで脆弱性名の解決が失敗する
config.ini の scan_targets に記載されている名前が、Cloud Security Center コンソールの [Urgent Vulnerability] ページと、括弧やスペースを含めて完全に一致していることを確認してください。エラーを避けるために、コンソールから直接名前をコピーしてください。
名前が正しいにもかかわらず解決に失敗する場合、その脆弱性は緊急対応期間を過ぎており、DescribeEmgVulItem を通じて利用できなくなっている可能性があります。