Google Chat

このドキュメントでは、Google Chat を Google SecOps と統合する方法について説明します。

プロダクトの権限

サービス アカウントを作成する

  1. Google Cloud コンソールで、既存の Google Cloud プロジェクトを選択するか、新しいプロジェクトを作成します。選択した Google Cloud プロジェクトは、 Google Cloudの組織の一部である必要があります。
  2. メニューをクリックし、[API とサービス] > [認証情報] メニュー項目を選択します。
  3. ページの上部にある [+ 認証情報を作成 > サービス アカウント] をクリックします。
  4. コンソールに表示するサービス アカウント名を入力します。
  5. (省略可)サービス アカウントの説明を入力します。
  6. [作成]、[続行]、[完了] の順にクリックして、サービス アカウントの作成を完了します。

サービス アカウントの認証情報を作成する

  1. サービス アカウントを作成すると、 Google Cloud プロジェクトで使用できる認証情報のリストにリダイレクトされます。[サービス アカウント] セクションで、新しく作成したサービス アカウントをクリックします。これは、service-account-name@project-name-XXXXXX.iam.gserviceaccount.com と呼ばれます。
  2. [鍵を追加] > [新しい鍵を作成] の順にクリックします。
  3. JSON を選択したまま、[作成] をクリックします。

これにより、このサービス アカウントとして API にアクセスするために必要な認証情報ファイルのダウンロードが開始されます。

新しい Apps Script プロジェクトを設定する

  1. Google Apps Script に移動します。
  2. 新しい Apps Script プロジェクトを作成します。
  3. 統合機能を実行するには、新しく作成したプロジェクトに次のコードを追加します。

    var SCOPE = 'https://www.googleapis.com/auth/chat.bot';
    // The values below are copied from the JSON file downloaded upon
    // service account creation.
    // For SERVICE_ACCOUNT_PRIVATE_KEY, remember to include the BEGIN and END lines of the private key
    var SERVICE_ACCOUNT_PRIVATE_KEY = '...';
    var SERVICE_ACCOUNT_EMAIL = 'service-account@project-id.iam.gserviceaccount.com';
    
    // Posts a message into the given space ID via the API, using
    // service account authentication.
    function postMessage(spaceId, message) {
      var service = OAuth2.createService('chat')
          .setTokenUrl('https://accounts.google.com/o/oauth2/token')
          .setPrivateKey(SERVICE_ACCOUNT_PRIVATE_KEY)
          .setClientId(SERVICE_ACCOUNT_EMAIL)
          .setPropertyStore(PropertiesService.getUserProperties())
          .setScope(SCOPE);
      if (!service.hasAccess()) {
        Logger.log('Authentication error: %s', service.getLastError());
        return;
      }
      var url = 'https://chat.googleapis.com/v1/' + spaceId + '/messages';
      UrlFetchApp.fetch(url, {
        method: 'post',
        headers: { 'Authorization': 'Bearer ' + service.getAccessToken() },
        contentType: 'application/json',
        payload: JSON.stringify(message),
      });
    }
    
  4. Google Cloud コンソールからダウンロードしたサービス アカウントの認証情報ファイルを開きます。

  5. private_key の値(-----BEGIN PRIVATE KEY----- で始まる値)をコピーして、Apps Script プロジェクトの SERVICE_ACCOUNT_PRIVATE_KEY に貼り付けます。

  6. 認証情報ファイルから client_email の値をコピーし、Apps Script プロジェクトの SERVICE_ACCOUNT_EMAIL に貼り付けます。

  7. Apps Script プロジェクトを、作成した Google Cloud プロジェクトにリンクします。

  8. Google Cloud コンソールに戻り、☰ > [IAM と管理] > [設定] メニュー項目を選択します。

  9. このページで定義されているプロジェクト番号をコピーします。

  10. Apps Script プロジェクトで、[プロジェクト] [設定] > Google Cloud [プロジェクト] メニュー項目を選択し、[Enter Project Number here] ダイアログにプロジェクト番号を貼り付けます。

  11. [プロジェクトを設定] をクリックします。

Google Chat API を有効にする

  1. > [API とサービス] に移動し、[ライブラリ] を選択します。
  2. Google Chat API」を検索し、唯一の結果をクリックします。
  3. [有効にする] をクリックします。

これにより、プロジェクトで API が有効になります。

bot をデプロイする

  1. Apps Script UI で、[デプロイ] > [新しいデプロイ] に移動します。
  2. 新しいデプロイタイプとして [アドオン] を選択します。
  3. デプロイ名と説明を入力し、[保存] をクリックします。
  4. 保存が完了したら、作成したデプロイの横にある [ID を取得] をクリックし、デプロイ ID の値をコピーします。

Google Chat 用 bot を構成します。

  1. Google Cloud コンソールで、☰ > [API とサービス] > [ダッシュボード] に移動します。
  2. 有効になっている API のリストで、[Google Chat API] を選択します。
  3. [管理] をクリックして、Google Chat API ページを開きます。
  4. 開いたページで [設定] タブを選択し、ボットの設定を行います。

    • [アプリ名] フィールドに「Google Security Operations Chat App」と入力します。
    • [アバターの URL] フィールドに「https://developers.google.com/chat/images/chat-product-icon.png」と入力します。
    • [説明] フィールドに、「Google SecOps Chat App that can be used to send messages from Google SecOps to a Google Chat Spaces」と入力します。
    • [機能] セクションで、[アプリは複数のユーザーが存在するスペースで動作します] を選択します。
    • [接続設定] セクションで、[Apps Script プロジェクト] を選択し、ボットをデプロイするの手順で取得したデプロイ ID を貼り付けます。
    • [権限] セクションで、[ドメイン内の特定のユーザーとグループ] を選択し、ボットとやり取りできるユーザーを指定します。
    • [保存] をクリックします。アプリの構成が完了しました。

Google Chat アプリはスペースを作成(会話を開始)できないため、メッセージを送信するスペースに Google SecOps Chat アプリを追加する必要があります。

統合が構成されると、「スペースを一覧表示」アクションを使用して、Google SecOps アプリがアクセスできる(メッセージを送信できる)スペースを取得できます。

[スペースを一覧表示] アクションで利用可能なスペースが表示されない場合、アプリはどのスペースにもメッセージを送信できません。上記の詳細な手順に戻り、各ステップを慎重に実行したことを確認してください。

Google SecOps で Google Chat インテグレーションを構成する

Google SecOps で統合を構成する手順の詳細については、統合を構成するをご覧ください。

統合のパラメータ

次のパラメータを使用して統合を構成します。

パラメータの表示名 種類 デフォルト値 必須 説明
API ルート URL 文字列 https://chat.googleapis.com/ 統合が Google Chat サービスへの接続に使用する API ルート URL。
サービス アカウント パスワード なし チャットボットが Google Chat サービスを操作するために使用するサービス アカウントの JSON ファイルの内容。
SSL を確認する チェックボックス オン 有効になっている場合は、Google Chat サービスへの接続用の SSL 証明書が有効であることを確認します。

アクション

Ping

説明

[Google Security Operations Marketplace] タブの統合構成ページで提供されているパラメータを使用して、Google Chat への接続をテストします。

実行

このアクションはエンティティに対しては実行されず、必須入力パラメータもありません。

アクションの結果

スクリプトの結果
スクリプトの結果名 値のオプション
is_success True/False is_success:False
Case Wall
結果のタイプ 値 / 説明 タイプ
出力メッセージ *

アクションが失敗したり、ハンドブックの実行を停止したりすることはありません。

成功した場合:「指定された接続パラメータを使用して Google Chat サービスに正常に接続されました。」

アクションが失敗し、ハンドブックの実行が停止します。

認証情報の誤りや接続の切断などの重大なエラーが報告された場合: 「Google Chat サービスへの接続に失敗しました。エラー: {0}".format(exception.stacktrace)」

全般

スペースの一覧表示

説明

現在構成されている Google Chat 用 bot が追加されているスペースを一覧表示します。

パラメータ

パラメータの表示名 種類 デフォルト値 必須 説明
フィルタ キー DDL

1 つ選択

有効な値:

  • 名前
  • 表示名
  • タイプ
× Google Chat スペースのフィルタリングに使用する必要があるキーを指定します。
フィルタ ロジック DDL

指定なし

有効な値:

  • 指定なし
  • 等しい
  • Contains
× 適用するフィルタ ロジックを指定します。フィルタリング ロジックは、「フィルタ キー」パラメータで指定される値に基づいて機能します。
フィルタ値 文字列 なし いいえ

フィルタで使用する値を指定します。

「Equal」が選択されている場合、アクションは結果から完全一致を探します。

「Contains」が選択されている場合、アクションは指定された部分文字列を含む結果を検索します。

このパラメータに何も指定しない場合、フィルタは適用されません。フィルタリング ロジックは、「フィルタ キー」パラメータで指定される値に基づいて機能します。

返されるレコードの最大数 整数 50 いいえ

返すレコードの数を指定します。

何も指定しないと、アクションは 50 件のレコードを返します。

ユーザー メンバーシップを含める チェックボックス オフ × 有効にすると、ユーザーのメンバーシップ情報がアクションの [Case Wall] テーブルと JSON 結果に追加されます。

実行

このアクションはエンティティに対しては実行されません。

アクションの結果

スクリプトの結果
スクリプトの結果名 値のオプション
is_success True/False is_success:False
ケースウォール
結果のタイプ 値 / 説明 種類
出力メッセージ *

アクションが失敗したり、ハンドブックの実行を停止したりすることはありません。

データが利用可能な場合(is_success=true):「Google Chat で指定された条件に該当するスペースが正常に見つかりました。」

データが利用できない場合(is_success=false):「Google Chat で指定された条件に該当するスペースが見つかりませんでした。」

「フィルタ値」パラメータに値がない場合(is_success=true):

「パラメータ「フィルタ値」の値が空であるため、フィルタは適用されませんでした。」

アクションが失敗し、ハンドブックの実行が停止します。

「フィルタ キー」パラメータが「1 つ選択」に設定され、「フィルタ ロジック」パラメータが「Equal」または「Contains」に設定されている場合:

「アクション「スペースの一覧表示」の実行エラー。理由: 「フィルタ キー」パラメータからフィールドを選択する必要があります。」

「返される最大レコード数」パラメータに無効な値が指定されている場合:

「アクション「スペースの一覧表示」の実行エラー。理由: 「返される最大レコード数」に無効な値が指定されました。正の数を指定してください。」

認証情報が誤っている、サーバーへの接続がないなど、致命的なエラーが報告された場合:

「アクション「スペースの一覧表示」の実行エラー。理由: {0}」.format(error.Stacktrace)

一般
Case Wall テーブル

テーブル名: ボットが追加された使用可能なスペーステーブル列: {fields}

注: [ユーザー メンバーシップを含める] チェックボックスをオンにすると、スペース メンバーの表示名を含む列が追加されます。

全般

メッセージを送信

説明

Google SecOps アプリケーションが追加された Google Chat スペースにメッセージを送信します。

パラメータ

パラメータの表示名 種類 デフォルト値 必須 説明
スペース名 文字列 なし

メッセージの送信先となるスペース名を指定します。

スペース名の例: AAAAdaTsel0

メッセージ文 文字列 なし 送信するメッセージのテキストを指定します。

実行

このアクションはエンティティに対しては実行されません。

アクションの結果

スクリプトの結果
スクリプトの結果名 値のオプション
is_success True/False is_success:False
ケースウォール
結果のタイプ 値 / 説明 種類
出力メッセージ *

アクションが失敗したり、ハンドブックの実行を停止したりすることはありません。

メッセージが正常に送信された場合(is_success=true):「メッセージは正常に送信されました。」

アクションが失敗し、ハンドブックの実行が停止します。

接続がない、認証情報が間違っているなどの重大なエラーが報告された場合: 「アクション「メッセージを送信」の実行エラー。理由: {0}」.format(error.Stacktrace)

全般

高度なメッセージを送信する

説明

指定されたメッセージ JSON ペイロードに基づいて、Google Chat スペースに高度なメッセージを送信します。

パラメータ

パラメータの表示名 種類 デフォルト値 必須 説明
スペース名 文字列 なし

メッセージの送信先となるスペース名を指定します。

スペース名の例: AAAAdaTsel0

メッセージの JSON ペイロード 文字列 {"cards":[{"sections":[{"widgets":[{"image":{"imageUrl":"https://..."}},{"buttons":[{"textButton":{"text":"OPEN IN GOOGLE MAPS","onClick":{"openLink":{"url":"https://..."}}}}]}]}]}]}

メッセージとともに送信する JSON ペイロードを指定します。

メッセージ ペイロードの例については、こちらの記事をご覧ください。

実行

このアクションはエンティティに対しては実行されません。

アクションの結果

スクリプトの結果
スクリプトの結果名 値のオプション
is_success True/False is_success:False
ケースウォール
結果のタイプ 値 / 説明 種類
出力メッセージ *

アクションが失敗したり、ハンドブックの実行を停止したりすることはありません。

メッセージが正常に送信された場合(is_success=True): 「メッセージは正常に送信されました。」

アクションが失敗し、ハンドブックの実行が停止します。

指定された JSON ペイロードが無効な場合: 「アクション「高度なメッセージを送信」の実行エラー。理由: 指定されたメッセージ JSON ペイロードが無効です。」

接続がない、認証情報が間違っているなどの重大なエラーが報告された場合: 「アクション「高度なメッセージを送信」の実行エラー。理由: {0}」.format(error.Stacktrace)

全般

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。