プレイブックは、セキュリティインシデントの識別、分類、評価、および対応に役立つ、事前定義された論理プロセスまたはスクリプトです。 複数の手順を含むプレイブックは、脅威が存在するかどうか、脅威への対応方法、および脅威の影響を軽減する方法を判断するために、特定の操作を実行します。 セキュリティ要件に合わせて、セキュリティインシデントの種類と脅威レベルに基づいてプレイブックをカスタマイズできます。 Security Orchestration, Automation and Response ( SOAR ) は、プレイブックを通じてセキュリティインシデント対応の効率と一貫性を向上させます。
前提条件
Cloud Threat Detection and Response ( CTDR ) に追加する [ログデータ] を購入済みであること。 詳細については、「CTDR の購入と有効化」をご参照ください。
プレイブックの種類
Security Center では、次の種類のプレイブックが提供されています。
Predefined Playbook:Security Center は、一般的な脅威シナリオとソリューションに基づいて組み込みプレイブックを提供します。 これらのプレイブックは構成なしで直接使用できます。 定義済みプレイブックをコピーしてカスタムプレイブックとして保存することもできます。 その後、ビジネス要件に基づいてカスタムプレイブックを変更できます。 これにより、カスタムプレイブックの構成の複雑さが軽減されます。
Custom Playbook:複雑で高度にパーソナライズされたセキュリティ脅威シナリオを処理する必要がある場合、Security Center は柔軟なカスタムプレイブックを提供します。 フローエディターを使用してさまざまなコンポーネントを自由に構成し、自動化ソリューションを簡単に実装できます。
カスタムプレイブック構成フローチャート
フローエディターの説明
ビジュアルフローエディターを使用して、プレイブックフローの作成、変更、デバッグ、および公開を行うことができます。 フローエディターに関する主な情報を以下に示します。

項目 | 説明 |
1-メニューバー |
|
2-基本ノード | これらは各フローに必要な基本コンポーネントであり、外部要因とは無関係です。 各フローは開始ノードで開始する必要があり、複数の終了ノードを持つことができます。 説明 ノードアイコンの上にポインターを移動すると、ノードの概要が表示されます。 |
3-コンポーネントの構成 |
|
4-キャンバス | キャンバス。 目的のコンポーネントをキャンバスにドラッグし、コンポーネント間の論理関係に基づいて線を描画してコンポーネントを接続できます。
|
5-デバッグエリア | デバッグ または右下隅の
|
カスタムプレイブックの構成
ステップ 1:プレイブックの基本情報を作成する
Security Center コンソール にログオンします。コンソールの左上隅で、保護対象の資産が配置されているリージョン(中国 または 全世界 (中国を除く))を選択します。
左側のナビゲーションウィンドウで、 を選択します。
Custom Playbook タブで、スクリプトの新規追加 をクリックします。
スクリプトの新規追加 パネルで、Playbook Name と Playbook Description を入力し、[OK] をクリックします。
Predefined Playbook タブに移動し、適切なプレイブックを見つけて、[操作] 列の [コピー] をクリックして、定義済みプレイブックを新しいカスタムプレイブックとしてコピーすることもできます。
ステップ 2:プレイブックフローを構成する
ステップ 1 でプレイブックの基本情報を作成すると、プレイブックフロー構成ページに自動的にリダイレクトされます。 カスタムプレイブックリストページの [操作] 列にある [編集] をクリックして、構成ページに移動することもできます。
開始ノード を構成します。
[プレイブックの編集] ページで、開始ノードをクリックします。 構成パネルで、[ I/O パラメーターの構成] をクリックします。
説明各フローには開始ノードと終了ノードが必要です。 各フローは 1 つの開始ノードのみを持つことができますが、複数の終了ノードを持つことができます。

[I/O パラメーターの構成] パネルで、プレイブックの入力パラメーターと出力パラメーターを構成します。 詳細については、「システムコンポーネント」をご参照ください。
入力パラメーター:プレイブックをトリガーする条件を構成します。 異なる条件を選択すると、テスト中に [入力パラメーターウィザード] がそれに応じて変化します。
出力パラメーター:プレイブックの実行後に 出力されるフィールドを定義します。 これらのフィールドは後続のノードで使用でき、setOutput アクション を介してそれらを参照する他のプレイブックにも提供できます。
2-基本ノード 領域と 3-コンポーネント構成 領域から適切な コンポーネント または プレイブック を選択し、関連パラメーターを構成します。 このトピックでは、DataFormat コンポーネントを例として使用します。 その他のコンポーネントのパラメーターの構成方法については、「プロセスコンポーネントの説明」をご参照ください。
重要開始ノード はノード名として event を使用します。 そのため、プレイブックをオーケストレーションする際に、コンポーネントの名前を event に設定しないでください。
必要に応じて複数のコンポーネントを選択し、それらの間にコンテキスト関係を確立できます。
左側の [基本オーケストレーションコンポーネント] から DataFormat コンポーネントを選択し、joindata や convertToJSON などの適切なアクションを選択して、コンポーネントをキャンバスにドラッグします。
キャンバスで、選択した DataFormat コンポーネントをクリックするか、[基本情報] 設定ページの Action Configuration モジュールで
をクリックして、パラメーター設定ページに移動し、関連パラメーターを設定します。 パラメーターの設定方法の詳細については、「DataFormat コンポーネント」をご参照ください。定数、変数パラメーター、システムパラメーター、式などを入力できます。 詳細については、「コンポーネントパラメーターと実行」をご参照ください。
パラメーター構成を手動で入力するか、入力フィールドのドロップダウンリストからノードパラメーターを選択して、対応する構文を生成できます。 次の図は例を示しています。

コンポーネントの構成が完了したら、左上隅のメニューバーにある [保存] をクリックします。
警告保存せずに終了すると、編集された情報は 失われます。
ステップ 3:フローをデバッグする
プレイブックを構成した後、デバッグしてフローの正確性を検証し、フローノードがスムーズに実行されるようにする必要があります。 主要なノードにブレークポイントを設定する ブレークポイントデバッグ を使用することをお勧めします。 テスト中、実行はブレークポイントノードで一時停止します。
フローに複数のブランチがある場合、ブレークポイントのあるブランチのみがデバッグされます。
デバッグ中の複数のブレークポイントはサポートされていません。 ブランチに複数のブレークポイントがある場合、実行は最後のブレークポイントで一時停止します。
ブレークポイントを設定します(オプション)。 ノードの
をクリックして、現在のノードをブレークポイントとして設定します。
左上隅の
をクリックし、[入力パラメーター(デバッグ)] 領域に入力パラメーターを入力します。説明[入力パラメーター] をクリックすると、パラメーターの例を取得できます。 デバッグパラメーターの構成は、開始ノードに構成されたプレイブックのトリガー条件によって異なります。 詳細については、「開始コンポーネントの説明」をご参照ください。
[入力パラメーター(デバッグ)] 領域で デバッグ をクリックします。

デバッグ結果を表示します。
デバッグ領域でノードの
または [実行ログ] をクリックすると、ノードの詳細な入力データと出力データ、および実行ステータスを表示できます。 次の表では、[出力パラメーター] タブの一部のパラメーターについて説明します。パラメーター
説明
datalist
結果プレビューデータ。
重要最大 3 つのプレビューデータエントリが表示されます。 [完全な出力結果] タブから完全なデータを表示できます。
total_data_successful
実行中に正常に処理されたデータ量。
total_data
実行中に処理されたデータの総量。
total_exe_successful
現在のアクションが正常に実行された回数。
total_exe
現在のアクションが実行された合計回数。
total_data_with_dup
実行中に正常に処理された後の重複排除後のデータ量。

ステップ 4:保存して公開する
デバッグが完了したら、左上隅のメニューバーにある [保存して公開] をクリックして、プレイブックを正式バージョンに変換します。 公開済みのプレイブックのみを 自動応答ルールと手動セキュリティインシデント処理 に使用できます。
追加アクション
プレイブックをロールバックする
公開済みのプレイブックを履歴バージョンに復元する場合は、ロールバック操作を実行します。
Custom Playbook タブで、ロールバックするプレイブックを見つけます。 操作する 列の [詳細] をクリックします。 詳細ページの [基本情報] タブの公開履歴セクションで、公開済みプレイブックの履歴バージョンを表示します。
テストを実行します(オプション):ロールバックするバージョンを選択し、[操作] 列の [表示] をクリックして、プレイブックタブに移動します。 [入力パラメーター(実行)] 領域でロールバックバージョンの実行テストを完了します。
ロールバックするバージョンを選択し、[操作] 列の ロールバックして編集する または ロールバックしてリリースする をクリックします。
ロールバックしてリリースする:編集ページの下書きバージョンを現在のバージョンで上書きし、バージョンを公開します。
ロールバックして編集する:編集ページの下書きバージョンを現在のバージョンで上書きします。
正式バージョンからロールバックすると、下書きバージョンが上書きされる場合があります。 ロールバックする前に、ロールバック前後のプレイブックを詳細に確認および評価してください。
プレイブックをインポートする
JSON ファイルのみをインポートできます。
フローエディターのメニューバーで、[その他] をクリックし、ドロップダウンリストから [JSON のインポート] をクリックします。
インポートページで、インポートする JSON ファイルをアップロードし、[OK] をクリックします。

プレイブック実行レコードを表示する
プレイブックリストで、プレイブック ID または [操作] 列の [詳細] をクリックして、プレイブックの詳細ページに移動します。 [履歴実行レコード] で基本的な実行レコードを表示できます。
プレイブックを使用してイベントまたはセキュリティアラートを処理すると、システムは自動的にプレイブック実行レコードを生成します。
プレイブック名を変更する
プレイブックリストで、プレイブック ID または [操作] 列の [詳細] をクリックして、プレイブックの詳細ページに移動します。 [基本情報] で、プレイブック名の横にある [編集] をクリックします。
定義済みプレイブックの名前は変更できません。
プレイブック名は一意にしてください。
プレイブックの実行とデバッグにおける一般的なエラーコード
エラーコードは、プレイブックのオーケストレーション中に発生するエラーコードと、コンポーネントの実行中に発生するエラーコードに分類されます。
プレイブックのオーケストレーションに関連するエラーコード
エラーメッセージ | 説明 | トラブルシューティングと解決策 |
ノード [%s] のフィルター条件が無効です。 ノード [%s] のデータリストからのデータを含める必要があります。 | フィルターノードの条件判断構成が正しくありません。 構成には、フィルターするデータを含める必要があります。 | ノードのデータをフィルターするときは、フィルター条件にノードのデータ変数と対応する条件が含まれていることを確認してください。 |
開始ノードにダウンストリーム構成がありません。 | 開始ノードにダウンストリームノードが定義されていません。 | 開始ノードにダウンストリームノードを定義します。 |
ノード [nodeName] にダウンストリームノードが定義されていません。 | 共通ノードにダウンストリームノードが定義されていません。 | 共通ノードにダウンストリームノードを定義します。 |
ノード [node] のアセットが存在しません。 | リソースインスタンスが構成されていますが、リソースインスタンスが存在しません。 | 既存のリソースインスタンスをもう一度選択します。 |
ノード [node] のアセットは必須ですが、構成されていません。 | リソースインスタンスが構成されていません。 | リソースインスタンスを選択して構成します。 |
複数のノードに同じ名前 [nodeName] が付いています | 重複するノード名が 存在します。 | 重複するノード名を見つけて変更し、各ノード名が 一意になるようにします。 |
ノード [node1] で定義されているパス [path] は無効です。 子フローは ${<subTask>.curLoop} および ${<subTask>.curIndex} 形式のみをサポートしているためです。 | 子フローでは、子フローの名前を使用して取得された変数の形式が正しくありません。 現在、子フローでは ${<subTask>.curLoop} と ${<subTask>.curIndex} のみがサポートされています。 | 子フローのパラメーターの変数定義を確認し、正しくない変数定義を変更します。 |
ノード [node1] で定義されているパス [node2.path] は無効です。 ノード [node2] が存在しないためです。 | ノードのパラメーターで、変数によって参照されるノードが存在しません。 | 参照されるノードが存在しないか、削除されています。 変数を再構成するか、存在しないノードを追加する必要があります。 |
ノード [node1] で定義されているパス [node2.path] は無効です。 ノード [node2] は現在のノードのアップストリームノードではないためです。 | ノードのパラメーターで、変数は存在するノードを参照していますが、現在のノードのアップストリームノードではありません。 | アップストリームノードの変数を参照します。 |
コンポーネントの実行に関連するエラーコード
エラーコード (errCode) | エラーメッセージ (errMsg) | トラブルシューティング |
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 ( Web Application Firewall ) のカスタムルールの数が制限を超えています。 |
sts_openapi.Internal.DefenseTemplateNotExist | Defense.Control.DefenseTemplateNotExist:保護テンプレートが存在しません。 | WAF テンプレートが存在しません。 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 のバージョンが古すぎて、カスタムルール機能がサポートされていません。 |
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 | 非購入ユーザー(ユーザーは製品を購入していません)。 | ユーザーは Cloud Firewall を購入していません。 |
sts_openapi.Internal.Throttling | 速度制限または Throttling キーワードが含まれています(API 速度制限)。 | クラウド製品の OpenAPI 操作が制限されています。 |
python.Info.aegis2 | プロセスが存在しません。 | プロセスが存在しません。 |
python.Internal.aegis3 | プロセス ID とパスが一致しません。 | プロセス ID とパスが一致しません。 |
python.Internal.aegis4 | プロセスの権限が拒否されました。 | プロセスを処理する権限がありません。 |
python.Info.aegis5 | ファイルが存在しません。 | 処理するファイルが存在しません。 |
python.Internal.aegis6 | ファイルの MD5 値が一致しません。 | 処理するファイルの入力 MD5 値が実際の MD5 値と一致しません。 |
python.Internal.aegis7 | ファイルの権限が拒否されました。 | ファイルを処理する権限がありません。 |
python.Internal.aegis8 | ターゲットファイルが存在し、MD5 値が一致しません。 | ターゲットファイルが存在し、MD5 値が一致しません。 |
python.Internal.aegis9 | バックアップファイルが存在しません。 | 処理するファイルのバックアップファイルが存在しません。 |
python.Internal.aegis10 | 隔離レコードが見つかりません。 | 関連するファイル隔離レコードが見つかりません。 |
python.Internal.aegis11 | AliYunDun プロセスを終了または隔離することはできません。 | AliYunDun プロセスを終了または隔離することはできません。 |
python.Internal.aegis91 | ホスト情報が存在しません。 | ホスト情報が存在しません。 |
python.External.Fail | Python スクリプトエラー。 | Python スクリプトの実行中にエラーが発生しました。 詳細については、エラーメッセージを表示するか、テクニカルサポートにお問い合わせください。 |
python.External.Data | Python コンポーネントの入力形式エラー。 | Python コンポーネントの入力形式でエラーが発生しました。 詳細については、エラーメッセージを表示するか、テクニカルサポートにお問い合わせください。 |
参考資料
コンポーネントパラメーターとサポートされているパラメーター形式については、「コンポーネントパラメーターと実行」をご参照ください。
コンポーネントパラメーターの構成については、「システムコンポーネント」をご参照ください。