カスタム アクションを作成する
最初のカスタム統合では、パラメータを定義し、接続をテストするための Ping アクションを作成しました。このドキュメントでは、カスタム インテグレーション用に 2 つの新しいアクションを作成する方法について説明します。
- ドメインの詳細を取得する: ドメイン情報を取得し、結果を JSON 形式で表示します。
- エンティティを拡充する: ドメインの詳細を使用してエンティティを拡充します。
カスタム アクションを作成する
カスタム アクションを作成する手順は次のとおりです。
- 統合開発環境(IDE)に移動し、 [追加] をクリックして新しい IDE アイテムを追加します。
- [アクション] ラジオボタンを選択します。
- アクションに
Get Domain Details
という名前を付け、統合を選択します。 - [作成] をクリックします。IDE は、組み込みのコード コメントと説明を含む新しいテンプレートを生成します。
アクション パラメータを構成する
WHOIS XML API のドキュメントによると、ドメインの詳細を取得アクションには Check Availability
と Domain Name
の 2 つのパラメータが必要です。これらのパラメータを構成する手順は次のとおりです。
- IDE モジュールで、 [追加] をクリックします。
- 最初のパラメータを作成します。[空き状況を確認] のフィールドに入力し、[保存] をクリックします。このパラメータは、ドメインが使用可能かどうかを示します。この結果は、後で作成する自動化で使用されます。
- 2 つ目のパラメータを作成します。[ドメイン名] のフィールドに入力し、[保存] をクリックします。このフィールドを使用して、アクションで確認するドメインを入力します。
Get Domain Details アクションを編集する
[Get Domain Details] アクションを編集する手順は次のとおりです。
-
[Get Domain Details] に表示されたコードをコピーして、IDE に貼り付けます。コードを確認します。オブジェクトは、クラスの
end
メソッドを使用して、出力メッセージと結果値を返す必要があります。次に例を示します。
siemplify.end(msg, None)
-
統合パラメータとアクション パラメータを抽出する:
siemplify.extract_configuration_param
関数を使用して、統合パラメータ(API キーなど)を抽出します。同様に、構成したアクション パラメータ(Domain Name
やCheck availability
など)は、siemplify.extract_action_param
関数で抽出されます。api_key = siemplify.extract_configuration_param(provider_name=INTEGRATION_NAME, param_name="API Key") url = f"https://www.whoisxmlapi.com/whoisserver/WhoisService?apiKey={api_key}&outputFormat=json" domain = siemplify.extract_action_param(param_name="Domain Name", print_value=True) availability_check = siemplify.extract_action_param(param_name="Check availability", is_mandatory=False, print_value=True)
- リクエストを作成して結果を処理します。
- 統合パラメータとアクション パラメータを抽出したら、リクエスト URL を作成できます。URL は、
availability_check
パラメータのブール値に基づいて構築されます。 - URL の準備ができたら、WHOIS サイトにリクエストを送信します。
- サイトのレスポンスを解析し、関連するデータをアクションの結果に追加します。
- ユーザーに表示される出力メッセージを定義し、JSON 結果を含めます。
# Add domain to scan url = f"{url}&domainName={domain}" # Determine availability check if availability_check.lower() == 'true': availability_check_qs = 1 else: availability_check_qs = 0 url = f"{url}&da={availability_check_qs}" response = requests.get(url) response.raise_for_status() # Add a Json result that can be used in the next steps of the playbook. siemplify.result.add_result_json(response.json()) # Add the Json to the action result presented in the context details. siemplify.result.add_json("WhoisDetails", response.json()) msg = f"Fetched data for {domain}" siemplify.end(msg, None) if __name__ == "__main__": main()
アクションに JSON の結果を追加する
[ドメインの詳細を取得] アクションの一部として、[ドメインの詳細を取得] をクリックして JSON の例を追加します。「最初の自動化を作成する」の手順で、ハンドブック デザイナーの JSON の例を使用して、JSON 内の特定のフィールドを抽出します。
- JSON を取得する: WHOIS サイトの JSON の例から JSON をコピーします。
- JSON アイコンを有効にする: IDE の [詳細] タブで、[JSON 結果を含める] 切り替えを有効にして、IDE の上部に JSON アイコンを表示します。
- JSON をインポートします。 file_json JSON サンプルを管理 > login JSON のサンプルをインポート をクリックします。
アクションをテストする
作成したアクションをテストする手順は次のとおりです。
- [テスト] タブに移動します。
- [スコープ] で、[テストケース] と [インテグレーション インスタンス] を選択します。
- IDE で [ slideshow ] [Play] をクリックします。
- [テスト] タブでアクションの結果を確認します。テストの完了後、[デバッグ出力] タブでログとプリントを確認することもできます。
テストケースを作成する
環境にテストケースがない場合は、[Cases] > [Ingest alert as test case] に移動して作成します。この操作を行うと、ケースキューに [テスト] ラベルが付いたテストケースが作成されます。テストケースを作成したら、IDE に戻り、リストからテストケースを選択します。
テストケースを作成する手順は次のとおりです。
- [ケース] ページに移動し、ケースを選択します。
- アラートをテストケースとして取り込みます。これにより、ケースキューに [テスト] ラベルの付いた新しいケースが作成されます。
テストケースを作成したら、IDE に戻り、リストからテストケースを選択します。
拡充アクションを作成する
この手順では、エンティティに新しいデータを追加する拡充アクションの作成に焦点を当てます。拡充されたデータは、エンティティ エクスプローラで表示できます。エンリッチメント アクションを作成する手順は次のとおりです。
-
IDE で、新しいアクションを作成し、
Enrich Entities
という名前を付けます。 - 次のコードをコピーしてアクションに貼り付けます。
from SiemplifyAction import SiemplifyAction from SiemplifyUtils import output_handler from SiemplifyDataModel import EntityTypes import requests # Example Consts: INTEGRATION_NAME = "My first Integration - Whois XML API" SCRIPT_NAME = "WHOIS XML API EnrichEntities" @output_handler def main(): siemplify = SiemplifyAction() siemplify.script_name = SCRIPT_NAME siemplify.LOGGER.info("================= Main - Param Init =================") api_key = siemplify.extract_configuration_param(provider_name=INTEGRATION_NAME, param_name="API Key") url = f"https://www.whoisxmlapi.com/whoisserver/WhoisService?apiKey={api_key}&outputFormat=json" siemplify.LOGGER.info("----------------- Main - Started -----------------") output_message = "output message :" # human readable message, showed in UI as the action result successful_entities = [] # In case this actions contains entity based logic, collect successful entity.identifiers for entity in siemplify.target_entities: siemplify.LOGGER.info(f"processing entity {entity.identifier}") if (entity.entity_type == EntityTypes.HOSTNAME and not entity.is_internal) or entity.entity_type == EntityTypes.URL: entity_to_scan = entity.identifier scan_url = f"{url}&domainName={entity_to_scan}" response = requests.get(scan_url) response.raise_for_status() register_details = response.json().get("WhoisRecord", {}).get("registrant", {}) if register_details: entity.additional_properties.update(register_details) successful_entities.append(entity) if successful_entities: output_message += "\n Successfully processed entities:\n {}".format("\n ".join([x.identifier for x in successful_entities])) siemplify.update_entities(successful_entities) # This is the actual enrichment (this function sends the data back to the server) else: output_message += "\n No entities where processed." result_value = len(successful_entities) siemplify.LOGGER.info("----------------- Main - Finished -----------------") siemplify.end(output_message, result_value) if __name__ == "__main__": main()
- パラメータを抽出します。スクリプトは、統合の構成から API キーを抽出します。このキーは、WHOIS XML API へのリクエストを認証するために必要です。
- ターゲット エンティティを特定します。スクリプトは、処理するエンティティを識別します。すべてのエンティティを反復処理し、次の 2 つのタイプのみに焦点を当てます。
- 内部以外のホスト名
- URL
-
ドメインをスキャンし、アクションのエンリッチメント ステップと出力メッセージを定義します。このアクションは Entity スコープで実行されるため、特定のパラメータを構成する必要はありません。これはすでにコードに埋め込まれています。
scan_url = f"{url}&domainName={entity_to_scan}" response = requests.get(scan_url) response.raise_for_status() register_details = response.json().get("WhoisRecord", {}).get("registrant", {}) if register_details: entity.additional_properties.update(register_details) successful_entities.append(entity) if successful_entities: output_message += "\n Successfully processed entities:\n {}".format("\n ".join([x.identifier for x in successful_entities])) siemplify.update_entities(successful_entities) # This is the actual enrichment (this function sends the data back to the server) else: output_message += "\n No entities where processed." result_value = len(successful_entities)
- アクションを有効にして、[保存] をクリックします。これで、3 つのカスタム アクションを含むカスタム インテグレーションが作成されました。
- WHOIS XML API プロダクトへの接続をテストする Ping アクション。
- ドメインに関するデータを抽出し、JSON 結果として表示する Get Domain Details アクション。
- エンティティ エクスプローラ モジュールで確認できる、ターゲット エンティティに追加データを追加するエンティティを拡充するアクション。
for entity in siemplify.target_entities:
siemplify.LOGGER.info(f"processing entity {entity.identifier}") if
(entity.entity_type == EntityTypes.HOSTNAME and not entity.is_internal) or
entity.entity_type == EntityTypes.URL: entity_to_scan = entity.identifier
これで、カスタマイズしたアクションを使用して初めての自動化を作成する準備が整いました。
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。