AUTOMATION NOTE — 092

Context-Aware Access モニターモードでゼロショック導入を実現する

Google Workspace の Context-Aware Access (CAA) は、ユーザーの状況に応じたアクセス制御を可能にする機能です。本記事では、CAA ポリシーを本番環境に適用する前に、モニターモードを活用して影響範囲を安全に評価し、ポリシーを調整する具体的な方法を解説します。

この記事を読んだほうが良い人

  • Google Workspace の Context-Aware Access (CAA) 導入を検討している情シス担当者
  • CAA ポリシー導入によるユーザーへの影響を懸念している方
  • ゼロトラストセキュリティモデルの段階的な導入方法を探している方
  • Google Workspace の監査ログ分析を自動化したいと考えている方

Context-Aware Access(CAA)とは?ゼロトラスト実現への第一歩

Context-Aware Access (CAA) は、Google Workspace のセキュリティ機能の一つで、ユーザーのデバイスタイプ、IPアドレス、地理的位置、セキュリティステータスなどの「コンテキスト」に基づいて、Google Workspace アプリケーションへのアクセスをきめ細かく制御します。これは、ゼロトラストセキュリティモデルにおいて、「どこからでも、どんなデバイスからでも」アクセスを許可しつつ、セキュリティリスクを最小限に抑えるための重要な要素です。

例えば、「社内ネットワークからのみアクセス可能」「会社貸与のデバイスからのみアクセス可能」「特定の国からはアクセス不可」といったポリシーを設定できます。これにより、不正アクセスリスクを低減し、情報漏洩対策を強化できます。

ユーザー影響を最小化する「モニターモード」の重要性

CAAは強力なセキュリティ機能である一方で、厳しすぎるポリシーを設定してしまうと、正当なユーザーの業務を妨げ、思わぬロックアウトを引き起こす可能性があります。特に、従業員が多様な働き方をしている環境では、すべてのユーザーのアクセスパターンを事前に予測することは困難です。

そこで活用したいのが、CAAのモニターモードです。モニターモードは、設定したポリシーが実際に適用された場合に、どのユーザーが、どのような理由でアクセスをブロックされるかをシミュレーションし、その結果を監査ログに記録する機能です。このモードでは、実際にアクセスがブロックされることはなく、ユーザー体験に影響を与えることなくポリシーの影響範囲を正確に把握できます。これにより、情シス担当者は「ゼロショック」でCAAを導入するための準備を進められます。

Context-Aware Access モニターモードの設定手順

モニターモードの活用は、CAAポリシーを安全に導入するための最初の一歩です。ここでは、具体的な設定手順を解説します。

1. ポリシーの作成と設定

Google Workspace 管理コンソールでCAAポリシーを作成します。

  1. Google Workspace 管理コンソールにログインします。
  2. セキュリティ > アクセスとデータ管理 > Context-Aware Access に移動します。
  3. アクセスレベル をクリックし、アクセスレベルを作成 を選択します。
  4. アクセスレベル名(例: 社内ネットワーク限定)と説明を入力し、条件を追加 でアクセス条件を設定します。
    • IPアドレス: 社内ネットワークのグローバルIPアドレス範囲を指定します。
    • デバイスの属性: OSの種類、画面ロックの有無、会社所有デバイスであるかなどを指定します。
    • 地域: アクセス元の国を指定します。
  5. 条件を結合する で条件を AND または OR で結合します。
  6. 保存 をクリックしてアクセスレベルを保存します。

次に、このアクセスレベルをアプリケーションに適用するポリシーを作成します。

  1. Context-Aware Access のページに戻り、Context-Aware Access ポリシー をクリックします。
  2. ポリシーを作成 を選択します。
  3. ポリシー名(例: Gmail社内制限)と説明を入力します。
  4. 割り当てるアプリ で、このポリシーを適用したいアプリ(例: Gmail)を選択します。
  5. アクセスレベル で、先ほど作成したアクセスレベル(例: 社内ネットワーク限定)を選択します。
  6. ユーザーグループ で、このポリシーを適用するユーザーやグループを指定します。

2. モードを「モニター」に設定

ポリシーが作成できたら、いよいよモニターモードを設定します。これが本番適用前の検証で最も重要なステップです。

  1. ポリシー作成画面の モード セクションで、モニター を選択します。
    • ブロック: ポリシーに違反したアクセスを実際にブロックします。
    • 許可: ポリシーに違反しないアクセスを許可します(通常は設定しません)。
    • モニター: ポリシー違反をログに記録しますが、アクセスはブロックしません。
  2. 許可されていないユーザーに表示するメッセージ に、ポリシー違反時に表示されるメッセージ(ただしモニターモードでは表示されません)を設定します。
  3. 作成 または 保存 をクリックしてポリシーを確定します。

これで、設定したCAAポリシーがモニターモードで稼働し始めます。ユーザーは通常通りアクセスできますが、もしポリシーに違反するアクセスがあった場合、その情報が監査ログに記録されます。

モニターモードで収集した監査ログを分析する

モニターモードで収集されたログを分析することで、どのユーザーがどのような状況でポリシーに違反したかを確認し、ポリシーのチューニングに役立てます。

Google Workspace 管理コンソールでの確認

簡易的な確認であれば、管理コンソールの監査ログから確認できます。

  1. Google Workspace 管理コンソールにログインします。
  2. レポート > 監査と調査 > Context-Aware Access ログイベント に移動します。
  3. 期間を指定して検索すると、CAAポリシーに違反した(または準拠した)イベントが表示されます。
  4. 各イベントの詳細を確認することで、ユーザー、デバイス情報、アクセスレベル、ポリシーの結果(BLOCKED と表示されていれば、モニターモードでブロック対象になったことを意味します)などを把握できます。

Admin Reports API を活用した詳細分析(GASコード)

管理コンソールでの確認は便利ですが、大量のログから特定の傾向を分析したり、定期的にレポートを作成したりするには、プログラムによる自動化が有効です。ここでは、Google Apps Script (GAS) を使用して Admin Reports API から CAA ログを抽出し、分析するコード例を紹介します。

このスクリプトは、指定した期間のログイン活動レポートを取得し、Context-Aware Accessによってブロック対象となったイベントを抽出します。

/**
 * Context-Aware Access モニターモードの監査ログを Admin Reports API から取得し、
 * ブロック対象となったイベントを抽出する。
 */
function getCaaMonitorLogs() {
  const SPREADSHEET_ID = 'YOUR_SPREADSHEET_ID_HERE'; // 結果出力用スプレッドシートID
  const SHEET_NAME = 'CAA Monitor Logs'; // シート名

  // ログ取得期間を設定(例: 過去7日間)
  const endDate = new Date();
  const startDate = new Date();
  startDate.setDate(endDate.getDate() - 7); // 7日前

  const startTime = startDate.toISOString();
  const endTime = endDate.toISOString();

  let pageToken;
  let allCaaBlockedEvents = [];

  try {
    do {
      const response = AdminReports.Activities.list('login', {
        userKey: 'all', // すべてのユーザー
        startTime: startTime,
        endTime: endTime,
        maxResults: 1000,
        pageToken: pageToken
      });

      if (response.items && response.items.length > 0) {
        response.items.forEach(activity => {
          // Context-Aware Access 関連のイベントをフィルタリング
          if (activity.events) {
            activity.events.forEach(event => {
              if (event.name === 'ContextAwareAccess') {
                const status = event.parameters.find(p => p.name === 'status');
                const reason = event.parameters.find(p => p.name === 'reason');
                const accessLevel = event.parameters.find(p => p.name === 'access_level_name');
                const app = event.parameters.find(p => p.name === 'application_name');
                const policyMode = event.parameters.find(p => p.name === 'policy_mode'); // モニターモードか確認

                // モニターモードで「BLOCKED」となったイベントを抽出
                if (status && status.value === 'BLOCKED' && policyMode && policyMode.value === 'MONITOR') {
                  allCaaBlockedEvents.push([
                    new Date(activity.id.time),
                    activity.actor.email,
                    status ? status.value : 'N/A',
                    reason ? reason.value : 'N/A',
                    accessLevel ? accessLevel.value : 'N/A',
                    app ? app.value : 'N/A',
                    policyMode ? policyMode.value : 'N/A'
                  ]);
                }
              }
            });
          }
        });
      }
      pageToken = response.nextPageToken;
    } while (pageToken);

    // スプレッドシートに出力
    const spreadsheet = SpreadsheetApp.openById(SPREADSHEET_ID);
    const sheet = spreadsheet.getSheetByName(SHEET_NAME) || spreadsheet.insertSheet(SHEET_NAME);

    // ヘッダー行を追加
    const headers = ['日時', 'ユーザーメール', 'ステータス', '理由', 'アクセスレベル', 'アプリケーション', 'ポリシーモード'];
    sheet.getRange(1, 1, 1, headers.length).setValues([headers]).setFontWeight("bold");

    // 既存データをクリアして新しいデータを書き込む
    if (allCaaBlockedEvents.length > 0) {
      sheet.getRange(2, 1, sheet.getLastRow(), headers.length).clearContent();
      sheet.getRange(2, 1, allCaaBlockedEvents.length, allCaaBlockedEvents[0].length).setValues(allCaaBlockedEvents);
    } else {
      sheet.getRange(2, 1, sheet.getLastRow(), headers.length).clearContent();
      sheet.getRange(2, 1).setValue('過去7日間でContext-Aware Accessモニターモードによるブロック対象イベントは見つかりませんでした。');
    }

    Logger.log('CAAモニターログの抽出が完了しました。');

  } catch (e) {
    Logger.log('エラーが発生しました: ' + e.toString());
  }
}

GASコードの利用手順

  1. Google Apps Script プロジェクトの作成:
    • Google ドライブで新しいスプレッドシートを作成し、拡張機能 > Apps Script を選択します。
  2. Admin SDK API の有効化:
    • Apps Script エディタの左側にある サービス (+ アイコン) をクリックします。
    • Admin SDK API を探し、追加 をクリックします。
  3. スプレッドシートIDの設定:
    • GASコード内の const SPREADSHEET_ID = 'YOUR_SPREADSHEET_ID_HERE'; の部分を、結果を出力したいスプレッドシートのIDに置き換えます(スプレッドシートのURL https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit から取得できます)。
  4. スクリプトの実行:
    • getCaaMonitorLogs 関数を選択し、実行ボタンを押します。初回実行時には承認を求められますので、指示に従って許可してください。

このスクリプトを実行すると、指定したスプレッドシートに、CAAモニターモードでブロック対象となったユーザーのアクセスログが一覧で出力されます。これにより、どのユーザーが、どのアプリケーションに、どのような理由でアクセスがブロックされそうになったのかを詳細に把握できます。

監査ログ分析に基づくポリシーのチューニングと本番適用

収集したログを分析し、CAAポリシーを本番環境に適用する前に最終的な調整を行います。

ポリシーチューニングの判断フロー

ログの傾向 判断 アクション
特定のユーザー/グループのみブロック そのユーザー/グループのアクセスパターンが特殊か、ポリシーの対象外とすべきか検討 - ポリシーの適用対象から除外するユーザー/グループを指定する
- アクセスレベルに例外条件を追加する(例: 特定のIPアドレスからのアクセスは許可)
多くのユーザーが同じ理由でブロック ポリシーの条件が厳しすぎるか、想定外の環境からのアクセスが多い可能性 - アクセスレベルの条件を緩和する(例: 特定のデバイス属性を必須としない)
- ユーザーへの事前周知と環境整備を強化する(例: VPN利用の徹底、会社貸与デバイス利用の促進)
業務時間外や特定地域からのブロック 想定通りのセキュリティ効果 - ポリシーは適切と判断。本番適用を進める
全くブロックイベントがない ポリシーが緩すぎるか、テストが不足している可能性 - アクセスレベルの条件を強化する
- 意図的にポリシー違反を発生させるテストを実施する
- 異なるアクセスパターンを持つユーザーにモニターモードでの利用を促す

本番適用前の最終チェックリスト

モニターモードでの検証とポリシーチューニングが完了したら、本番適用に進む前の最終チェックを行います。

  • [ ] ポリシー条件の最終確認: 抽出したログに基づき、ポリシーの条件が意図した通りになっているか、過不足がないかを確認。
  • [ ] 対象ユーザー/グループの確認: ポリシーが適用されるユーザーまたはグループが正しいか、例外が必要なユーザーが含まれていないかを確認。
  • [ ] 影響範囲の周知計画: ポリシー適用後にアクセスがブロックされる可能性があるユーザーに対し、事前に十分な周知と代替手段(VPN利用、貸与PC利用など)の案内を計画。
  • [ ] サポート体制の準備: ポリシー適用後に発生する可能性のある問い合わせやトラブルに対応するためのサポート体制を整える。
  • [ ] ロールバック計画: 万が一、本番適用後に重大な問題が発生した場合に、迅速にポリシーを無効化または緩和するための手順を準備。
  • [ ] ログ監視体制の確立: 本番適用後も継続的にCAAログを監視し、予期せぬアクセスブロックや不正アクセスの兆候がないかを確認する体制を構築。

これらのチェックをクリアしたら、CAAポリシーのモードを「モニター」から「ブロック」に変更し、本番環境に適用します。段階的な導入と綿密な事前検証により、ユーザーへの影響を最小限に抑えつつ、Google Workspace のセキュリティを強化できます。

まとめ:Context-Aware Access モニターモードで安全なゼロトラスト導入を

Context-Aware Access (CAA) は、Google Workspace 環境におけるゼロトラストセキュリティ実現の鍵となる強力な機能です。しかし、その強力さゆえに、安易な本番適用はユーザーの業務を妨げるリスクを伴います。

今回解説したモニターモードを活用することで、情シス担当者はユーザーに影響を与えることなくCAAポリシーの影響範囲を正確に把握し、監査ログ分析を通じてポリシーを綿密にチューニングできます。GASとAdmin Reports APIを用いたログの自動分析は、大量のログから効果的なインサイトを得るための強力な手段です。

安全な検証と段階的な導入プロセスを経ることで、情シスは自信を持ってCAAを導入し、組織のセキュリティレベルを向上させることが可能になります。ゼロショック導入を実現し、よりセキュアなGoogle Workspace 環境を構築しましょう。

コーポレートITのご相談はお気軽に

この記事で書いたような業務改善・自動化の設計から実装まで、DRASENASではコーポレートITの現場に寄り添った支援を行っています。 「まず相談だけ」でも大歓迎です。DRASENAS 公式サイトからお気軽にどうぞ。

CONTACT

御社の IT 部門、ここにあります。

「ITのことはあまりわからない」── そのような状態からで、まったく問題ございません。まずはお気軽にご相談ください。

一社ずつ、一から。