概要
このラボでは、Cloud Audit Logs について詳しく学習します。Cloud Audit Logs では、プロジェクトおよび組織ごとに、管理アクティビティとデータアクセスの 2 種類の監査ログが維持されます。
これらのログに Google Cloud サービスによって監査ログエントリが書き込まれるため、Google Cloud のプロジェクト内で誰が、何を、どこで、いつ行ったかを調べるのに役立ちます。
目標
このラボでは、次のタスクを行う方法を学びます。
[アクティビティ] ページで監査ログを表示する。
Cloud Logging で監査ログを表示、フィルタする。
gcloud を使用してログエントリを取得する。
監査ログをエクスポートする。
設定と要件
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
Qwiklabs にシークレット ウィンドウ でログインします。
ラボのアクセス時間(例: 1:15:00
)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。
準備ができたら、[ラボを開始 ] をクリックします。
ラボの認証情報(ユーザー名 とパスワード )をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。
[Google Console を開く ] をクリックします。
[別のアカウントを使用 ] をクリックし、この ラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーが発生したり、料金の請求 が発生したりします。
利用規約に同意し、再設定用のリソースページをスキップします。
Google Cloud Shell の有効化
Google Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。
Google Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
Google Cloud コンソールで、右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。
[続行 ] をクリックします。
環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。次に例を示します。
gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
出力:
Credentialed accounts:
- @.com (active)
出力例:
Credentialed accounts:
- google1623327_student@qwiklabs.net
次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project
出力:
[core]
project =
出力例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
注:
gcloud ドキュメントの全文については、
gcloud CLI の概要ガイド
をご覧ください。
プロジェクトの権限を確認する
Google Cloud で作業を開始する前に、Identity and Access Management(IAM)内で適切な権限がプロジェクトに付与されていることを確認する必要があります。
Google Cloud コンソールのナビゲーション メニュー ( )で、[IAM と管理 ] > [IAM ] を選択します。
Compute Engine のデフォルトのサービス アカウント {project-number}-compute@developer.gserviceaccount.com
が存在し、編集者
のロールが割り当てられていることを確認します。アカウントの接頭辞はプロジェクト番号で、ナビゲーション メニュー > [Cloud の概要] > [ダッシュボード] から確認できます。
注: アカウントが IAM に存在しない場合やアカウントに「編集者」のロールがない場合は、以下の手順に沿って必要なロールを割り当てます。
Google Cloud コンソールのナビゲーション メニュー ( )で、[Cloud の概要] > [ダッシュボード] をクリックします。
プロジェクト番号(例: 729328892908
)をコピーします。
ナビゲーション メニュー で、[IAM と管理 ] > [IAM ] を選択します。
[IAM ] ページの上部にある [+ アクセス権を付与 ] をクリックします。
[新しいプリンシパル ] に次のように入力します。
{project-number}-compute@developer.gserviceaccount.com
{project-number}
はプロジェクト番号に置き換えてください。
[ロールを選択 ] で、[Project ](または [基本])> [編集者 ] を選択します。
[保存 ] をクリックします。
タスク 1. データアクセス監査ログを有効にする
このタスクでは、データアクセス監査ログを有効にします。
データアクセス監査ログ(BigQuery を除く)はデフォルトで無効になっているため、最初にすべての監査ログを有効にする必要があります。Logging では、毎月のログ無料割り当て分を超えたログデータ量に対して課金が行われます。
Logging で受信されるログはすべて、そのログ割り当て制限枠の一部としてカウントされます(デフォルトで有効になっている Cloud Audit Logs を除きます)。これには、すべての Google Cloud 管理アクティビティ監査ログとシステム イベントログに加えて、BigQuery から提供されるデータアクセス監査ログが含まれます。
Cloud Shell をアクティブにしていない場合は、Google Cloud コンソールのタイトルバーで「Cloud Shell をアクティブにする 」アイコン( )をクリックします。プロンプトが表示されたら、[続行 ] をクリックします。
コマンド プロンプトで次のコマンドを実行してプロジェクトの現在の IAM ポリシーを取得し、policy.json
として保存します。
gcloud projects get-iam-policy $DEVSHELL_PROJECT_ID \
--format=json >./policy.json
[エディタを開く ] ボタンをクリックして Cloud Shell コードエディタを開きます。
「サードパーティ Cookie が無効になっているためコードエディタを読み込めなかった」という内容のエラーが表示された場合は、[新しいウィンドウで開く ] をクリックし、新しいタブに切り替えます。
Cloud Shell コードエディタで policy.json ファイルをクリックして、その内容を表示します。
policy.json
ファイルに以下のテキストを追加して、すべてのサービスのデータアクセス監査ログを有効にします。このテキストは、先頭の {
と "bindings": [
の間に追加する必要があります(ファイル内の他の部分は変更しないように注意してください)。
"auditConfigs": [
{
"service": "allServices",
"auditLogConfigs": [
{ "logType": "ADMIN_READ" },
{ "logType": "DATA_READ" },
{ "logType": "DATA_WRITE" }
]
}
],
ファイルの内容は次のようになります。
[ターミナルを開く ] ボタンをクリックして Cloud Shell コマンドラインに戻ります。
コマンドラインで、次のコマンドを実行して IAM ポリシーを設定します。
gcloud projects set-iam-policy $DEVSHELL_PROJECT_ID \
./policy.json
このコマンドは、新しい IAM ポリシーを返して表示します。
タスク 2. アカウント アクティビティを生成する
このタスクでは、Cloud Audit Logs で表示できるログ アクティビティを生成するために、リソースを作成します。
Cloud Shell で、次のコマンドを実行していくつかのリソースを作成します。これにより、監査ログに表示されるアクティビティが生成されます。
gcloud storage buckets create gs://$DEVSHELL_PROJECT_ID
echo "this is a sample file" > sample.txt
gcloud storage cp sample.txt gs://$DEVSHELL_PROJECT_ID
gcloud compute networks create mynetwork --subnet-mode=auto
gcloud compute instances create default-us-vm \
--machine-type=e2-micro \
--zone={{{ project_0.default_zone | "ZONE" }}} --network=mynetwork
gcloud storage rm -r gs://$DEVSHELL_PROJECT_ID
タスク 3. 管理アクティビティ ログを表示する
このタスクでは、管理アクティビティ ログを表示します。
管理アクティビティ ログには、リソースの構成またはメタデータを変更する API 呼び出しなどの管理操作に関するログエントリが含まれます。たとえば、VM インスタンスや App Engine アプリケーションが作成されたり、権限が変更されたりするとログに記録されます。
ログを表示するには、Logging / ログ閲覧者またはプロジェクト / 閲覧者の Cloud Identity and Access Management ロールが必要です。
管理アクティビティ ログは常に有効なので、有効化する必要はありません。管理アクティビティ監査ログは無料で使用できます。
注: 監査ログエントリは、ログビューア、Cloud Logging、Cloud SDK で表示できます。また、Pub/Sub、BigQuery、Cloud Storage にエクスポートすることも可能です。
Cloud Logging ページを使用する
Google Cloud コンソールのナビゲーション メニュー ( )で、[すべてのプロダクトを表示] > [オブザーバビリティ] > [ロギング] > [ログ エクスプローラ] をクリックします。
次のクエリをコピーして、[クエリビルダー ] フィールドに貼り付けます。
logName = ("projects/{{{ project_0.project_id | "PROJECT_ID" }}}/logs/cloudaudit.googleapis.com%2Factivity")
[クエリを実行 ] ボタンをクリックします。
Cloud Storage バケットが削除されたことを示すログエントリを探します。このエントリは、storage.buckets.delete
メソッドを呼び出してバケットを削除する storage.googleapis.com
を参照します。バケット名はプロジェクト ID と同じ名前です。
該当のエントリ内で storage.googleapis.com のテキストをクリックし、[一致エントリを表示 ] を選択します。
クエリのプレビュー テキストボックス(クエリビルダーがあった場所に表示されています)に行が 1 つ追加されて、ストレージ イベントのみが表示されています。
logName = ("projects/{{{ project_0.project_id | "PROJECT_ID" }}}/logs/cloudaudit.googleapis.com%2Factivity")
protoPayload.serviceName="storage.googleapis.com"
これで、Cloud Storage のエントリのみが表示されるようになりました。
該当のエントリ内で、storage.buckets.delete のテキストをクリックし、[一致エントリを表示 ] を選択します。
クエリのプレビュー テキストボックスに別の行が追加され、ストレージ削除のエントリのみが表示されるようになりました。
このようにして、希望するエントリを容易に見つけることができます。
[クエリ結果] で、Cloud Storage の削除 エントリを開き、次に protoPayload フィールドを開きます。
authenticationInfo フィールドを開くと、この操作を行ったユーザーのメールアドレスを確認できます。
必要に応じてエントリ内の他のフィールドも確認してください。
Cloud SDK を使用する
ログエントリは Cloud SDK コマンドを使用して読み取ることもできます。
出力例:
gcloud logging read [FILTER]
Cloud Shell ペインで、次のコマンドを使用して、ストレージ バケット削除の監査アクティビティのみを取得します。
注: Cloud Shell の接続が切断された場合は、[再接続 ] をクリックします。
gcloud logging read \
"logName=projects/$DEVSHELL_PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity \
AND protoPayload.serviceName=storage.googleapis.com \
AND protoPayload.methodName=storage.buckets.delete"
タスク 4. 監査ログをエクスポートする
このタスクでは、監査ログをエクスポートします。個々の監査ログエントリは、指定した期間保持され、その後削除されます。ログエントリの保持期間は、Cloud Logging の割り当てポリシー で確認できます。監査ログとそのエントリを、これ以外の方法で削除したり変更したりすることはできません。
監査ログのタイプ
保持期間
Admin Activity
400 days
Data Access
30 days
ログをこれよりも長く保持したい場合は、監査ログのエントリを Cloud Logging のその他のログエントリと同じようにエクスポートすれば、必要な期間だけ保管できます。
監査ログをエクスポートする
ログをエクスポートするときは、現在のフィルタがエクスポートの対象に適用されます。
ログ エクスプローラで、クエリビルダー 欄にクエリ文字列を入力して、すべての監査ログを表示します(これは、フィルタ内の先頭行を除くすべての行を削除することによって実行できます)。次に示すようなフィルタになります
logName = ("projects/{{{ project_0.project_id | "PROJECT_ID" }}}/logs/cloudaudit.googleapis.com%2Factivity")
[クエリを実行 ] ボタンをクリックします。
[操作] > [シンクの作成] ボタンをクリックします。
[シンク名 ] 欄に「AuditLogsExport
」と入力し、[次へ ] をクリックします。
[シンクサービスの選択 ] で [BigQuery データセット ] を選択します。
[BigQuery データセットを選択 ] で [新しい BigQuery データセットを作成する ] を選択します。
[データセット ID ] に「auditlogs_dataset
」と入力し、[データセットを作成 ] をクリックします。
[パーティション分割テーブルを使用 ] チェックボックスがすでにオンになっている場合はオフにして、[次へ ] をクリックします。
[包含フィルタの作成] リストボックスで、フィルタ テキストが次のようになっていることを確認します。
logName = ("projects/{{{ project_0.project_id | "PROJECT_ID" }}}/logs/cloudaudit.googleapis.com%2Factivity")
[シンクを作成 ] ボタンをクリックします。[ログルーターのシンク] ページが表示されます。次に、[ログルーター ] をクリックします。
このページで、AuditLogsExport シンクを確認できます。
AuditLogsExport シンクの右側で、その他アイコン( )をクリックして、[シンクの詳細を表示する ] を選択します。
これにより、作成したシンクに関する情報が表示されます。
情報を確認したら、[キャンセル ] をクリックします。
注: ログエントリを Pub/Sub または Cloud Storage にエクスポートすることもできます。Pub/Sub にエクスポートする方法は、データベースに格納する前にデータを ETL プロセスで処理したい場合に便利です(Cloud Operations > PubSub > Dataflow > BigQuery / Bigtable )。
Cloud Storage にエクスポートする方法では、約 1 時間に 1 回、エントリがまとめて Cloud Storage オブジェクト内に書き込まれます。
注: 以降のログはすべて BigQuery にエクスポートされるようになり、BigQuery ツールを使用して監査ログデータの分析を行うことができます。エクスポートでは、既存のログエントリはエクスポートされません。
Cloud Shell で次のコマンドを実行して、BigQuery にエクスポートした監査ログで表示する追加のアクティビティを生成します。
gcloud storage buckets create gs://$DEVSHELL_PROJECT_ID
gcloud storage buckets create gs://$DEVSHELL_PROJECT_ID-test
echo "this is another sample file" > sample2.txt
gcloud storage cp sample.txt gs://$DEVSHELL_PROJECT_ID-test
gcloud compute instances delete --zone={{{ project_0.default_zone | "ZONE" }}} \
--delete-disks=all default-us-vm
プロンプトが表示されたら、「y
」と入力します。
gcloud storage rm -r gs://$DEVSHELL_PROJECT_ID
gcloud storage rm -r gs://$DEVSHELL_PROJECT_ID-test
タスク 5. BigQuery を使用してログを分析する
このタスクでは、ログを BigQuery データセットにエクスポートします。次に、クエリエディタを使用してログを分析します。
注: BigQuery データセットにログをエクスポートすると、エクスポートされたログエントリを保持する日付別テーブルが Cloud Logging によって作成されます。ログエントリは、エントリのログ名に基づく名前が付けられたテーブルに格納されます。
Google Cloud コンソールのナビゲーション メニュー ( )で、[BigQuery ] をクリックし、[完了 ] をクリックします。
左側のペインで、[エクスプローラ ] の下にある (qwiklabs-gcp-xxx)
で始まるプロジェクトをクリックします。その下に auditlogs_dataset データセットが表示されます。
エクスポート時の書き込みでログエントリを保存できるように、BigQuery データセットに適切な権限が付与されていることを確認します。auditlogs_dataset データセットをクリックします。
[共有 ] プルダウンから、[権限 ] を選択します。
データセットの権限のページに、BigQuery データ編集者 のメンバーとしてサービス アカウントが表示されます。このサービス アカウントが表示されていない場合は、[プリンシパルを追加 ] でアカウントを追加し、データ編集者のロールを付与します。
[閉じる ] ボタンをクリックしてデータセットの権限の共有 画面を閉じます。
データセット を開いて、エクスポートしたログを含むテーブルを表示します(展開アイコンをクリックしてデータセットを展開します)。
テーブル名 をクリックし、使用されているテーブルのスキーマ と詳細 を確認します。
[クエリ ] ボタンをクリックします。
Cloud Shell で次のコマンドをもう一度実行して、BigQuery にエクスポートした監査ログで表示する追加のアクティビティを生成します。
gcloud compute instances create default-us-vm \
--zone={{{ project_0.default_zone | "ZONE" }}} --network=mynetwork
gcloud compute instances delete --zone={{{ project_0.default_zone | "ZONE" }}} \
--delete-disks=all default-us-vm
プロンプトが表示されたら、「y
」と入力します。
gcloud storage buckets create gs://$DEVSHELL_PROJECT_ID
gcloud storage buckets create gs://$DEVSHELL_PROJECT_ID-test
gcloud storage rm -r gs://$DEVSHELL_PROJECT_ID
gcloud storage rm -r gs://$DEVSHELL_PROJECT_ID-test
[クエリエディタ ] ウィンドウ内のテキストを削除し、下のクエリを貼り付けます。このクエリは、過去 7 日間に仮想マシンを削除したユーザーを返します。
#standardSQL
SELECT
timestamp,
resource.labels.instance_id,
protopayload_auditlog.authenticationInfo.principalEmail,
protopayload_auditlog.resourceName,
protopayload_auditlog.methodName
FROM
`auditlogs_dataset.cloudaudit_googleapis_com_activity_*`
WHERE
PARSE_DATE('%Y%m%d', _TABLE_SUFFIX) BETWEEN
DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND
CURRENT_DATE()
AND resource.type = "gce_instance"
AND operation.first IS TRUE
AND protopayload_auditlog.methodName = "v1.compute.instances.delete"
ORDER BY
timestamp,
resource.labels.instance_id
LIMIT
1000
[実行 ] ボタンをクリックします。数秒後、過去 7 日間にユーザーが仮想マシンを削除するたびに記録されたエントリが表示されます。2 つのエントリ(このラボで生成したアクティビティ)が表示されるはずです。BigQuery で表示されるのはエクスポートの作成以降のアクティビティのみです。
[クエリエディタ ] ウィンドウ内のテキストを削除し、下のクエリを貼り付けます。このクエリは、過去 7 日間にストレージ バケットを削除したユーザーを返します。
#standardSQL
SELECT
timestamp,
resource.labels.bucket_name,
protopayload_auditlog.authenticationInfo.principalEmail,
protopayload_auditlog.resourceName,
protopayload_auditlog.methodName
FROM
`auditlogs_dataset.cloudaudit_googleapis_com_activity_*`
WHERE
PARSE_DATE('%Y%m%d', _TABLE_SUFFIX) BETWEEN
DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND
CURRENT_DATE()
AND resource.type = "gcs_bucket"
AND protopayload_auditlog.methodName = "storage.buckets.delete"
ORDER BY
timestamp,
resource.labels.instance_id
LIMIT
1000
[実行 ] ボタンをクリックします。数秒後、過去 7 日間にユーザーがストレージ バケットを削除するたびに記録されたエントリが表示されます。
注: このように、BigQuery は優れた監査ログ分析機能を備えています。このアクティビティでは、監査ログに対してクエリを実行する例を 2 つ確認しました。[進行状況を確認 ] をクリックして、目標に沿って進んでいることを確認します。
監査ログをエクスポートし、BigQuery を使用してログを分析する
お疲れさまでした
このラボでは、次の作業を行いました。
ラボを終了する
ラボが完了したら、[ラボを終了 ] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信 ] をクリックします。
星の数は、それぞれ次の評価を表します。
星 1 つ = 非常に不満
星 2 つ = 不満
星 3 つ = どちらともいえない
星 4 つ = 満足
星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート ] タブをご利用ください。
Copyright 2025 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。