プレイブックは、セキュリティイベントを特定、分類、評価、応答するために使用される事前定義された論理フローまたはスクリプトです。これには、特定の操作を実行し、セキュリティ脅威が存在するかどうかを判断し、それらに応答して軽減する方法を決定するためのステップのシリーズが含まれます。さまざまなセキュリティニーズを満たすために、異なるセキュリティイベントのタイプとレベルに合わせてプレイブックをカスタマイズおよび構成できます。
セキュリティ運用チームは、アラートに応答する際に、同じ脅威のタイプをトリアージし、同じ封じ込めステップを実行し、複数のツール間で調整するなど、反復的で時間のかかる手作業に直面することがよくあります。応答のオーケストレーションにプレイブックを使用すると、セキュリティ応答の効率と一貫性を向上させることができます。
以下のセクションでは、Security Center でカスタムプレイブックを作成、構成、デバッグ、公開する方法について説明します。
基本概念
プレイブックの種類
Security Center には、次の2種類のプレイブックがあります。
事前定義プレイブック: 一般的なセキュリティ脅威のシナリオをカバーする組み込みのプレイブックです。構成なしで直接使用できます。事前定義プレイブックをご利用の環境に適応させるには、コピーしてカスタムプレイブックを作成し、必要に応じて変更します。
カスタムプレイブック: 複雑または高度に専門化されたシナリオの場合、ビジュアルフローエディターを使用して独自のプレイブックを構築します。コンポーネントをドラッグ、接続、構成して、自動化されたセキュリティ応答ロジックを実装します。
プレイブックパラメーター
入力パラメーターは、プレイブックをトリガーするものを定義します。異なるトリガー条件を選択すると、デバッグパネルのパラメーターの例がそれに応じて更新されます。
出力パラメーターは、プレイブックが実行後に生成するフィールドを定義します。同じプレイブック内のダウンストリームノードは、これらのフィールドを参照できます。他のプレイブックも、setOutput action を構文 ${event.parameter_path} とともに使用して、これらにアクセスできます。
カスタム出力パラメーターに加えて、システムは組み込みのシステムパラメーターを提供します。詳細については、「プレイブックのシステムパラメーター」をご参照ください。
フローエディター
フローエディターは、プレイブックフローの作成、変更、デバッグ、公開を行うためのビジュアルキャンバスです。

| エリア | 説明 |
|---|---|
| 1 — メニューバー | 保存:現在の状態を下書きとして保存します。保存せずに終了すると、保存されていない変更はすべて失われます。公開バージョンからロールバックすると下書きが上書きされる可能性があるため、プレイブックを永続的に保存するには [公開] をクリックしてください。公開:プレイブックを公式の公開バージョンに変換します。公開されたプレイブックのみが 自動応答ルール および イベント処理 で使用できます。デバッグ:ページ下部のデバッグパネルを開きます。ブレークポイントデバッグ:キャンバスでコンポーネントを選択し、 |
| 2 — フローノード | 外部サービスから独立した、すべてのフローの構造的なバックボーンです。各フローには、開始ノードが 1 つだけ必要で、複数の終了ノードを持つことができます。詳細については、「システムコンポーネント」をご参照ください。 |
| 3 — コンポーネントとプレイブック | 基本コンポーネント:データベースへの書き込み、Simple Log Service (SLS) へのデータ送信、Python 3 スクリプトの実行など、汎用の IT コンポーネントです。Python 3 スクリプトは、0.25 vCPU と 256 MB のメモリを備えた組み込みの Python 3.9 コンテナで実行されます。スクリプトの最大実行時間は 600 秒です。セキュリティコンポーネント:Server Guard (プロセスの終了) や Cloud Firewall (アクセスのブロック) など、セキュリティ脅威を直接処理するコンポーネントです。クラウド製品コンポーネント:Alibaba Cloud 製品の OpenAPI オペレーションを呼び出し、脅威インテリジェンスをクエリするコンポーネントです。「クラウド製品コンポーネント (OpenAPI)」および「AliyunThreatIntelligence コンポーネント」をご参照ください。サードパーティコンポーネント:Tencent Cloud や Huawei Cloud の Web Application Firewall (WAF) など、Alibaba Cloud 以外の製品の OpenAPI オペレーションを呼び出すコンポーネントです。「サードパーティコンポーネント (OpenAPI)」をご参照ください。プレイブックパネル:現在のアカウントで利用可能なすべてのカスタムプレイブックと事前定義済みプレイブックを一覧表示します。 |
| 4 — キャンバス | ドラッグアンドドロップ式のワークスペースです。ここにコンポーネントをドラッグし、接続して応答ロジックを定義します。開始ノード ( ) をダブルクリックして、その基本情報を構成します。 |
| 5 — デバッグエリア | [デバッグ] または右下隅の |
カスタムプレイブックの設定
構築を開始する前に、次の質問を検討してください。これらに回答することで、より明確で保守しやすいフローを設計できます。
どのセキュリティイベントまたはアラートがこのプレイブックをトリガーする必要がありますか?
プレイブックはどのような操作を実行する必要がありますか?条件付きのステップはありますか?
インシデントはいつ解決されたと見なされますか?
このプレイブックは自動的にトリガーされますか、手動でトリガーされますか、それともその両方ですか?
次の図は、エンドツーエンドの構成フローを示しています。
前提条件
開始する前に、次の点を確認してください。
Security Center コンソールへのアクセス
SOAR モジュールでプレイブックを作成および公開するために必要な権限
ステップ1: プレイブックの作成
Security Center コンソールにログインします。Security Center コンソールにログインします。
左側のナビゲーションウィンドウで、[Agentic SOC] > [SOAR] を選択します。左上隅で、保護するアセットが配置されているリージョンとして、[中国本土] または [中国本土以外] を選択します。
[カスタムプレイブック] タブで、[プレイブックの作成] をクリックします。
[プレイブックの作成] パネルで、[プレイブック名] と [プレイブックの説明] を入力し、[OK] をクリックします。
あるいは、[事前定義済みプレイブック] タブに移動し、適切なプレイブックを見つけて、操作列の [コピー] をクリックして、出発点として使用します。
ステップ2: フローの構成
プレイブックを作成すると、自動的にフロー構成ページにリダイレクトされます。後でこのページに戻るには、カスタムプレイブック リストの [アクション] 列にある [編集] をクリックします。
入力パラメーターと出力パラメーターの設定
[Playbook 編集] ページで、右上隅の [設定] をクリックします。
構成パネルで、[入力および出力設定] をクリックし、入力および出力パラメーターを定義します。パラメーターの種類と構文については、「Playbook パラメーター」をご参照ください。
各フローには開始ノードが1つだけ必要であり、複数の終了ノードを持つことができます。
応答フローのオーケストレーション
キャンバスは、コア応答ロジックを構築する場所です。コンポーネントを左のパネルからドラッグし、キャンバスにドロップし、実行する順序で接続します。
開始ノードはeventをノード名として使用します。他のコンポーネントにeventという名前を付けないでください。
次のステップでは、DataFormat コンポーネントを例として使用します。
コンポーネントアクションの選択: [基本コンポーネント] セクションで、DataFormat コンポーネントを探します。
joindataやconvertToJSONなどのアクションを選択し、キャンバスにドラッグします。コンポーネントのパラメーター設定: キャンバス上のコンポーネントをクリックして、その設定パネルを開きます。 または、[基本情報] セクションで
をクリックしてパラメーター設定を開きます。 詳細については、「DataFormat コンポーネント」をご参照ください。 パラメーターは、定数、変数値、システムパラメーター、および式をサポートしています。 入力ボックスのドロップダウンリストからノードパラメーターを選択すると、対応する構文が自動的に生成されます。 パラメーターリファレンスの詳細については、「コンポーネントパラメーターとノード実行フロー」をご参照ください。
すべてのコンポーネントを設定した後、メニューバーの[保存]をクリックします。
保存せずに終了すると、保存されていないすべての変更が永続的に失われます。
ステップ3: フローのデバッグ
公開する前に、デバッグセッションを実行して、フローが正しく実行されることを確認します。
ブレークポイントの設定 (オプション)
ブレークポイントを使用すると、複雑なフローの中間結果を検査できます。フローはブレークポイントが設定されたノードまで実行され (ノード自体は実行されません)、その後一時停止します。
ノード上の
アイコンをクリックして、ブレークポイントとして設定します。

複数のブランチを持つフローでは、システムはブレークポイントを含むブランチのみをデバッグします。
同じブランチに複数のブレークポイントが設定されている場合、最後のブレークポイントのみが有効になります。
デバッグセッションの実行
左上隅にある
デバッグボタンをクリックして [デバッグパラメーター] パネルを開き、[デバッグ] をクリックします。パラメーターの例を読み込むには、例 をクリックし、次に [サンプル入力の表示] ページで [サンプルを読み込む] をクリックします。
必要に応じてパラメーターを変更し、次に [OK] をクリックします。
デバッグパラメーターは、プレイブック用に構成された入力パラメーターのタイプによって異なります。パラメーターをより直感的に編集するには、ビジュアルモードを使用します。
結果の確認
いずれかのノード上の
アイコンをクリックするか、デバッグエリアの [実行ログ] をクリックすると、各ノードの詳細な入力、出力、および実行ステータスを表示できます。

デバッグ結果には、次の出力パラメーターが表示されます。
| パラメーター | 説明 |
|---|---|
datalist | 出力データのプレビューです。最大 3 件が表示されます。完全データを表示するには、[完全な出力結果] タブに移動してください。 |
total_data_successful | 正常に処理されたデータのボリューム。 |
total_data | 処理されたデータの総ボリューム。 |
total_exe_successful | 操作が正常に実行された回数。 |
total_exe | 操作が実行された総回数。 |
total_data_with_dup | 重複排除後のデータのボリューム。正常に処理されたデータからカウントされます。 |
ステップ4: 公開
メニューバーの [公開] をクリックすると、プレイブックが公開バージョンに変換され、応答ルールやイベント処理で使用できるようになります。
プレイブックの使用
公開済みプレイブックのみが、自動応答ルールおよびセキュリティイベント処理に使用できます。
プレイブックがトリガーされた後、生成された応答ポリシーとタスクを応答センターで表示するか、プレイブックの詳細ページで実行レコードを表示します。
Security Centerは、プレイブックを実行する3つの方法をサポートしています。
自動応答ルールにバインド: 特定のセキュリティアラートへの応答を自動化します。詳細については、「自動応答ルール」をご参照ください。
イベント処理中の手動トリガー: 手動分析を必要とする複雑なセキュリティ イベントの場合、イベント処理センターからプレイブックをトリガーして、応答タスクを支援します。詳細については、「[プレイブックの実行]」セクションをご参照ください。Agentic SOC セキュリティ イベントの評価および処理。
直接実行: [SOAR] ページで、[定義済みプレイブック] タブまたは [カスタムプレイブック] タブで対象のプレイブックを見つけ、操作列の [実行] をクリックしてフローを 1 回実行します。
プレイブックの管理
プレイブックのロールバック
公開済みプレイブックを以前のバージョンに復元するには、
[カスタムプレイブック] タブでプレイブックを見つけ、操作列の [詳細] をクリックします。
[基本情報] タブで、公開履歴セクションを見つけ、利用可能なバージョンを表示します。
(オプション)バージョンの横にある [表示] をクリックして、それを開き、[入力パラメーター(実行)] エリアでテストを実行します。
復元したいバージョンの [編集用にロールバック] または [ロールバックして公開] をクリックします:
[編集にロールバック]: 現在のドラフトを選択したバージョンに置き換えます。プレイブックは公開されません。
[ロールバックして公開]: 現在のドラフトを選択したバージョンに置き換え、直ちに公開します。
公開済みバージョンからロールバックすると、保存されたドラフトバージョンが上書きされる可能性があります。ロールバックする前に、バージョン間のフローの違いを慎重に評価してください。
プレイブックのインポート
JSON ファイルのみがサポートされています。
フローエディターのメニューバーで、[詳細] をクリックし、次に [JSON のインポート] を選択します。
インポートページで、JSONファイルをアップロードし、[OK] をクリックします。

実行レコードの表示
プレイブックリストで、操作列のプレイブック ID または[詳細]をクリックします。[履歴実行レコード] タブで、そのプレイブックの基本的な実行レコードを表示できます。
プレイブックがセキュリティイベントまたはアラートの処理に使用されるたびに、システムは自動的に実行レコードを作成します。
プレイブックの名前変更
プレイブックリストで、「操作」列のプレイブック ID または[詳細]をクリックします。[基本情報] タブで、プレイブック名の横にある[編集]をクリックします。
事前定義プレイブックの名前は変更できません。
プレイブック名は一意である必要があります。
トラブルシューティング
エラーコードは、プレイブックのオーケストレーションによるエラーと、コンポーネント実行によるエラーの2つのカテゴリに分類されます。
オーケストレーションエラー
| エラーメッセージ | 原因 | 修正 |
|---|---|---|
| ノード [%s] のフィルター条件が無効です。ノード [%s] のデータリストからのデータを含める必要があります。 | フィルターノード条件がターゲットノードのデータを参照していません。 | フィルターするノードのデータ変数と、対応する条件を含めます。 |
| 開始ノードにダウンストリーム構成がありません。 | 開始ノードの後にノードが接続されていません。 | 開始ノードに少なくとも1つのダウンストリームノードを接続します。 |
| ノード [nodeName] にダウンストリームノードが定義されていません。 | 非終端ノードに出力接続がありません。 | 指定されたノードにダウンストリームノードを接続します。 |
| ノード [node] のリソースが存在しません。 | 構成されたリソースインスタンスが存在しません。 | 既存のリソースインスタンスを選択します。 |
| ノード [node] のリソースは必須ですが、構成されていません。 | ノードにリソースインスタンスが構成されていません。 | リソースインスタンスを選択して構成します。 |
| 複数のノードが同じ名前 [nodeName] を持っています。 | 2つ以上のノードが同じ名前を共有しています。 | 各名前が一意になるようにノードの名前を変更します。 |
ノード [node1] で定義されたパス [path] は無効です。子フローは ${<subTask>.curLoop} および ${<subTask>.curIndex} フォーマットのみをサポートしています。 | 子フローの変数がサポートされていないフォーマットを使用しています。 | 変数を ${<subTask>.curLoop} または ${<subTask>.curIndex} を使用するように更新します。 |
| ノード [node1] で定義されたパス [node2.path] は無効です。ノード [node2] が存在しません。 | 変数が、削除されたか、作成されなかったノードを参照しています。 | 変数を再構成するか、不足しているノードを追加します。 |
| ノード [node1] で定義されたパス [node2.path] は無効です。ノード [node2] は現在のノードの先祖ノードではありません。 | 変数が、現在のノードのアップストリームではないノードを参照しています。 | 先祖ノードからの変数のみを参照します。 |
コンポーネント実行エラー
| エラーコード | エラーメッセージ | 修正 |
|---|---|---|
sophon.Internal.Error | 内部システムエラーが発生しました。 | パラメーターとリソース構成を確認してください。問題が解決しない場合は、サポートに連絡してください。 |
component.Internal.ParamError | コンポーネントパラメーターエラー。 | コンポーネント用に構成されたすべてのパラメーターが正しいことを確認してください。 |
component.Abnormal.InvokeError | コンポーネント実行エラー。 | 詳細についてはエラーメッセージを確認してください。必要な場合はサポートに連絡してください。 |
filter.Abnormal.Fail | データがフィルター条件を満たしていません。 | フィルター条件が正しく定義されていることを確認してください。 |
securityGroup.Internal.HostIsOutside | クラウド外のホストは、セキュリティグループを使用してIP アドレスをブロックできません。 | ターゲットホストがクラウドベースのホストであることを確認してください。 |
securityGroup.Internal.NumberExceedLimit | セキュリティグループまたはセキュリティグループルールの数が制限を超えています。 | ホストに関連付けられているセキュリティグループまたはルールが許可されている制限を超えていないか確認してください。 |
sts_openapi.Internal.ParamError | ParamError: リクエストのパラメーターが無効です。 | コンポーネントに渡された実際の入力パラメーターを確認してください。 |
sts_openapi.Internal.WafRuleError | VerifyRuleCountExceed: ルールの数が制限を超えています。 | WAF カスタムルール制限に達しました。使用されていないルールを削除してください。 |
sts_openapi.Internal.DefenseTemplateNotExist | Defense.Control.DefenseTemplateNotExist: 保護テンプレートが存在しません。 | WAF テンプレートが誤って削除されていないか確認してください。 |
sts_openapi.Internal.DefenseTemplateBindUnbindResourceInvalid | Defense.Control.DefenseTemplateBindUnbindResourceInvalid: テンプレートをバインドするリソースが利用不可です。 | WAF テンプレートに関連付けられているリソースが利用可能か確認してください。 |
sts_openapi.Internal.DefenseResourceRelationExist | Defense.Control.DefenseResourceRelationExist: テンプレートをバインドするリソースは、すでに別のテンプレートにバインドされています。 | リソースがすでに別のWAF テンプレートにバインドされていないか確認してください。 |
sts_openapi.Info.DefenseSceneNotSupported | Defense.Control.DefenseSceneNotSupported: この保護シナリオはサポートされていません。 | 現在のWAF バージョンはカスタムルールをサポートしていません。より上位のWAF エディションにアップグレードしてください。 |
sts_openapi.Internal.ErrorAddressGroupExist | ErrorAddressGroupExist: アドレスグループがすでに存在します。 | Cloud Firewall アドレスグループ名が既存のものと競合しています。別の名前を使用してください。 |
sts_openapi.Internal.PermissionError | NoPermission: 呼び出し元に権限がありません。 | 関連付けられたリソースを変更するために必要な権限を付与してください。 |
sts_openapi.Internal.CFWRuleError | ACLまたは拡張ACLの数が制限を超えています。 | Cloud Firewall ルール制限に達しました。使用されていないルールを削除してください。 |
sts_openapi.Internal.InvalidSecurityGroupId | InvalidSecurityGroupId.NotFound: 指定されたSecurityGroupIdが存在しません。 | セキュリティグループが誤って削除されていないか確認してください。 |
sts_openapi.Internal.ErrorParametersGroupAddress | ErrorParametersGroupAddress: アドレスグループ内のIP アドレスが無効です。 | 現在のIP アドレス帳は利用不可です。その構成を確認してください。 |
sts_openapi.Internal.notBuyUser | not buy user: ユーザーが製品を購入していません。 | このコンポーネントを使用するには、Cloud Firewall を購入してください。 |
sts_openapi.Internal.Throttling | 速度制限またはスロットリング | OpenAPI 呼び出しが速度制限されました。リクエスト頻度を減らして再試行してください。 |
python.Info.aegis2 | プロセスが存在しません。 | ターゲットプロセスが存在しません。 |
python.Internal.aegis3 | プロセスPIDとパスが一致しません。 | PIDとファイルパスが同じプロセスに対応していることを確認してください。 |
python.Internal.aegis4 | プロセス権限が拒否されました。 | プロセスを処理するための権限が不足しています。 |
python.Info.aegis5 | ファイルが存在しません。 | ターゲットファイルが存在しません。 |
python.Internal.aegis6 | ファイルMD5値が不整合です。 | 入力MD5が実際のファイルと一致しません。ファイルの整合性を確認してください。 |
python.Internal.aegis7 | ファイル権限が拒否されました。 | ファイルを処理するための権限が不足しています。 |
python.Internal.aegis8 | オブジェクトファイルが存在し、MD5値が不整合です。 | オブジェクトファイルは存在しますが、MD5が異なります。ファイルを確認してください。 |
python.Internal.aegis9 | バックアップファイルが存在しません。 | ターゲットファイルのバックアップファイルが存在しません。 |
python.Internal.aegis10 | 隔離レコードが見つかりません。 | ターゲットに関連付けられたファイル隔離レコードが存在しません。 |
python.Internal.aegis11 | AliYunDun プロセスは終了または隔離できません。 | AliYunDun プロセスは保護されており、終了または隔離できません。 |
python.Internal.aegis91 | ホスト情報が存在しません。 | ホスト情報が不足しています。ホストがSecurity Centerに登録されていることを確認してください。 |
python.External.Fail | Python スクリプトエラー。 | スクリプト実行中にエラーが発生しました。エラーメッセージを確認するか、サポートに連絡してください。 |
python.External.Data | Python コンポーネントの入力フォーマットエラー。 | Python コンポーネントに渡された入力フォーマットが無効です。エラーメッセージを確認するか、サポートに連絡してください。 |
) をダブルクリックして、その基本情報を構成します。