始める前に
- ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
- ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
- 画面左上の [ラボを開始] をクリックして開始します
Deploy a Cloud Run service
/ 20
Enable and add policy to IAP
/ 30
Access User Identity Information
/ 25
Use Cryptographic Verification
/ 25
Deploy a Cloud Run service
/ 20
Enable and add policy to IAP
/ 30
Access User Identity Information
/ 25
Use Cryptographic Verification
/ 25
このラボでは、Cloud Run を使用して簡単なウェブ アプリケーションを構築し、Identity-Aware Proxy(IAP)を使用して、そのアプリケーションへのアクセスを制限したり、ユーザー ID 情報をそのアプリケーションに提供したりするさまざまな方法を学習します。構築するアプリの機能は次のとおりです。
このラボでは、次のタスクの実行方法について学びます。
Python プログラミング言語の基本的な知識があれば効率的に学習できます。
このラボでは、Cloud Run と IAP を中心に学びます。関連のない概念やコードブロックについては詳しく触れず、コードはコピーして貼るだけの状態で提供されています。
ウェブアプリではユーザー認証が必要になることが多く、通常はアプリに特別なプログラミングが必要になりますが、Google Cloud アプリでは、ユーザー認証を Identity-Aware Proxy サービスに任せることができます。選択したユーザーのみにアクセスを制限する場合は、アプリケーションを変更する必要はありません。アプリケーションがユーザー ID を認識する必要がある場合(ユーザー設定をサーバーサイドで保持する場合など)、Identity-Aware Proxy では最小限のアプリケーション コードを使用してそれを実現します。
Identity-Aware Proxy(IAP)は Google Cloud のサービスです。アプリケーションに送信されたウェブ リクエストをインターセプトし、Google Identity Services を使ってリクエストを送信したユーザーの認証を行い、認証されたユーザーからのリクエストのみを通過させます。さらに、リクエスト ヘッダーを変更して認証されたユーザーに関する情報を含めることができます。
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 右側の [ラボの設定とアクセス] パネルには、以下が表示されます。
ラボのタイマーはページの上部に表示され、残り時間が示されます。
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
[ラボの設定とアクセス] パネルでもユーザー名を確認できます。
[次へ] をクリックします。
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
[ラボの設定とアクセス] パネルでもパスワードを確認できます。
[次へ] をクリックします。
その後のページはクリックして先に進みます。
しばらくすると、このタブで Google Cloud コンソールが開きます。
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
ウィンドウで次の操作を行います。
接続した時点で認証が完了しており、プロジェクトに各自の Project_ID、
gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
出力:
出力:
gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
コマンドを入力できるように Cloud Shell のコマンドラインの領域をクリックします。
以下のように、公開ストレージ バケットからコードをダウンロードし、コードの保存フォルダに移動します。
このフォルダには、ラボのステップごとにサブフォルダが 1 つ格納されています。ステップごとに適切なフォルダに移動します。
「Hello, World」というシンプルなウェルカム ページを表示する、Python で作成した Cloud Run サービスをデプロイします。デプロイしてテストした後、IAP を使用してアクセスを制限します。
1-HelloWorld サブフォルダに移動します。アプリケーション コードは main.py ファイル内に含まれています。このコードは Flask ウェブ フレームワークを使用し、テンプレートの内容を利用してウェブ リクエストに応答します。そのテンプレート ファイルは templates/index.html 内にあり、このステップではプレーン HTML のみが含まれています。templates/privacy.html 内の 2 番目のテンプレート ファイルには、簡単なプライバシー ポリシーのサンプルが含まれています。
他にファイルが 1 つあります。requirements.txt にはアプリケーションが使用する Python ライブラリ(デフォルト以外)がすべてリストされています。
次のような cat コマンドを使用すると、シェルで各ファイルを確認できます。
または、Cloud Shell ツールバーの [エディタを開く](鉛筆)アイコンをクリックし、Cloud Shell コードエディタを起動してコードを調べることもできます。
このステップでは、どのファイルも変更する必要はありません。
数分でデプロイが完了します。サービス URL が記載されたメッセージが表示されます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Google Cloud コンソールのナビゲーション メニュー()で、[セキュリティ] > [Identity-Aware Proxy] をクリックします。
[API を有効にする] をクリックします。
[Identity Aware Proxy に移動] をクリックします。
[user-auth-lab] の横にある [IAP] 列の切り替えボタンをクリックして、IAP をオンにします。
[オンにする] をクリックして、この操作を確定します。
新しいブラウザタブを開き、アプリの URL に移動します。[Google でログイン] ページが開きます。
コンソールへのログインに使用した受講者アカウントの認証情報でログインします。
アクセス拒否の画面が表示されます。アプリは IAP で正常に保護されていますが、ユーザー アカウントはまだ承認されていません。
コンソールの [Identity-Aware Proxy] ページに戻ります。
user-auth-lab Cloud Run サービスの横にあるチェックボックスをオンにして、右側の詳細サイドバーを開きます。
[プリンシパルを追加] をクリックします。
[新しいプリンシパル] で、受講者用メールアドレスを入力します。
[ロールを選択] で、[Cloud IAP] > [IAP で保護されたウェブアプリ ユーザー] を選択します。
[保存] をクリックします。「ポリシーを更新しました」というメッセージがページの下部に表示されます。
アプリに戻ってページを再読み込みします。承認済みアカウントでログインしているので、ウェブアプリが表示されるはずです。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
それでもアクセス拒否のページが表示される場合は、IAP ログイン Cookie をクリアします。
/_gcp_iap/clear_login_cookie を追加し(例: https://user-auth-lab-[random-hash].run.app/_gcp_iap/clear_login_cookie)、その URL を開きます。アプリが IAP で保護されると、通過するウェブ リクエスト ヘッダーで IAP により提供される ID 情報を使用できるようになります。このステップでアプリケーションが取得するのは、ログイン ユーザーのメールアドレスと、Google Identity Services によってそのユーザーに割り当てられた永続的な一意のユーザー ID です。そのデータはウェルカム ページでユーザーに表示されます。
デプロイは数分で完了します。待っている間に、以下の説明のようにアプリケーション ファイルを調べることができます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
cat コマンドを使用して、Cloud Shell でメイン アプリケーション ファイルを表示します。このフォルダには、先ほどデプロイしたアプリ、1-HelloWorld と同じ一連のファイルが含まれていますが、main.py と templates/index.html の 2 つのファイルには変更が加えられています。プログラムは、IAP によってリクエスト ヘッダーに提供されるユーザー情報を取得するように変更されました。また、テンプレートにそのデータが表示されるようになりました。
IAP 提供の ID データを取得する main.py には以下の 2 行が含まれています。
X-Goog-Authenticated-User- ヘッダーが IAP によって提供されています。名前の大文字と小文字は区別されないため、必要に応じてすべて小文字または大文字で指定できます。render_template ステートメントにこれらの値が含まれるようになったので、表示が可能です。
index.html テンプレートでこれらの値を表示するには、中括弧で二重に名前を囲みます。
ご覧のとおり、提供されたデータには先頭に accounts.google.com が付いており、情報の出所を示します。必要な場合、アプリケーションではコロンまでのすべてを削除して未加工の値を取得できます。
IAP が無効になっている場合、またはバイパスされている場合にこのアプリがどうなるのかを確認するために IAP を無効にします。
user-auth-lab など)の横にある IAP 切り替えスイッチをクリックして、IAP をオフにします。このアプリケーションは保護されなくなったので、IAP を経由するように見えるウェブ リクエストを送信してみます。たとえば、Cloud Shell から次の curl コマンドを実行してリクエスト(<your-url-here> をアプリの URL に置き換える)を送信します。
ウェブページがコマンドラインに表示され、偽のメールが表示されます。
IAP が無効になっていたりバイパスされていたりすることをアプリケーションが認識する手段はありません。潜在的なリスクがある場合は、暗号検証によって解決策が示されます。
IAP がオフであったりバイパスされたりするリスクがある場合、アプリでは受信した ID 情報が有効であることを確認できます。その場合、X-Goog-IAP-JWT-Assertion と呼ばれる、IAP によって追加された 3 番目のウェブ リクエスト ヘッダーを使用します。ヘッダーの値は暗号で署名されたオブジェクトで、ユーザー ID データも含まれています。アプリケーションはそのデジタル署名を検証し、そのオブジェクトの中で提供されたデータを使用します。そのデータは IAP から改変されずに提供されたものです。
デジタル署名の検証には、最新の Google 公開鍵セットの取得などの追加のステップがいくつか必要です。アプリケーションでこれらの追加のステップが必要かどうかは、他のユーザーが IAP を無効にしたりバイパスしたりできる可能性があるか、またはアプリケーションの機密性などに基づいて決めることができます。
IAP で保護された Cloud Run サービスの署名済みヘッダーの JWT オーディエンス のクライアント ID を確認します。
Cloud コンソールの [Identity-Aware Proxy] ページに移動します。
リストから user-auth-lab を見つけます。
注: 右端にある [アクション] 列を表示するため、場合によってはリソースの表を右にスクロール(表の下にある水平スクロールバーを使用)する必要があります。
[アクション] で、リソースの横にある [その他](縦に並んだ 3 つの点)ボタンをクリックし、[JWT オーディエンス コードを取得] を選択します。
表示されたモーダルで、表示されているクライアント ID の文字列をコピーしてテキスト エディタに貼り付け、[OK] を選択します。
コピーしたクライアント ID の値を使用して IAP_AUDIENCE 環境変数を設定し、アプリを Cloud Run にデプロイします。
デプロイは数分で完了します。待っている間に、以下の説明のようにアプリケーション ファイルを調べることができます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
cat コマンドを使用して、新しい認証ヘルパー ファイルを Cloud Shell で表示します。このフォルダには 2-HelloUser と同じ一連のファイルが含まれ、そのうちの 2 つは変更されたファイル、1 つは新規のファイルです。新しいファイルは auth.py です。これは、暗号で署名された ID 情報を取得して検証するための user() メソッドを提供します。一方、変更された 2 つのファイルは main.py と templates/index.html で、先程のメソッドの結果を使用します。前回のデプロイの未確認ヘッダーも表示されるので、比較することができます。
user() 関数に含まれています。assertion は、指定されたリクエスト ヘッダーで提供される暗号で署名されたデータです。コードはライブラリを使用して、このデータを検証およびデコードします。検証では、署名されたデータを確認し、そのデータが(基本的には保護されている Google Cloud プロジェクト用に)準備されていることを対象に知らせるために Google 提供の公開鍵を使用します。ヘルパー関数の keys() と audience() がそれらの値を収集して返します。
署名されたオブジェクトには、検証済みのメールアドレスと一意の ID 値(サブスクライバーの場合は、sub 標準フィールドに指定)の 2 つのデータが必要です。
これでステップ 3 は完了です。
デプロイの準備ができたら、次のコマンドでアプリケーションの URL を取得できます。
検証方法で提供されるメールアドレスには、先頭に accounts.google.com: が付いてないことにご注意ください。
IAP がオフになっているかバイパスされている場合、検証されたデータは有効な署名を使用できないため紛失または無効になります。ただし、Google の秘密鍵の所有者がそのデータを作成した場合を除きます。
Cloud Run サービスをデプロイしました。まず、アプリケーションへのアクセスを、選択したユーザーのみに制限しました。次に、IAP でアプリケーションへのアクセスを許可したユーザー ID を取得して表示し、IAP が無効になっているかバイパスされている場合に、その情報になりすましの可能性があることを確認しました。最後に、なりすましが不可能な、暗号で署名されたユーザー ID のアサーションを検証しました。
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2026 年 5 月 28 日
ラボの最終テスト日: 2026 年 5 月 28 日
Copyright 2026 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
1 回に 1 つのラボ
既存のラボをすべて終了して、このラボを開始することを確認してください
ラボを開始するには、この簡単な手順を完了してください。