【Cortex Cloud】Automationの機能のPlayBookとScriptsの紹介

こんにちは!渡邊です

前回はCortex Cloudのアラートのステータスを変更してみました。
今回もCortex Cloudの機能の1つであるAutomation機能について今回は解説していこうと思います。

今回は実施していませんが、Automation機能を使用すると手動で行っていたアラートのステータス変更なども自動化することもできるようになります。

 

はじめに

今回はCortex CloudのAutomation機能のPlayBookとScriptsについて解説していこうと思います。
Playbookではアラート(CortexCloudではIssue/Caseと呼びます)が出たらPlaybookを処理させ、承認メールを送信し、対象のEC2にタグを付与するというPlaybookを作成して解説していきます。
Scripsでは実際に引数から受け取った値を出力するというスクリプトを書いて手動で呼び出すという簡単な流れを解説していきます。

上記2つは後ほど詳しく解説していきます。

Automationとは

Automationは、PlayBookやクイックアクションを活用して、事前に作成されたワークフローを実行します。
また、Scriptなども作成でき、作成したScriptを活用して運用を自動化したりすることもできます。
作成したScriptはPlaybookなどでも使用が可能です。

パブリッククラウド接続時に、Automation機能を有効化する必要があります。

PlayBookとは

Playbookは、アラート(CortexCloudではIssueやCase)の調査から対応までのワークフローを自動実行することで、解析や運用などの効率を最大化することができる機能です。
またAWSやAzureなどのクラウド環境やアセットにもアクセスでき、アセットの修正もすることもできます。

Scriptsとは

Scriptsは、主要な言語でCortex Cloud APIを使用した自動化処理を構築でき、データ共有やセキュリティ保護といった実用的な管理機能も備えています。
作成したScriptなどを手動実行でき、またPlaybookにScriptを組み込むことができ、独自の処理を組み込むこともできます。

Issueが起きたEC2にタグ付けを自動で行うPlaybookの作成

それでは簡単なPlayBookを作ります。
今回はEC2に関するIssueが発生した際に、事前に設定したメールアドレスに対して承認メールを送り、承認されたら対象のEC2に対してタグを付けるようなPlayBookを作成していこうと思います。

今回以下の流れでPlaybookのワークフローを作成していきます。
1. AWSの情報をIssueに書かれているクラウド上のリソースを識別するID(AssetId)を利用して、AWSの情報を取得します
2. タグを付けるかの承認メールを送信
3. メールの回答をもとに条件分岐をし、タグを付るのを承認された場合、対象のEC2にタグを付けます
4. タグを付けた後にWarRoomに成功通知とタグを付けたインスタンス名を送信します 
※WarRoomとはIssue/Caseで行われたすべての自動または手動アクションの監査証跡が確認できる場所になっています。

  1. まず最初にIssueのAsset情報を取得します。
    左ペインの「Investigation & Response 」>「Automation」>「Playbooks」>「Build New Playbook」
    Playbookの名前とタグ、説明を入力し「Save」を押下してPlaybookを作成します。            

    「Task Library」から「Blank Task」を選択します。

  2. 名前を入力します。今回は「Get Asset Details」と入力しました。
    Scriptsのところには「core-get-asset-details」と入力し、赤枠のScriptを選択します。
  3. 黄色枠の「{}」を押下し、「SELECT SOURCE FOR asset_id」の検索から「Asset」と検索し、「ISSUE DETAILS」から「Asset IDs」を押下します。
  4. 完成したら右下の「Save」を押下します。
  5. 以下のようになっていればIssueからAssetの情報を取得することができます。
    このGet Asset Detailsの様なものをタスクと呼びます。

次に対象のメールアドレスに対してメール送信するタスクを作成します。

  1. 「TASK LIBRARY」>「 Blank Task」> Task Type: 「Data Collection」 > 「Message」
    から以下設定値を指定します。                  

    必須/任意 設定値名 説明 今回の設定値
    必須 To メールの宛先を指定します。 自分のメールアドレス
    任意 CC of the email メールのCCを指定します。
    必須 Subject of the email メールのタイトルを指定します。 EC2のタグ付け許可依頼
    任意 Message body メール本文を指定します。 EC2のタグ付け許可をお願いします。
    任意 Require users to authenticate ユーザーのCortexCloudの認証情報が必要か なし

  2. 「Questions」に移動し以下設定値を設定します。
    以下設定値を指定します。                  

    必須/任意 設定値名 説明 今回の設定値
    必須
    任意 Short Description 説明を指定します。 – 
    必須 質問 EC2のタグ付けを許可しますか?
    必須 Answer Type 長文入力や日付などのタイプを指定します。 Single select
    必須 Reply Options 回答の選択肢を指定します。 「Yes」と「No」
    任意 Help Message ユーザーが入力に困ったときに出力される文字を指定します。
    任意 Placeholder 値が入力されるまでの値を指定します

    「+ Add Question」を押下するとほかの質問なども追加することができます。

  3. 2で作成したメールの返答に対して条件分岐を行うタスクを作成します。
    Task Type: Conditional
    タスクのタイトルは任意で今回は「メール返答から条件分岐」としました。1つ前のメールを送信するタスクから値を取得します。
    赤枠の「{}」を押下し、前のタスク名(今回は、対象のメールに確認メールを送信」を押下します。
    「タスク名.Answers」がありますので今回は「0」を選択します。
    設定ができたらConditionをYes/Noの2つ作成します。Conditionは「+ Add condition」を押下して追加します。
                   

    各設定値が設定できましたら「Save]を押して作成完了です。

  4. 条件分岐時(No)のタスクを作成していきます。
    赤枠の部分を左クリック長押しし、矢印がでるまで引っ張り、離します。
     離した後、「Choose label name for condition」が出てくるので「no」を選択し、「Save」を押下します。
      自動的にBlank Taskが作成されるのでTask Type: 「Section Header」を選択します。
    タスク名は「Done」とします。
    設定完了したら「OK」を押下し、作成します。
  5. 条件分岐時(Yes)のタスクを作成していきます。
    4と同じく赤枠の部分を左クリック長押しし、矢印がでるまで引っ張り、離します。
                        

    4と同様「Choose label name for condition」が出てくるので今回は「yes」を選択します

    4と同様でBlank Taskが出てくるので
    以下設定値を入力します。

    設定値名 説明 今回の設定値
    タスク名 タスク名 EC2にタグ付けを行う
    Scripts 使用するScript aws-ec2-tags-create (AWS)
    AWSのアカウントID ${Core.CoreAsset.[0].xdm__asset__realm}
    region AWSリージョン ${Core.CoreAsset.xdm__asset__cloud__region}
    resources EC2のInstanceId ${Core.CoreAsset.[0].xdm__asset__strong_id}
    EC2につけるタグ
    key,valueで指定する。
    複数指定する場合は;を付ける
    例:key=key,value=value;key=key1,value=value1
    key=CortexColoudPlaybookTest,value=タグ付けのテスト

     

    ${}で囲まれているものは変数です。中に記載されているCore.CoreAssetはタスク名「Get Asset Detail」で取得したAsset情報からEC2の情報を取り出しています。
    複数個格納されている可能性があるものいは[0]を付けて最初の要素のみ取り出すようにしています。

    設定値入力が完了すると以下画像の様になります。
    設定できましたら「OK」を押下し、タスクを更新します。

  6. 最後にWar Roomへの送信を行います。
    以下設定値を入力します。                   

    設定値名 説明 今回の設定値
    タスク名 タスク名 WarroomへEC2タグ付け完了通知
    Scripts 使用するスクリプト名 Print
    value value Issue Name – ${issue.name}
    InstanceId – ${Core.CoreAsset.[0].xdm__asset__strong_id}
    Asset Name – ${Core.CoreAsset.xdm__asset__name}
    EC2インスタンスへのタグ追加完了しました。

    以下画像の様になっていたら「OK」を押してタスクを更新します。

  7. すべてのタスクの作成が終わったら「Save Playbook」を押下してPlayBookをセーブします。

Playbookのデバック機能を使用してみる

PlayBookにはデバック機能があります。
実際にデバックしてみようと思います。

右上の「Debugger Panel」を押下して開きます。

Test Dataを「Select Issue」を選択します。

押下すると以下画像の様に遷移するのでEC2のIssueを探します。
今回はEC2のIssueの「AWS EC2 instance not configured with Instance Metadata Service v2 (IMDSv2)
」のIssueで行うのでフィルターで「Name Contains IMDS」でフィルターしています。
※今回のIssueは、IMDSv1だとメタデータ情報が誰でも簡単に取得できてしまい、不正アクセスに繋がるリスクがあった点に関するものです。
EC2のIssueを見つけたらチェックを付けて「Select」を押下します。

選択後以下の画像の様にIssueが選択されています。
下の「> issue」を押下することで実際のIssueに入っている情報を確認することができます。

PlayBookの挙動を確認してみる

デバックパネルでIssueの指定ができましたら実際に作成したPlaybookを動作させてみようと思います。
赤枠の「Run」を押下して実際のPlaybookの挙動を確認します。

動作後以下のようにタスクが進行していきます。
緑になっているタスクは処理成功、黄色はユーザーの対応待ちです。
指定したメールアドレスにメールが来ていると思います。

メールに届いていたURLを押下すると以下に遷移します。
試しにNoを選択し、「Submit Answers」を押下します。

押下すると結果が送信されました。

戻ってPlayBookを確認すると「メールの返答から条件分岐」が緑になっており、Yes側が緑色に変化していないと思います。

Noに実際に行っているかわかりにくいのでタスク名「Done」を押下すると、赤枠のところに緑色のチェックマークがついていると思います。
実際にNoに流れて処理が完了したことがわかりました。

次にYesの条件分岐に流れた場合も行います。
一旦Playbookのデバックを終わりたいので赤枠の「Stop」を押下します。       

そうすると先ほどと同じ画面に戻るので、そこから流れは同じで先ほどのNoと選択した箇所をYesに変更するだけです。
Yesの場合は以下のようになります。
エラーがでずにPlayBookの実行が完了すると思います。

これでPlaybookの解説は以上となります。

Quiet Modeとは

Playbookのデバックを行っている時に実際に入っている設定値を確認したい時があると思います。
そこで使用するのがQuiet Modeです。
Quiet ModeはWarningとErrorのみログ作成します。タスク内で確認できるInputとOutputの値は確認できません。
こちらのQuiet Modeをオフにすることで各タスクのInputとOutputの確認ができるようになります。
実際の変数値が埋め込まれまれたInput ResultsやOutput Resultsの項目なども確認できるようになります。

こちら最初はオンになっているのでオフにして使用します。
赤枠の歯車マークから「General」>「Quiet Mode」のチェックを外します
外した後に「Save Playbook」を押下してセーブします。

もう一度Playbookを実行してみて、各タスクを押して確認してみると以下4つが追加されていると思います。
※タスクの種類によって変動します。

追加された項目 説明
Results 実際にWarroomへ出力される値が出力されています。
Inputs 入れた引数が確認できます。
Input Results 引数へ入れた変数が変換された状態で確認することができます。
Outputs 返ってきた値を確認することができます。

実際に最後のタスク名「WarroomへEC2タグ付け完了通知」を押下するとResultが確認できます。

ほかにもInput Resultを確認すると変数が変換されてInstansidなどが格納されていることが確認できます。

QuietModeの説明は以上となります。

Scriptsの使い方と手動実行の解説

最後にScriptsの使い方と手動実行方法を解説していきます。
今回は手動実行のみですが、Playbookにも今回作成したScriptなどを組み込むことができます。

右上の「New Script」を押下すると以下画像の様にScript Nameを命名します。

作成後サンプルコードが書かれています。
今回は不要なので後ほど削除します。

「Settings」を押下すると各種設定をすることができます。
頻繁に使用しそうな設定値は以下です

設定値 説明
Name Scriptの名前です
Language Type 使用する言語とバージョンを指定することができます。
2026年5月現在、JavaScript/Python/PowerShellを使用することができます。
Tags タグを設定することができます。
Enabled スクリプトの無効化/有効化をすることができます
ARGUMENTS 引数を設定することができます。

実際に簡単なScriptを作成していきます。
作成するScriptは引数の値を取得してそれを返すScriptを作成していきます。

Scriptの全体像

def verify_script_command(args: dict) -> CommandResults:
    # PlaybookやCLIから渡された引数の値を取得
    message = args.get('message', 'Hello Cortex Automation!')

	# 引数の値を変数に格納
    output_message = f"引数の値: {message}"

    # Playbookの後続タスクで利用できるデータを作成
    context_data = {
        'Message': output_message,
        'Status': 'Success'
    }

    # CommandResults オブジェクトで結果を返す
    return CommandResults(
	# 出力されるデータを指定
        outputs=context_data,
	# War Roomに表示されるMarkdownテキスト
        readable_output=f"### 検証成功\n**出力メッセージ:** {output_message}" 
    )

def main():
    try:
        # ログ出力
        demisto.info("=== 動作検証スクリプトを開始します ===")

        # demisto.args() でスクリプトに渡されたすべての引数を取得
        args = demisto.args()

        # コマンド関数の実行
        result = verify_script_command(args)

        # return_results() でWar Roomに結果を出力
        return_results(result)

    except Exception as e:
        # エラー発生時の処理(Playbookがエラーとして停止するようにする)
        demisto.error(f"検証スクリプト実行中にエラーが発生しました: {str(e)}")
        return_error(f"スクリプトの実行に失敗しました。エラー: {str(e)}")

if __name__ in ('__main__', '__builtin__', 'builtins'):
    main()

Scriptsの引数の設定

「Settings」>「+ Add Argument」を押下します。
「Argument」から引数で受け取るmessageを入力します。
「Default」に引数の値を入力します。
今回は「Scriptのテストです」としました。

Scriptの手動実行してみた

これで「Test」>「Return」を押下するとDBbotから以下が返ってきます。

PlayBookのScriptアタッチと同じ手順で作成したScriptを使用することができます。

さいごに

今回はAutomation機能のPlayBookとScriptsを紹介しました。
Automation機能を使用することで運用の自動化やインシデント時に迅速な対応をすることができます。

当社では、複数クラウド環境の設定状況を自動でチェックし、設定ミスやコンプライアンス違反、異常行動などのリスクを診断するCSPMソリューションを販売しております。

マルチクラウド設定診断サービス with CSPM| SCSK株式会社

ご興味のある方は是非、お気軽にお問い合わせください。

×
タイトルとURLをコピーしました