【Google Cloud】コンソールログインのログはどこに出る?
はじめに
これまで CloudTrail を活用し AWS マネジメントコンソールに対するログインを監視してきました。しかし昨今 Google Cloud や Azure を使ったマルチクラウドでのシステム構築が増えており、AWS の監視だけではセキュリティ的に十分とは言い難いと感じています。
今回は Google Cloud のコンソールに対するログイン操作はログで監視できるのか、できるとしたらどこに・どのようなログが出力されるのか、調査したことを本投稿にまとめておきたいと思います。
同じ課題を持たれた方々の目に留まり、何かの役に立てば幸いです!
前提
Google Cloud のログインに必要な ID には、大きく分けて下記 3 つの方式があります。
- Google Workspace 組織の ID
- Cloud Identity 組織の ID
- 組織外のユーザー ID(無償の Gmail アカウントなど)
本投稿では、上記 1 の Google Workspace のユーザーによるログインを対象としています。
本対象範囲
【補足】
・3rd Party IdP による SSO は上記の 1 や 2 との連携となります。
【参考】
・Google ID 管理の概要
利用環境
- Google Workspace Business Standard エディションを利用しています
- 特権管理者ロールのユーザーで操作しています
実施内容
下記の 4 つの方法でトライしました。
- Cloud Logging での検索
- Google Workspace 管理コンソールのレポート
- Cloud Logging でのリベンジ検索
- Cloud Resource API のログ検索
1. Cloud Logging での検索
まず、Google Cloud のコンソール にログインします。
ログイン後、[すべてのプロダクト] > [オブザーバビリティ] > [ロギング]
を開きます。
ログエクスプローラを開く
条件指定せず、すべてのログを検索するもログインのログは出力されていませんでした。
(IAM で権限付与したログの出力のみ)
ログの検索結果
【補足】
・Cloud Logging に蓄積されたログを閲覧・検索するには
事前に (ログ閲覧者)roles/logging.viewer
のロールを割り当ててください。
ログ閲覧者のロール
【参考】
・Cloud Logging 公式サイト
・Cloud Logging の概要
2. Google Workspace 管理コンソールのレポート
次は、Google Workspace の管理コンソールのレポート機能を検索してみます。
Google Workspace 管理コンソール にログインします。
[レポート] > [監査と調査] > [ユーザーのログイベント]
を開きます。
ユーザーのログイベント
[検索]
ボタンを押してログを検索します。
ユーザーのログイベントの検索
Google Cloud コンソールにログインした時刻と同一のログイン成功のイベントがありました。
ログイン成功のログ
ログが出力され、めでたしめでたし!と言いたいところですが、このログではダメですね。
Google Workspace 認証を使ったログイン操作が全部ログに出力されてしまうため
どこにログインしたことが特定できない という問題があり、残念ながらこれは使えませんでした。
【参考】
・ユーザーのログイベント
・データの保持期間とタイムラグ
3. Cloud Logging でのリベンジ検索
追加調査で Google Workspace 監査ログを Cloud Logging に転送できることがわかりました。
ここでは Cloud Logging にログ連携させて Google Workspace 管理コンソールで見るよりも
詳細な情報が見れないかを確認します。
Google Workspace 管理コンソール で [アカウント] > [アカウント設定] > [法とコンプライアンス]
を開きます。
法とコンプライアンスを開く
[法とコンプライアンス]
内の [共有オプション]
にカーソルを合わせ [編集]
ボタンを押し
有効
を選択後に保存ます。
共有オプションの有効化
Cloud Logging への連携設定は以上です。(簡単です)
ログインイベントは数時間のタイムラグがあるため、すぐには連携されませんが
ログインしてから半日すれば Cloud Logging に google.login.LoginService.loginSuccess
というメソッド名のイベントが出力されます。
Cloud Logging でのログ検索
以下、ログイン成功のサンプルログになります。
{
"protoPayload": {
"@type": "type.googleapis.com/google.cloud.audit.AuditLog",
"authenticationInfo": {
"principalEmail": "hibino@example.com"
},
"requestMetadata": {
"callerIp": "40.89.32.76",
"requestAttributes": {},
"destinationAttributes": {}
},
"serviceName": "login.googleapis.com",
"methodName": "google.login.LoginService.loginSuccess",
"resourceName": "organizations/9999999999999",
"metadata": {
"activityId": {
"timeUsec": "1738168372788752",
"uniqQualifier": "-1100512100571736825"
},
"@type": "type.googleapis.com/ccc_hosted_reporting.ActivityProto",
"event": [
{
"eventName": "login_success",
"eventId": "3eed4ce6",
"eventType": "login",
"parameter": [
{
"label": "LABEL_OPTIONAL",
"name": "login_type",
"value": "reauth",
"type": "TYPE_STRING"
},
{
"multiStrValue": [
"password"
],
"label": "LABEL_REPEATED",
"name": "login_challenge_method",
"type": "TYPE_STRING"
},
{
"boolValue": false,
"label": "LABEL_OPTIONAL",
"type": "TYPE_BOOL",
"name": "is_suspicious"
},
{
"type": "TYPE_STRING",
"name": "dusi",
"label": "LABEL_OPTIONAL",
"value": "IPy_p9jgqNnRNA"
}
]
}
]
}
},
"insertId": "-7pzsjtegh6g3",
"resource": {
"type": "audited_resource",
"labels": {
"service": "login.googleapis.com",
"method": "google.login.LoginService.loginSuccess"
}
},
"timestamp": "2025-01-29T16:32:52.788752Z",
"severity": "NOTICE",
"logName": "organizations/9999999999999/logs/cloudaudit.googleapis.com%2Fdata_access",
"receiveTimestamp": "2025-01-29T18:40:31.969162048Z"
}
JSON 形式でより詳細な情報が出力されたものの、残念ながらログイン先は分かりませんでした。
【参考】
・Google Cloud サービスとデータを共有する
・Google Workspace Login ログのサンプル
・Google Workspace の監査ログ
4. Cloud Resource API のログ検索
諦め切れずに悪あがきをした結果、以下の方式があることがわかりました。
この方法は、Cloud Resource Manager API の データアクセス監査ログ を用いる方法になります。
This query helps you audit who's accessing Cloud Console and from where. This query relies primarily on audited 'GetProject' actions as a proxy for a login event. Therefore: Data Access logs (ADMIN_READ) for Cloud Resource Manager API must be enabled on all your projects.
Google Cloud へのログインが成功すると GetProject
というメソッド名のイベントが出力されます。
A 'GetProject' action is executed as part of every successful login event, whether it's from Cloud Console, gcloud CLI or cloud SDKs including third-party tools like Terraform.
さっそく、Google Cloud のコンソール にログインします。
ログイン後、画面上部の検索バーで Cloud Resource Manager API
と検索します。
Cloud Resource Manager API の検索
Cloud Resource Manager API の [有効にする]
ボタンを押します。
Cloud Resource Manager API の有効化
[すべてのプロダクト] > [管理] > [API とサービス]
を開きます。
[有効な API とサービス]
の画面下部にある Cloud Resource Manager API
をクリックします。
Cloud Resource Manager API のステータス確認1
ステータスが 有効
になっていれば OK です。
Cloud Resource Manager API のステータス確認2
[すべてのプロダクト] > [管理] > [IAM と管理]
を開きます。
❶ [監査ログ]
を開き、❷ サービス: Cloud Resource Manager API
でフィルタします。
❸ Cloud Resource Manager API
のチェックを入れます。
❹画面右の[権限の種類]タブで [管理読み取り]
を選択し、❺ 保存
ボタンを押します。
データアクセス監査ログの出力設定
Cloud Resource Manager API のデータアクセス監査ログの出力設定は以上です。
コンソールへのログイン後に Cloud Logging で GetProject
のイベントが出力されれば OK です。
以下、サンプルログです。
{
"protoPayload": {
"@type": "type.googleapis.com/google.cloud.audit.AuditLog",
"status": {},
"authenticationInfo": {
"principalEmail": "hibino@example.com"
},
"requestMetadata": {
"callerIp": "40.89.32.76",
"callerSuppliedUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36,gzip(gfe),gzip(gfe)",
"requestAttributes": {},
"destinationAttributes": {}
},
"serviceName": "cloudresourcemanager.googleapis.com",
"methodName": "GetProject",
"authorizationInfo": [
{
"resource": "projects/",
"permission": "resourcemanager.projects.get",
"granted": true,
"resourceAttributes": {
"service": "cloudresourcemanager.googleapis.com",
"name": "projects/test-999999",
"type": "cloudresourcemanager.googleapis.com/Project"
},
"permissionType": "ADMIN_READ"
}
],
"resourceName": "projects/test-999999",
"request": {
"@type": "type.googleapis.com/google.cloudresourcemanager.v1.GetProjectRequest",
"projectId": "test-999999"
}
},
"insertId": "8w3k1qe1zn40",
"resource": {
"type": "project",
"labels": {
"project_id": "test-999999"
}
},
"timestamp": "2025-02-08T08:56:17.616075Z",
"severity": "INFO",
"logName": "projects/test-999999/logs/cloudaudit.googleapis.com%2Fdata_access",
"receiveTimestamp": "2025-02-08T08:56:18.190328076Z"
}
これで Google Cloud コンソールへのログイン操作をログに出力することができました。
不審な IP アドレスからのログインがあった場合にアラート通知することができそうです。
【補足】
・上記ログの見るべきポイントは以下の通りです。
- ログインした ユーザー名 は
principalEmail
に記載されます。 - ログインした 端末のグローバル IP アドレス は
callerIp
に記載されます。 - 利用された クライアントの UserAgent は
callerSuppliedUserAgent
に記載されます。 -
ログイン先のプロジェクト ID は
projectId
に記載されます。 -
ログインした時刻 は
timestamp
に記載されます。 - ログイン成功のイベント名 は
methodName
にGetProject
と記載されます。
【参考】
・データアクセス監査ログを有効にする
まとめ
さて、いかがでしたでしょうか。
これでやりたいことはできそうですが、1 点だけ残念なことがあります。
それはログインが成功したときにしか GetProject
のイベントは出ないということです。
なので、ログイン失敗が多発するようなブルートフォース攻撃の監視には使えないですね。
Google Workspace のアカウントの乗っ取りで不審なログイン行為があれば
Google Workspace 側の監査ログに出ますし、2 段階認証が有効になっているはずなので
スマートフォンの画面で通知が表示されます(そこで拒否することで防御可能です)。
とはいえ、ログイン失敗も含めてログ監視したかったので、少し残念でした。
今まであまり意識したことがありませんでしたが
意外と Google Cloud コンソールへのログインに関する情報がまとまっていないんですよね。
この情報が欲しい人のもとに届くことを願っています。
Discussion