プレイブックとは、セキュリティイベントの識別、分類、評価、および応答を行う、事前定義済みの論理フローまたはスクリプトです。特定の操作を実行するための手順を示し、セキュリティの脅威が存在するかどうかを判断し、適切な応答と緩和を定義します。セキュリティイベントのタイプや重大度レベルに応じて、プレイブックをカスタマイズおよび設定できます。応答のオーケストレーションは、プレイブックを活用して、セキュリティ応答の効率と一貫性を高めます。
主要な概念
プレイブックのタイプ
Security Center は、2 種類のプレイブックを提供しています。
-
[事前定義プレイブック]:Security Center には、一般的なセキュリティの脅威シナリオとソリューションに基づく組み込みのプレイブックが含まれています。これらのプレイブックは、設定なしで直接使用できます。また、事前定義済みプレイブックをコピーしてカスタムプレイブックを作成し、ニーズに合わせて変更することもできます。これにより、カスタムプレイブックの作成が簡素化されます。
-
[カスタムプレイブック]:複雑で高度にパーソナライズされたセキュリティの脅威シナリオ向けに、Security Center は柔軟なカスタムプレイブックを提供しています。フローエディターを使用して、さまざまなコンポーネントを自由に設定し、自動化されたセキュリティレスポンスソリューションを容易に実装できます。
プレイブックパラメーター (入力パラメーターと出力パラメーター)
-
入力パラメーターは、プレイブックをトリガーする条件を定義します。異なる条件を選択すると、対応するデバッグパラメーターの例が更新されます。
-
出力パラメーター:プレイブックの実行時に生成されるフィールドです。後続のノードでこれらのフィールドを使用できます。また、setOutput アクション を使用して、他のプレイブックがそれらを参照できるようにすることもできます。構文は ${event.parameter_path} です。
説明カスタム出力パラメーターに加えて、デフォルトのシステムパラメーターも提供されています。詳細については、「プレイブックのシステムパラメーター」をご参照ください。
カスタムプレイブックのワークフロー
フローエディター
ビジュアルフローエディターを使用して、プレイブックを作成、変更、デバッグ、公開します。フローエディターの主要なエリアについて、以下に説明します。
フローエディターのインターフェイスには、上部メニュー (エリア 1) 、左上の フローノード パネル (エリア 2) 、左下の コンポーネントアクションとプレイブック パネル (エリア 3) 、中央の キャンバスエリア (エリア 4) 、下部の デバッグエリア (エリア 5) の 5 つの主要エリアがあります。
|
番号 |
説明 |
|
1 - メニューバー |
|
|
2 - フローノード |
これらは、すべてのフローに必要で、かつ外部システムに依存しない基本コンポーネントです。各フローには 1 つの開始ノードが必要で、複数の終了ノードを持つことができます。詳細については、「システムコンポーネント」をご参照ください。 |
|
3 - コンポーネントアクションとプレイブック |
|
|
4 - キャンバスエリア |
キャンバスエリアは、フローを構築するためのワークスペースです。コンポーネントをキャンバスにドラッグし、論理的な関係に基づいて接続できます。
|
|
5 - デバッグエリア |
デバッグ または右下の
|
カスタムプレイブックの設定
手順1:プレイブックの基本情報の作成
-
Security Center コンソールにログインします。
-
左側メニューで、 を選択します。コンソールの左上隅で、アセットが配置されているリージョン ([中国本土] または [中国本土以外]) を選択します。
-
[カスタムプレイブック] タブで、スクリプトの新規追加 をクリックします。
-
[スクリプトの新規追加] パネルで、[プレイブック名] と [プレイブックの説明] を入力し、OK をクリックします。
[事前定義プレイブック] タブに移動し、適切なプレイブックを見つけ、[Actions] 列の コピー をクリックして、事前定義プレイブックを新しいカスタムプレイブックとしてコピーすることもできます。
手順2:プレイブックフローの設定
-
プレイブックを作成すると、自動的にその設定ページに移動します。カスタムプレイブックのリストで、[Actions] 列の 編集 をクリックして設定ページに移動することもできます。
-
プレイブックの入力および出力パラメーターの設定
-
Playbook Editing ページで、右上隅の [Settings] をクリックします。設定パネルで、入出力構成 をクリックします。
説明各フローには 1 つの開始ノードが必要で、1 つ以上の終了ノードを持つことができます。
-
[入出力構成] パネルで、プレイブックの入力および出力パラメーターを設定します。詳細については、「プレイブックパラメーター (入力および出力パラメーター)」をご参照ください。
-
-
応答フローのオーケストレーション
フローをオーケストレーションするには、コンポーネントをキャンバスにドラッグして接続します。このトピックでは、DataFormat コンポーネントを例に説明します。他のコンポーネントのパラメーターの設定方法については、「フローコンポーネントの説明」をご参照ください。
重要-
開始ノードの名前は 'event' です。したがって、他のコンポーネントに 'event' という名前を付けないでください。
-
必要に応じて、複数のコンポーネントを追加して接続できます。
-
コンポーネントアクションの選択
左側の [Basic components] セクションから DataFormat コンポーネントを選択し、
joindataやconvertToJSONなどのアクションを選択して、キャンバスにドラッグします。 -
コンポーネントパラメーターの設定
コンポーネントのパラメーターを設定するには、キャンバス上のコンポーネントを クリックします。または、[基本情報] 設定ページの Action Configuration セクションで
をクリックして、パラメーター設定ページに移動します。パラメーター設定の詳細については、「DataFormat コンポーネント」をご参照ください。-
定数、変数パラメーター、システムパラメーター、および式を入力できます。詳細については、「コンポーネントパラメーターとノード実行フロー」をご参照ください。
-
パラメーターを手動で設定することもできます。ノードの入力ボックスで、ドロップダウンリストからパラメーターを選択して、対応する構文を生成します。
たとえば、出力パラメーター hackerIP の変数式は
${InputCheck.datalist.*.records.*hackerIP}です。ここで、InputCheck はアップストリームノード名です。ノードのドロップダウンリストから、InputCheck、dataSetFilter、SiemEventFormat などのアップストリームノードを選択できます。
-
-
-
コンポーネントを設定したら、左上のメニューバーの 保存 をクリックします。
警告保存せずに終了した場合、編集したフロー情報は 失われます。
手順3:フローのデバッグ
プレイブックを構築した後、デバッグして期待どおりに実行されることを確認します。
-
ブレークポイントの設定 (オプション):
-
説明:複雑なフローの特定のステップを検証するには、コンポーネントにブレークポイントを設定します。デバッグ中、フローは、ブレークポイントが設定されたノードの直前まで実行され、一時停止します。これにより、中間結果を確認できます。
重要-
フローに複数のブランチがある場合、システムはブレークポイントが設定されているブランチのみをデバッグします。
-
同じブランチに複数のブレークポイントを設定した場合、最後のブレークポイントのみが有効になります。
-
-
手順:ノードの
アイコンをクリックして、ブレークポイントを設定します。
-
-
デバッグの開始
-
左上隅の
デバッグアイコンをクリックします。[Debug Parameters] パネルで、デバッグ をクリックします。説明デバッグパラメーターは、プレイブックに設定する入力パラメーターのタイプによって異なります。
-
サンプルパラメーターの読み込み:
-
入力例 をクリックします。
-
[入力例の表示] ページで、[Load Sample] をクリックします。
-
-
パラメーターの変更:必要に応じてパラメーターを変更し、OK をクリックします。
説明編集を容易にするために、システムは直感的な [可視化モード] を提供します。
-
-
デバッグ結果の表示
ノードの
アイコンをクリックするか、デバッグエリアの 実行ログ をクリックして、ノードの実行詳細 (入力、出力、ステータスなど) を表示します。次の表に、いくつかの出力パラメーターを示します。パラメーター
説明
datalist
結果データのプレビュー。
重要プレビューでは最大 3 件のエントリが表示されます。すべてのデータを表示するには、[Complete Output Result] タブに移動してください。
total_data_successful
正常に処理されたデータ項目の数。
total_data
処理されたデータ項目の総数。
total_exe_successful
現在のアクションが正常に実行された回数。
total_exe
現在のアクションが実行された総回数。
total_data_with_dup
正常に処理されたデータ項目の数 (重複を含む)。
手順4:保存と発行
プレイブックがデバッグに合格したら、左上のメニューバーの 公開 をクリックしてプレイブックを発行します。
プレイブックの使用
公開済みのプレイブックのみを 自動応答ルールおよびセキュリティイベント処理 に使用できます。
-
自動応答ルールへのバインド:特定のアラートへの応答を自動化します。詳細については、「自動応答ルール」をご参照ください。
-
イベント処理中の手動実行: 手動分析が必要な複雑なセキュリティイベントについては、イベント処理センターでプレイブックを手動で実行し、対応操作を支援できます。詳細については、「Agentic SOC セキュリティイベントの評価と処理」のスクリプトの実行 セクションをご参照ください。
-
直接実行: 応答オーケストレーション ページで、事前定義プレイブック または カスタムプレイブック タブに移動し、対象のプレイブックを見つけ、操作する 列の 実行 をクリックしてプレイブックを 1 回実行します。
関連操作
プレイブックのロールバック
公開されたプレイブックを以前のバージョンに戻すには、ロールバックを実行します。次の手順に従ってください。
-
カスタムプレイブック タブで、ロールバックするプレイブックを見つけます。 [アクション] 列で、詳細 をクリックします。 [基本情報] タブの [公開履歴] セクションで、プレイブックのバージョン履歴を表示します。
-
(オプション) バージョンのテスト: ロールバックするバージョンを選択し、[アクション] 列の 表示 をクリックしてプレイブックタブを開きます。[入力パラメーター (実行)] エリアで、選択したバージョンをテストします。
-
ロールバックするバージョンを選択し、[操作] 列の ロールバックして編集する または ロールバックしてリリースする をクリックします。
-
[ロールバックしてリリースする]:エディターの現在のドラフトを選択したバージョンで置き換え、公開します。
-
[ロールバックして編集する]: エディター内の現在のドラフトを選択したバージョンで置き換えます。
-
公開されたバージョンにロールバックすると、保存されたドラフトが上書きされる可能性があります。ロールバックする前に、バージョン間のフローの違いを慎重に確認してください。
プレイブックのインポート
インポートできるのは JSON ファイルのみです。
-
フローエディターのメニューバーから、詳細を見る をクリックし、[JSON のインポート] を選択します。
-
「インポート」ページで JSON ファイルをアップロードし、OK をクリックします。
プレイブックの実行記録
プレイブックリストで、プレイブックの ID または 操作 列の 詳細 をクリックして、その詳細ページを開きます。基本的な実行記録は、履歴実行レコード タブで確認できます。
プレイブックを使用してイベントまたはセキュリティアラートを処理すると、システムは対応するプレイブックの実行記録を自動的に生成します。
プレイブックの名前変更
プレイブックリストで、プレイブックの ID または詳細 列の [詳細] をクリックして、その詳細ページを開きます。基本情報 タブで、プレイブック名の横にある 編集 をクリックします。
-
事前定義済みプレイブックの名前は変更できません。
-
プレイブック名は一意である必要があります。
プレイブックの実行とデバッグに関する一般的なエラーコード
エラーコードは、プレイブックのオーケストレーションエラーとコンポーネント実行エラーの 2 つのカテゴリに分類されます。
プレイブックのオーケストレーションエラー
|
エラーメッセージ |
説明 |
解決策 |
|
The filter condition for node [%s] is invalid. It must include data from the datalist of node [%s]. |
フィルターノードのフィルター条件が無効です。フィルター対象のノードのデータを参照する必要があります。 |
フィルター対象のノードのデータ変数を含むようにフィルター条件を設定してください。 |
|
Start node has no downstream configuration. |
開始ノードにダウンストリームノードが定義されていません。 |
開始ノードのダウンストリームノードを定義してください。 |
|
The node [nodeName] has no downstream nodes defined. |
通常のノードにダウンストリームノードが定義されていません。 |
通常のノードのダウンストリームノードを定義してください。 |
|
The resource in node [node] does not exist. |
リソースインスタンスが設定されていますが、存在しません。 |
既存のリソースインスタンスを選択してください。 |
|
The resource in node [node] is required but not configured. |
リソースインスタンスが設定されていません。 |
リソースインスタンスを選択して設定してください。 |
|
Multiple nodes have the same name [nodeName]. |
重複するノード名が存在します。 |
重複するノード名を見つけ、一意な名前に変更してください。 |
|
The path [path] defined in node [node1] is invalid because the child flow supports only the ${<subTask>.curLoop} and ${<subTask>.curIndex} formats. |
子フローでは、変数が正しくないフォーマットで参照されています。${<subTask>.curLoop} と ${<subTask>.curIndex} のフォーマットのみがサポートされています。 |
子フローのパラメーターの変数定義を確認し、無効な定義を修正してください。 |
|
The path [node2.path] defined in node [node1] is invalid because node [node2] does not exist. |
パラメーター変数が存在しないノードを参照しています。 |
参照されているノードが存在しないか、削除されています。変数を再設定するか、不足しているノードを追加してください。 |
|
The path [node2.path] defined in node [node1] is invalid because node [node2] is not an upstream node of the current node. |
パラメーター変数が現在のノードのアップストリームノードではないノードを参照しています。 |
アップストリームノードからの変数のみを参照してください。 |
コンポーネント実行エラー
|
エラーコード (errCode) |
エラーメッセージ (errMsg) |
トラブルシューティング |
|
sophon.Internal.Error |
An internal system error occurred. |
パラメーターまたはリソース設定を確認してください。詳細については、エラーメッセージを確認するか、テクニカルサポートにお問い合わせください。 |
|
component.Internal.ParamError |
A parameter of the component is invalid. |
コンポーネントのパラメーターが正しく設定されていることを確認してください。 |
|
component.Abnormal.InvokeError |
Component execution failed. |
コンポーネントの内部エラーが発生しました。詳細についてはエラーメッセージを確認するか、テクニカルサポートにお問い合わせください。 |
|
filter.Abnormal.Fail |
The data does not meet the filter condition. |
フィルター条件が正しく設定されていることを確認してください。 |
|
securityGroup.Internal.HostIsOutside |
Hosts outside the cloud cannot use security groups to block IP addresses. |
対象のホストがクラウド外のホストではないことを確認してください。 |
|
securityGroup.Internal.NumberExceedLimit |
The number of security groups or security group rules exceeds the limit. |
関連付けられているセキュリティグループの数、またはセキュリティグループごとのルール数が制限を超えていないか確認してください。 |
|
sts_openapi.Internal.ParamError |
ParamError: The parameters of your request are invalid. |
コンポーネントの入力パラメーターが正しいことを確認してください。 |
|
sts_openapi.Internal.WafRuleError |
VerifyRuleCountExceed: The number of rules exceeds the limit. |
WAF カスタムルールの数を減らしてください。 |
|
sts_openapi.Internal.DefenseTemplateNotExist |
Defense.Control.DefenseTemplateNotExist: The WAF template does not exist. |
WAF テンプレートが削除されていないことを確認してください。 |
|
sts_openapi.Internal.DefenseTemplateBindUnbindResourceInvalid |
Defense.Control.DefenseTemplateBindUnbindResourceInvalid: The resource to be bound to the template is unavailable. |
リソースが利用可能であることを確認してください。 |
|
sts_openapi.Internal.DefenseResourceRelationExist |
Defense.Control.DefenseResourceRelationExist: The resource to be bound to the template is already bound to another template. |
リソースが既に別のテンプレートにバインドされていないことを確認してください。 |
|
sts_openapi.Info.DefenseSceneNotSupported |
Defense.Control.DefenseSceneNotSupported: This protection scenario is not supported. |
この保護シナリオをサポートするバージョンに WAF インスタンスをアップグレードしてください。 |
|
sts_openapi.Internal.ErrorAddressGroupExist |
ErrorAddressGroupExist: The address group already exists. |
Cloud Firewall アドレスグループには一意の名前を使用してください。 |
|
sts_openapi.Internal.PermissionError |
NoPermission: The caller does not have permission. |
リソースを変更するために必要な権限を取得してください。 |
|
sts_openapi.Internal.CFWRuleError |
The number of ACLs or expanded ACLs exceeds the limit. |
Cloud Firewall ルールの数を減らしてください。 |
|
sts_openapi.Internal.InvalidSecurityGroupId |
InvalidSecurityGroupId.NotFound: The specified SecurityGroupId does not exist. |
指定されたセキュリティグループが存在することを確認してください。 |
|
sts_openapi.Internal.ErrorParametersGroupAddress |
ErrorParametersGroupAddress: The IP address in the address group is invalid. |
アドレスグループ内の IP アドレスが有効であることを確認してください。 |
|
sts_openapi.Internal.notBuyUser |
not buy user: You have not purchased this product. |
Cloud Firewall のサブスクリプションを購入してください。 |
|
sts_openapi.Internal.Throttling |
The error message contains the "throttling" or "Throttling" keyword. |
スロットリングを回避するために、API コールの頻度を減らしてください。 |
|
python.Info.aegis2 |
The process does not exist. |
指定されたプロセスが存在することを確認してください。 |
|
python.Internal.aegis3 |
The process PID and path do not match. |
プロセス ID (PID) とそのパスが正しいことを確認してください。 |
|
python.Internal.aegis4 |
Process permission denied. |
プロセスを管理するために必要な権限があることを確認してください。 |
|
python.Info.aegis5 |
The file does not exist. |
指定されたファイルが存在することを確認してください。 |
|
python.Internal.aegis6 |
The file MD5 hash values do not match. |
指定した MD5 ハッシュが、ファイルの MD5 ハッシュと一致することを確認してください。 |
|
python.Internal.aegis7 |
File permission denied. |
ファイルを処理するために必要な権限があることを確認してください。 |
|
python.Internal.aegis8 |
The target file exists and its MD5 hash does not match. |
対象のファイルを確認してください。不要な場合は削除するか、MD5 ハッシュが一致する正しいファイルに置き換えてから、操作を再試行してください。 |
|
python.Internal.aegis9 |
The backup file does not exist. |
対象ファイルのバックアップファイルが見つかりません。 |
|
python.Internal.aegis10 |
No quarantine record was found. |
指定されたファイルの検疫レコードが存在することを確認してください。 |
|
python.Internal.aegis11 |
You cannot terminate or quarantine the AliYunDun process. |
これは保護されたシステムプロセスであり、終了または検疫することはできません。 |
|
python.Internal.aegis91 |
The host information does not exist. |
操作対象のホストがシステムに正しく登録されており、指定したホスト情報 (ホスト名、IP アドレス、UUID など) が正確であることを確認してください。 |
|
python.External.Fail |
A Python script error occurred. |
スクリプトエラーの詳細についてはエラーメッセージを確認するか、テクニカルサポートにお問い合わせください。 |
|
python.External.Data |
Invalid input format for the Python component. |
Python コンポーネントの入力フォーマットを修正してください。詳細については、エラーメッセージを確認するか、テクニカルサポートにお問い合わせください。 |