Cloud Ace Tech Blog
🐧

標準機能だけで実現!Google Cloud で許可外IPからのアクセスを検知・通知する方法

はじめに

こんにちは、クラウドエースの梶尾です。

Google Cloud の運用保守を進める中で、「社内ネットワーク以外のIPアドレスからのアクセスを防ぎたい」という課題は避けて通れません。

正直なところ、Google Workspace の有料ライセンス(Context-Aware Access)を契約して入り口でシャットアウトするのが一番手軽かつ確実な方法です。
ただ、予算の都合で「ライセンス費用は出せないけれど、許可してないIPアドレスからのアクセスには即座に気づけるようにしたい」というケースは少なくありません。

そこで今回は、追加費用ゼロ。
Google Cloud 標準機能の Cloud Logging と Cloud Monitoring だけを使ってこの要件を実現するアプローチを試してみました。

この記事では、実際に設定する中で「初見だと確実に誤報が連発してしまうだろう」と感じた現場のリアルな課題と、その回避策を実際の構築手順と合わせて解説します。

システムの全体像

今回やることは「監査ログをクエリで絞り込んで、引っかかったらアラートを飛ばす」だけです。
大まかな流れは以下の通りです。

  1. 監査ログの出力
    Google Cloud の Cloud Audit Logs(監査ログ) を使うと、「誰が・どこから・何をしたか」を記録・確認できます。

    • 設定変更(書き込み):標準で自動的に記録されます。
    • データ閲覧(読み取り):ログが膨大になるため標準ではオフです。

    ※セキュリティ監査などで閲覧履歴も残したい場合は、あらかじめ手動で有効化しておく必要がある点にご注意ください。

  2. リソースを操作する
    設定変更を伴う操作を行います(この操作によって監査ログが生成されます)。
    例えば、Compute Engine のインスタンスにテスト用のラベルを追加したり、新しくダミーのファイアウォールルールを作成したりします。

  3. アラート通知
    最後に Cloud Monitoring を使い、作成したクエリをアラートのトリガーとして設定します。
    実際に許可外のIPアドレスが引っかかったタイミングで、管理者のメールや Slack へ自動で通知が飛ぶようにします。

新しくサードパーティ製のツールを導入する必要がなく、Google Cloud の標準機能だけでサクッと完結できるのが、この構成のメリットです。

アラートの設定方法

それでは、ログエクスプローラを開いて実際に設定を進めていきましょう。
まずは [Logging] > [ログ エクスプローラ] を開き、画面右側にある [操作] > [ログアラートの作成] を選択します。
ログアラートの作成

①Alert details

ここではアラートの基本情報を設定していきます。

  • Alert Policy Name
    「許可外IPアドレスアクセス検知」など、パッと見て何のアラートか分かる名前をつけておきます。
  • Policy Severity Level
    運用のルールに合わせて、任意のレベル(Warning や Critical など)を設定してください。
  • Documentation
    ここに書いたテキストがそのまま通知メールの本文になります。
    いざアラートが飛んできたときに慌てないよう、以下のような「初動対応のマニュアル」を仕込んでおくのがおすすめです。
通知メール
## ⚠️ 許可外ネットワークからのアクセスを検知しました

指定された社内IPアドレス以外から、Google Cloud 環境へのアクセスがありました。
不正アクセスの可能性があります。

### 担当者が実施する初動対応
1. 以下の「VIEW INCIDENT」ボタンから、該当のアクセス元IPアドレスと操作内容を確認してください。
2. 社内の正規ユーザーによるアクセスではないか確認してください。
3. 身元不明のアクセスの場合は、直ちに該当アカウントを停止し、セキュリティチームへ報告してください。

このように設定しておくと、実際に届く通知メールには以下のように表示されます。
通知メール本文

②Choose logs to include in the alert

ここが一番重要なログの絞り込み設定です。通知の対象となる条件を指定していきます。

  • Define log entries to alert on
    条件となるクエリを入力します。
    XXX.XXX.XXX.XXX/XX の部分は、ご自身の環境で「許可したいIPアドレス(社内のネットワークなど)」に置き換えてください。
クエリ
logName=~"cloudaudit.googleapis.com"
NOT protoPayload.requestMetadata.callerIp="private"
NOT protoPayload.requestMetadata.callerIp="gce-internal-ip"
NOT ip_in_net(protoPayload.requestMetadata.callerIp, "***.**.***.*/24")

複数箇所(複数のIPアドレスやIPアドレス帯)を許可したい場合
「本社と支店」「社内ネットワークと特定の社外用VPN」など、許可したい場所が複数ある場合は、以下のように NOT ip_in_net(...) の行を下に並べて記述します。

クエリ
logName=~"cloudaudit.googleapis.com"
NOT protoPayload.requestMetadata.callerIp="private"
NOT protoPayload.requestMetadata.callerIp="gce-internal-ip"
NOT ip_in_net(protoPayload.requestMetadata.callerIp, "***.**.***.*/24")
NOT ip_in_net(protoPayload.requestMetadata.callerIp, "***.**.***.*/24")
NOT ip_in_net(protoPayload.requestMetadata.callerIp, "***.**.***.*/24")
  • Extract log labels
    このままでは、通知メールが届いたときに「許可外のIPアドレスからアクセスがあった」ということしかわかりません。
    具体的なIPアドレスやアカウントを特定するために、毎回ログエクスプローラを開きに行くのは手間になってしまいます。
    そこで、あらかじめ以下の設定を追加しておきます。
    これだけで、通知メールの中に「アクセス元のIPアドレス」と「操作したユーザーのメールアドレス」を直接埋め込むことができます。
「IPアドレス」を抽出したい場合
Display name: caller_ip (任意の名前でOK)
Log field name: protoPayload.requestMetadata.callerIp
正規表現: 未記入でOK
「メールアドレス」を抽出したい場合
Display name: principal_email (任意の名前でOK)
Log field name: protoPayload.authenticationInfo.principalEmail
正規表現: 未記入でOK

③Set notification frequency and autoclose duration

ここでは、アラートを通知するタイミングや、インシデントの管理期間を設定します。

  • 通知の間隔
    デフォルトは「1時間」になっていますが、ここは「5分」など短めに変更しておくのがおすすめです。
    そのままだと、最初の検知から1時間以内に別の怪しいアクセスがあっても、次の通知が抑制されて届かなくなってしまいます。
    複数回のアクセスも見落とさずにキャッチできるよう、ここは短く設定しておきます。
    (※仕様上、設定できる最小の間隔は「5分」となります)

  • インシデントの自動クローズ期間
    こちらは、デフォルトの「7日間」のままにしておきます。
    この期間を短くしすぎると、週末のアラートが休み明けに勝手に「解決済み」になってしまいます。
    その結果、内容を確認しないまま見落とす可能性があるため注意が必要です。
    (※仕様上、自動クローズ機能を完全に無効化することはできません。設定可能なカスタム値の範囲は「30分〜7日間」となります)

④Who should be notified?

最後に、アラートをどこに飛ばすかという「通知先」を設定します。

  • 通知チャンネル
    通知先の一覧から、アラートを飛ばしたい連絡先を選択します。
    まだ登録していない場合は、[Manage Notification Channels] から [Slack] や [Email] などをあらかじめ追加しておいてください。

以下は [Email] を新しく追加するときの設定画面です。
Email

必要な通知先をチェックしたら、一番下にある [保存] をクリックすればすべてのアラート設定が完了です。

確認方法

設定が終わったら、本当に正しく動くかテストしてみましょう。

まずは、[Monitoring] > [アラート] > [Policies] を開き、先ほど作成したアラート名が一覧にあれば、ポリシーの作成自体は無事に完了しています。
アラート設定確認

確認のために、以下の手順で実際に「許可外のIPアドレス」からアクセスしてアラートを飛ばしてみます。

  1. 許可外ネットワークからアクセスする
    会社の Wi-Fi を切り、スマートフォンのテザリングや自宅のネットワークなど、許可リストに入れていないIPアドレスから Google Cloud コンソールにログインします。
  2. リソースを操作する
    [VPC ネットワーク] > [ファイアウォール] を開き、[ファイアウォール ルールを作成] から適当なテスト用のダミーのルールを1つ作成します。(※インスタンスのラベル変更などでも構いません)
  1. アラートメールの受信を確認する
    数分以内に、設定した管理者の連絡先に Cloud Monitoring からアラート通知のメールが届けばテストは成功です。
  2. インシデントをクローズする
    確認が終わったら、[Monitoring] > [アラート] > [インシデント] を開きます。
    テスト用に発生させたインシデントを手動で「クローズ」して、正常な状態に戻しておきましょう。

アラートの無効化・削除方法

もし検証が終わってアラートが不要になった場合や、一時的に通知を止めたい場合は、以下の手順で無効化または削除ができます。

  1. 対象のアラートポリシーを開く
    [Monitoring] > [アラート] > [Policies] を開きます。
  2. 目的に合わせてステータスを変更する
    状況に応じて、以下のいずれかの操作を行います。
    • 完全に削除したい場合:作成したアラートポリシーの右側にある [︙] メニューをクリックし、[削除] を選択します。
    • 一時的に通知を止めたい場合:一覧の右側にある「有効」のトグルスイッチを [オフ] に切り替えます。

さいごに

今回は、Cloud Logging と Cloud Monitoring を使って、許可外のIPアドレスからのアクセスにいち早く気づくための仕組みを作ってみました。

最初にお話しした通り、一番確実なのは「有料ライセンスを使って入り口で完全にアクセスを遮断すること」です。
ただ、予算の都合などでそれがどうしても難しいケースもあると思います。

完全にアクセスを制限する設定ができなくても、今回のように「何かあればすぐにメールや Slack で検知できる状態」にしておくだけで、運用保守上のリスクはかなり抑えられます。

Google Cloud の標準機能だけでサクッと作れて追加コストもかからないので、「まずは手軽にセキュリティの網を張っておきたい」という場合は、ぜひ試してみてください。

Cloud Ace Tech Blog
Cloud Ace Tech Blog

Discussion