重要:
このハンズオンラボは、デスクトップまたはノートパソコンでのみ完了するようにしてください。
ラボごとに 5 回までしか試行できません。
なお、最初の試行で全問正解できないことや、タスクをやり直す必要があることはよくあります。これは学習プロセスの一部です。
ラボを開始すると、タイマーを一時停止することはできません。1 時間 30 分後にラボは終了し、最初からやり直す必要があります。
詳しくは、ラボでの技術的なヒントの資料をご覧ください。
アクティビティの概要
Google Cloud サービスでは、管理アクティビティと、Google Cloud リソース内のアクセスを記録する監査ログを書き込みます。監査ログエントリは、Google Cloud プロジェクト内で「誰が、何を、どこで、いつ行ったか」を調べるのに役立ちます。監査ログを有効にすると、セキュリティ、監査、コンプライアンス エンティティが Google Cloud のデータとシステムをモニタリングして、脆弱性や外部データの不正使用の可能性を確認できます。
このラボでは、監査ログを調査し、クラウド リソースに関連する不審なアクティビティのパターンを特定します。
シナリオ
Cymbal Bank は、ハイブリッド クラウド ソリューションへの移行を正式に完了し、新しいクラウド環境にワークフローを正常にデプロイしました。残念ながら、セキュリティ エンジニアリング チームは、複数のクラウド リソースへの不正アクセスに関する重大度「高」のアラートを受信しました。悪意のある行為者は、侵害されたクラウド リソースを使用してデータを引き出し、他のシステムへの攻撃を行う可能性があるため、これは警戒すべき事態です。あなたにとって、セキュリティ インシデントを経験するのは初めてです。チームリーダーのクロエは、これをインシデント対応に関連するプロセスや手順を学ぶ貴重な機会だと考えています。あなたは、セキュリティ エンジニアリング部門のユニットであるインシデント対応チームのインシデント対応担当者、ハンナに同行して対応を見学することになりました。ハンナは、悪意のあるアクティビティを調査するために使用するアラートのログへのアクセス権を付与してくれました。セキュリティ インシデントをより深く理解するため、テスト環境をセットアップしてインシデントを再現し、アーティファクトを分析することにしました。2 つの別々のユーザー アカウントを使用します。1 つのアカウントで悪意のあるアクティビティを生成し、もう 1 つのアカウントでそのアクティビティを調査します。
このタスクの実行方法は次のとおりです。まず、最初のユーザー アカウントからアクティビティを生成して、セキュリティ インシデントを再現します。次に、詳細な分析のためにログをエクスポートします。そして、インシデントの再現を続け、ユーザー アクティビティを追加で生成します。最後に、BigQuery を使用してログを分析します。
設定
[ラボを開始] をクリックする前に
こちらの手順をお読みください。ラボには時間制限があり、一時停止することはできません。[ラボを開始] をクリックすることでスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
この実践ラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、以下が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
- ラボを完了するための時間(開始後は一時停止できません)
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。左側の [ラボの詳細] パネルには、以下が表示されます。
- 残り時間
- [Google Cloud コンソールを開く] ボタン
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
注: ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。新しいブラウザタブで [ログイン] ページが開きます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておくと、簡単に切り替えられます。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のGoogle Cloud ユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。[Next] をクリックします。
{{{user_0.username | "Google Cloud username"}}}
[ラボの詳細] パネルでも Google Cloud ユーザー名を確認できます。
- 以下の Google Cloud パスワードをコピーして、[ようこそ] ダイアログに貼り付けます。[Next] をクリックします。
{{{user_0.password | "Google Cloud password"}}}
[ラボの詳細] パネルでも Google Cloud のパスワードを確認できます。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
- その後次のように進みます。
- 利用規約に同意します。
- 一時的なアカウントですので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルに登録しないでください。
しばらくすると、このタブで Cloud コンソールが開きます。
注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。
Cloud Shell をアクティブにする
Cloud Shell は、オンラインの開発および運用環境であり、どこにいてもお使いのブラウザでアクセスできます。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- Google Cloud コンソールの右上にある「Cloud Shell をアクティブにする」(
)をクリックします。[続行] をクリックするよう求められる場合があります。
Cloud Shell が起動すると、このセッションの Google Cloud プロジェクト ID を示すメッセージが表示されます。
Your Cloud Platform project in this session is set to YOUR_PROJECT_ID
Google Cloud のコマンドライン ツールである gcloud は、Cloud Shell にプリインストールされており、タブ補完をサポートしています。Google Cloud にアクセスするには、まず gcloud を承認する必要があります。
- 次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
-
[Cloud Shell の承認] を求めるポップアップが表示されます。[承認] をクリックします。
-
出力は次のようになります。
出力:
ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- 次のコマンドで、プロジェクト ID を一覧表示します。
gcloud config list project
出力例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
タスク 1. アカウント アクティビティを生成する
注: Google Cloud コンソールの [username 1] タブが開いていることを確認します。
このタスクでは、クラウド リソースを作成および削除してアカウント アクティビティを生成し、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
export ZONE=$(gcloud compute project-info describe \
--format="value(commonInstanceMetadata.items[google-compute-default-zone])")
gcloud compute instances create default-us-vm \
--machine-type=e2-micro \
--zone=$ZONE --network=mynetwork
gcloud storage rm --recursive gs://$DEVSHELL_PROJECT_ID
-
Enter キーを押します。
[進行状況を確認] をクリックして、このタスクが正しく完了したことを確認します。
アカウント アクティビティを生成する
タスク 2. 監査ログをエクスポートする
注: Google Cloud コンソールの [username 1] タブが開いていることを確認します。
前のタスクで生成したアクティビティは、監査ログとして記録されました。このタスクでは、詳細な分析のために、これらのログを BigQuery データセットにエクスポートします。
- Google Cloud コンソールのタイトルバーにある [検索] フィールドに「ログ エクスプローラ」と入力し、検索結果から [ログ エクスプローラ] をクリックします。[ログ エクスプローラ] ページが開きます。
- [オブザーバビリティ ロギング] の横にある固定アイコンをクリックします。
- ログをエクスポートするときは、現在のフィルタがエクスポートの対象に適用されます。次のクエリをクエリビルダーにコピーします。
logName = ("projects/{{{project_0.project_id | Project ID}}}/logs/cloudaudit.googleapis.com%2Factivity")
- [クエリを実行] をクリックします。クエリ結果が [クエリ結果] ペインに表示されます。このクエリは、プロジェクト内の Cloud Audit Logs をフィルタします。
- [クエリエディタ] フィールドで、[操作] > [シンクを作成] をクリックします。[ログ ルーティング シンクの作成] ダイアログが開きます。
注: ブラウザ ウィンドウが狭い場合、UI には [その他の操作] ではなく [その他] と表示されることがあります。
- [ログ ルーティング シンクの作成] ダイアログで、次の設定を指定します。その他の設定はすべてデフォルト値のままにします。
| セクション |
フィールド: 値 |
| シンクの詳細 |
シンク名: AuditLogsExport [次へ] をクリックします。 |
| シンクの宛先 |
シンクサービスを選択します: BigQuery データセット BigQuery データセットを選択します: 新しい BigQuery データセットを作成する [データセットを作成する] ダイアログが開きます。 |
| データセットの作成 |
データセット ID: auditlogs_dataset [データセットを作成] をクリックします。 [データセットの作成] ダイアログが閉じ、[シンクの宛先] ダイアログに戻ります。 |
| シンクの宛先 |
[次へ] をクリックします。 [パーティション分割テーブルを使用] チェックボックスがすでにオンになっている場合はオフにして、[次へ] をクリックします。 |
| シンクに含めるログの選択 |
[包含フィルタの作成] に「logName=("projects/[PROJECT ID]/logs/cloudaudit.googleapis.com%2Factivity")」と事前入力されていることを確認します。 [次へ] をクリックします。 [シンクを作成] をクリックします。 [ログ エクスプローラ] ページに戻ります。 |
- [ロギング] ナビゲーション パネルで、[ログルーター] をクリックして、[ログルーター シンク] リストで AuditLogsExport シンクを表示します。
-
AuditLogsExport シンクの行で、[その他の操作](
)> [シンクの詳細を表示する] をクリックして、作成した AuditLogsExport シンクの情報を表示します。[シンクの詳細] ダイアログが開きます。
- シンク情報の確認が完了したら、[キャンセル] をクリックして [シンクの詳細] ダイアログを閉じます。
以降のログはすべて BigQuery にエクスポートされるようになり、BigQuery ツールを使用して監査ログデータの分析を行うことができます。エクスポートでは、既存のログエントリはエクスポートされません。
[進行状況を確認] をクリックして、このタスクが正しく完了したことを確認します。
監査ログをエクスポートする
タスク 3. アカウント アクティビティをさらに生成する
注: Google Cloud コンソールの [username 1] タブが開いていることを確認します。
このタスクでは、クラウド リソースを作成および削除して、さらにアカウント アクティビティを生成します。その後、BigQuery でこのアクティビティにアクセスし、ログからさらに分析情報を抽出します。
- 次のコマンドを Cloud Shell ターミナルにコピーします。
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
export ZONE=$(gcloud compute project-info describe \
--format="value(commonInstanceMetadata.items[google-compute-default-zone])")
gcloud compute instances delete --zone=$ZONE \
--delete-disks=all default-us-vm
これらのコマンドは、BigQuery にエクスポートした監査ログで確認できる追加のアクティビティを生成します。
-
Enter キーを押します。
プロンプトが表示されたら、「y」と入力して Enter キーを押します。2 つのバケットを作成し、Compute Engine インスタンスを 1 つ削除しました。
- 数分後にプロンプトが表示されたら、Cloud Shell ターミナルに次のコマンドを入力して続行します。
gcloud storage rm --recursive gs://$DEVSHELL_PROJECT_ID
gcloud storage rm --recursive gs://$DEVSHELL_PROJECT_ID-test
-
Enter キーを押します。
両方のバケットを削除しました。
[進行状況を確認] をクリックして、このタスクが正しく完了したことを確認します。
アカウント アクティビティをさらに生成する
タスク 4. 2 人目のユーザーとしてログインする
[ラボの詳細] パネルに記載されている 2 つ目のユーザー アカウントを使用して Google Cloud コンソールにログインし、Google Cloud アカウントを切り替える必要があります。このユーザー アカウントを使用してログを分析します。
- Google Cloud コンソールで、画面右上にあるユーザー アイコンをクリックし、[アカウントを追加] をクリックします。
- [ラボの詳細] パネルに戻り、Google Cloud username 2: とパスワードをコピーします。次に、ユーザー名とパスワードを Google Cloud コンソールの [ログイン] ダイアログに貼り付けます。
タスク 5. 管理アクティビティ ログを分析する
注: Google Cloud コンソールの [username 2] タブが開いていることを確認します。
このタスクでは、前のタスクで生成された管理アクティビティ ログを確認します。目標は、不審なアクティビティを示すログを特定し、フィルタを適用してそのログを分離することです。これにより、ログのサブセットをエクスポートし、潜在的な問題を分析するプロセスを効率化できます。
管理アクティビティ ログには、リソースの構成またはメタデータを変更する API 呼び出しなどの管理操作に関するログエントリが記録されます。たとえば、VM インスタンスや App Engine アプリケーションが作成されたり、権限が変更されたりするとログに記録されます。
注: 監査ログエントリは、ログビューア、Cloud Logging、Cloud SDK で表示できます。また、Pub/Sub、BigQuery、Cloud Storage にエクスポートすることも可能です。
- Google Cloud コンソールのタイトルバーにある [検索] フィールドに「ログ エクスプローラ」と入力し、検索結果から [ログ エクスプローラ] をクリックします。[ログ エクスプローラ] ページが開きます。
- [オブザーバビリティ ロギング] の横にある固定アイコンをクリックします。
- [クエリを表示] 切り替えボタンが有効になっていることを確認します。[クエリビルダー] フィールドが開きます。
- 次のコマンドをコピーして、[クエリビルダー] フィールドに貼り付けます。コマンド内の Google Cloud プロジェクト ID を確認します。
logName = ("projects/{{{project_0.project_id | "PROJECT_ID"}}}/logs/cloudaudit.googleapis.com%2Factivity")
- [クエリを実行] をクリックします。
- [クエリ結果] で、Cloud Storage バケットが削除されたことを示すログエントリを探します。このエントリには、storage.buckets.delete の概要フィールドが含まれています。ログエントリに関する重要な情報をハイライト表示するために、ログ結果に概要フィールドが含まれています。
このエントリは、storage.buckets.delete メソッドを呼び出してバケットを削除する storage.googleapis.com を参照します。バケット名はプロジェクト ID と同じ名前です:
- 該当のエントリ内で storage.googleapis.com のテキストをクリックし、[一致エントリを表示] を選択します。[クエリ結果] には、作成および削除された Cloud Storage バケットに関連する 6 つのエントリのみが表示されます。
- [クエリエディタ] フィールドで、protoPayload.serviceName="storage.googleapis.com" 行がクエリビルダーに追加されていることを確認します。これにより、クエリが storage.googleapis.com に一致するエントリのみにフィルタされます。
- クエリ結果で、いずれかのエントリの storage.buckets.delete をクリックし、[一致エントリを表示] を選択します。
[クエリビルダー] テキストに別の行が追加されました。
logName = ("projects/{{{project_0.project_id | "PROJECT_ID"}}}/logs/cloudaudit.googleapis.com%2Factivity")
protoPayload.serviceName="storage.googleapis.com"
protoPayload.methodName="storage.buckets.delete"
これで、[クエリ結果] に、削除された Cloud Storage バケットに関連するすべてのエントリが表示されます。この手法を使用すると、具体的なイベントを簡単に見つけることができます。
- [クエリ結果] で、該当する行の横にある展開矢印 > をクリックして、storage.buckets.delete イベントを開きます。

- 該当する行の横にある展開矢印 > をクリックして、authenticatitonInfo フィールドを開きます。

principalEmail フィールドに、この操作を行ったユーザー アカウントのメールアドレスが表示されます。ここでは、ユーザー アクティビティの生成に使用したユーザー 1 のアカウントです。
タスク 6. BigQuery を使用して監査ログを分析する
注: Google Cloud コンソールの [username 2] タブが開いていることを確認します。
これまでのタスクで、ログを生成し、それを BigQuery データセットにエクスポートしました。このタスクでは、クエリエディタを使用してログを分析します。
注: BigQuery データセットにログをエクスポートすると、エクスポートされたログエントリを保持する日付別テーブルが Cloud Logging によって作成されます。ログエントリは、エントリのログ名に基づく名前が付けられたテーブルに格納されます。
BigQuery コンソールを開く
-
Google Cloud コンソールのナビゲーション メニューで、[BigQuery] をクリックします。
[Cloud コンソールの BigQuery へようこそ] ダイアログが開きます。このダイアログには、クイックスタート ガイドへのリンクと、UI の更新情報が表示されます。
-
[完了] をクリックしてダイアログを閉じます。
- [従来のエクスプローラ] ペインで、プロジェクト()の横にある展開矢印をクリックします。auditlogs_dataset データセットが表示されます。
注: auditlogs_dataset が表示されない場合は、ブラウザ ウィンドウを再読み込みしてください。
次に、エクスポート時の書き込みでログエントリを保存できるように、BigQuery データセットに適切な権限が付与されていることを確認します。
-
auditlogs_dataset データセットをクリックします。
-
auditlogs_dataset ツールバーで、[共有] プルダウン メニューをクリックし、[権限を管理] を選択します。
-
[auditlogs_dataset の権限を共有] ページで、[BigQuery データ編集者] セクションを開きます。
-
ログのエクスポートに使用するサービス アカウントが、権限として一覧に含まれていることを確認してください。サービス アカウントは次のようなものになります。service-xxxxxxxx@gcp-sa-logging.iam.gserviceaccount.com
この権限は、ログのエクスポートが設定されると自動的に割り当てられます。そのため、ログのエクスポートが設定されていることを確認するのに便利です。
-
[閉じる] をクリックして [データセットの共有] ウィンドウを閉じます。
-
[従来のエクスプローラ] ペインで、auditlogs_dataset データセットの横にある展開矢印をクリックして、cloudaudit_googleapis_com_acitivty テーブルを表示します。このテーブルには、エクスポートされたログが含まれています。
-
cloudaudit_googleapis_com_acitivty テーブルを選択します。テーブル スキーマが表示されます。ここで、テーブルのスキーマと詳細を確認します。
-
[次で開く] プルダウン メニューを開き、[SQL クエリ] > [新しいタブ] を選択します。

- クエリビルダーの [無題のクエリ] タブで、既存のテキストを削除し、次のコマンドをコピーして貼り付けます。
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 日間に仮想マシンを削除したユーザーを返します。
- [実行] をクリックします。
数秒後、BigQuery は、過去 7 日間にユーザーが Compute Engine 仮想マシンを削除するたびに記録されたエントリを返します。ユーザー 1 として前のタスクで生成したアクティビティに対応するエントリが 1 件表示されています。BigQuery に表示されるのは、エクスポートの作成後に発生したアクティビティのみです。
- [無題のクエリ] タブの既存のクエリを次に置き換えます。
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 日間に Cloud Storage バケットを削除したユーザーを返します。前のタスクでユーザー 1 として生成したアクティビティに対応する 2 つのエントリが表示されるはずです。
- [実行] をクリックします。
BigQuery は優れた監査ログ分析機能を備えています。このアクティビティでは、監査ログに対してクエリを実行する例を 2 つ確認しました。
[進行状況を確認] をクリックして、このタスクが正しく完了したことを確認します。
BigQuery を使用して監査ログを分析する
まとめ
これで完了です。ログ エクスプローラでクエリを実行し、ログをエクスポートして、BigQuery で分析を行うためのデータセットを作成することができました。
また、監査ログを使用して悪意のあるアクティビティをフィルタし、さらにそのログを BigQuery で詳細に分析して、脅威を把握することができました。
ラボを終了する
すべてのタスクが問題なく完了したことを確認してから、ラボを終了してください。準備ができたら、[ラボを終了] をクリックし、[送信] をクリックします。
ラボを終了すると、ラボ環境へのアクセス権が削除され、完了した作業にもう一度アクセスすることはできなくなります。
Copyright 2026 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。