Deploy a Cloud Run service

進行状況を確認

/ 20

Enable and add policy to IAP

進行状況を確認

/ 30

Access User Identity Information

進行状況を確認

/ 25

Use Cryptographic Verification

進行状況を確認

/ 25

このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。

GSP499

Google Cloud セルフペース ラボ

概要

このラボでは、Cloud Run を使用して簡単なウェブ アプリケーションを構築し、Identity-Aware Proxy(IAP)を使用して、そのアプリケーションへのアクセスを制限したり、ユーザー ID 情報をそのアプリケーションに提供したりするさまざまな方法を学習します。構築するアプリの機能は次のとおりです。

  • ウェルカム ページを表示する。
  • IAP が提供したユーザー ID 情報にアクセスする。
  • 暗号検証を使用してユーザー ID 情報のなりすましを防ぐ。

学習内容

このラボでは、次のタスクの実行方法について学びます。

  • Python を使用して簡単な Cloud Run サービスを作成しデプロイする。
  • IAP を有効または無効にして、アプリへのアクセスを制限する。
  • ユーザー ID 情報を IAP からアプリに取り込む。
  • なりすましを防ぐために IAP からの情報を暗号的に検証する。

前提条件

Python プログラミング言語の基本的な知識があれば効率的に学習できます。

このラボでは、Cloud Run と IAP を中心に学びます。関連のない概念やコードブロックについては詳しく触れず、コードはコピーして貼るだけの状態で提供されています。

Identity-Aware Proxy の概要

ウェブアプリではユーザー認証が必要になることが多く、通常はアプリに特別なプログラミングが必要になりますが、Google Cloud アプリでは、ユーザー認証を Identity-Aware Proxy サービスに任せることができます。選択したユーザーのみにアクセスを制限する場合は、アプリケーションを変更する必要はありません。アプリケーションがユーザー ID を認識する必要がある場合(ユーザー設定をサーバーサイドで保持する場合など)、Identity-Aware Proxy では最小限のアプリケーション コードを使用してそれを実現します。

Identity-Aware Proxy とは

Identity-Aware Proxy(IAP)は Google Cloud のサービスです。アプリケーションに送信されたウェブ リクエストをインターセプトし、Google Identity Services を使ってリクエストを送信したユーザーの認証を行い、認証されたユーザーからのリクエストのみを通過させます。さらに、リクエスト ヘッダーを変更して認証されたユーザーに関する情報を含めることができます。

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。

このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
  • ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 右側の [ラボの設定とアクセス] パネルには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • このラボで使用する一時的な認証情報(ユーザー名とパスワード)
    • このラボを行うために必要なその他の情報(ある場合)

    ラボのタイマーはページの上部に表示され、残り時間が示されます。

  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。

    ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示された場合は、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの設定とアクセス] パネルでもユーザー名を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの設定とアクセス] パネルでもパスワードを確認できます。

  6. [次へ] をクリックします。

    重要: ラボで指定された認証情報を使用する必要があります。ご自身の Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後のページはクリックして先に進みます。

    • 利用規約に同意します。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

しばらくすると、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。 ナビゲーション メニューのアイコンと検索フィールド

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

  2. ウィンドウで次の操作を行います。

    • Cloud Shell 情報ウィンドウで操作を進めます。
    • Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。

接続した時点で認証が完了しており、プロジェクトに各自の Project_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

出力:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

コードをダウンロードする

コマンドを入力できるように Cloud Shell のコマンドラインの領域をクリックします。

以下のように、公開ストレージ バケットからコードをダウンロードし、コードの保存フォルダに移動します。

gcloud storage cp gs://{{{project_0.project_id}}}-bucket/user-authentication-with-iap.zip . unzip user-authentication-with-iap.zip cd user-authentication-with-iap

このフォルダには、ラボのステップごとにサブフォルダが 1 つ格納されています。ステップごとに適切なフォルダに移動します。

タスク 1. アプリケーションをデプロイして IAP で保護する

「Hello, World」というシンプルなウェルカム ページを表示する、Python で作成した Cloud Run サービスをデプロイします。デプロイしてテストした後、IAP を使用してアクセスを制限します。

アプリケーション コードを確認する

  • 以下のコマンドを使用して、メインのプロジェクト フォルダから、このステップのコードを含む 1-HelloWorld サブフォルダに移動します。
cd 1-HelloWorld

アプリケーション コードは main.py ファイル内に含まれています。このコードは Flask ウェブ フレームワークを使用し、テンプレートの内容を利用してウェブ リクエストに応答します。そのテンプレート ファイルは templates/index.html 内にあり、このステップではプレーン HTML のみが含まれています。templates/privacy.html 内の 2 番目のテンプレート ファイルには、簡単なプライバシー ポリシーのサンプルが含まれています。

他にファイルが 1 つあります。requirements.txt にはアプリケーションが使用する Python ライブラリ(デフォルト以外)がすべてリストされています。

次のような cat コマンドを使用すると、シェルで各ファイルを確認できます。

cat main.py

または、Cloud Shell ツールバーの [エディタを開く](鉛筆)アイコンをクリックし、Cloud Shell コードエディタを起動してコードを調べることもできます。

このステップでは、どのファイルも変更する必要はありません。

Cloud Run にデプロイする

  1. Cloud Run にアプリをデプロイします。
gcloud run deploy user-auth-lab --source . --allow-unauthenticated --region={{{ project_0.default_region | "REGION" }}}
  1. API を有効にするように求められたら、「Y」(Yes)と入力します。続行するために Artifact Registry リポジトリを作成するように求められたら、「Y」(Yes)と入力します。

数分でデプロイが完了します。サービス URL が記載されたメッセージが表示されます。

  1. 表示されたサービス URL を新しいブラウザタブで開き、ウェブページを表示します。アクセスはまだ制限されていません。

IAP Hello World タブページ

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Cloud Run サービスをデプロイする

IAP を使用してアクセスを制限する

  1. Google Cloud コンソールのナビゲーション メニューナビゲーション メニュー アイコン)で、[セキュリティ] > [Identity-Aware Proxy] をクリックします。

  2. [API を有効にする] をクリックします。

  3. [Identity Aware Proxy に移動] をクリックします。

  4. [user-auth-lab] の横にある [IAP] 列の切り替えボタンをクリックして、IAP をオンにします。

  5. [オンにする] をクリックして、この操作を確定します。

IAP がオンになっていることをテストする

  1. 新しいブラウザタブを開き、アプリの URL に移動します。[Google でログイン] ページが開きます。

  2. コンソールへのログインに使用した受講者アカウントの認証情報でログインします。

    アクセス拒否の画面が表示されます。アプリは IAP で正常に保護されていますが、ユーザー アカウントはまだ承認されていません。

  3. コンソールの [Identity-Aware Proxy] ページに戻ります。

  4. user-auth-lab Cloud Run サービスの横にあるチェックボックスをオンにして、右側の詳細サイドバーを開きます。

  5. [プリンシパルを追加] をクリックします。

  6. [新しいプリンシパル] で、受講者用メールアドレスを入力します。

  7. [ロールを選択] で、[Cloud IAP] > [IAP で保護されたウェブアプリ ユーザー] を選択します。

  8. [保存] をクリックします。「ポリシーを更新しました」というメッセージがページの下部に表示されます。

  9. アプリに戻ってページを再読み込みします。承認済みアカウントでログインしているので、ウェブアプリが表示されるはずです。

注: ロールの変更が有効になるまでには若干時間がかかります。「アクセス権がありません」というメッセージがまだページに表示される場合は、しばらく待ってからページの更新を行ってみてください。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 IAP に対するポリシーの有効化と追加

それでもアクセス拒否のページが表示される場合は、IAP ログイン Cookie をクリアします。

  1. サービス URL の末尾に /_gcp_iap/clear_login_cookie を追加し(例: https://user-auth-lab-[random-hash].run.app/_gcp_iap/clear_login_cookie)、その URL を開きます。
  2. 新しい [Google でログイン] ページが表示されたら、[別のアカウントを使用] をクリックして、受講者の認証情報を再入力します。

タスク 2. ユーザー ID 情報にアクセスする

アプリが IAP で保護されると、通過するウェブ リクエスト ヘッダーで IAP により提供される ID 情報を使用できるようになります。このステップでアプリケーションが取得するのは、ログイン ユーザーのメールアドレスと、Google Identity Services によってそのユーザーに割り当てられた永続的な一意のユーザー ID です。そのデータはウェルカム ページでユーザーに表示されます。

  • Cloud Shell 内で、このステップで使用するフォルダに移動します。
cd ~/user-authentication-with-iap/2-HelloUser

Cloud Run にデプロイする

  1. Cloud Run にアプリをデプロイします。
gcloud run deploy user-auth-lab --source . --region={{{ project_0.default_region | "REGION" }}}
  1. 続行を確認するメッセージが表示されたら、「Y」(Yes)と入力します。

デプロイは数分で完了します。待っている間に、以下の説明のようにアプリケーション ファイルを調べることができます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 ユーザー ID 情報にアクセスする

アプリケーション ファイルを調べる

  1. cat コマンドを使用して、Cloud Shell でメイン アプリケーション ファイルを表示します。
cat main.py
  1. テンプレート ファイルを表示して、ユーザーデータがどのように表示されるかを確認します。
cat templates/index.html

このフォルダには、先ほどデプロイしたアプリ、1-HelloWorld と同じ一連のファイルが含まれていますが、main.pytemplates/index.html の 2 つのファイルには変更が加えられています。プログラムは、IAP によってリクエスト ヘッダーに提供されるユーザー情報を取得するように変更されました。また、テンプレートにそのデータが表示されるようになりました。

IAP 提供の ID データを取得する main.py には以下の 2 行が含まれています。

user_email = request.headers.get('X-Goog-Authenticated-User-Email') user_id = request.headers.get('X-Goog-Authenticated-User-ID')

X-Goog-Authenticated-User- ヘッダーが IAP によって提供されています。名前の大文字と小文字は区別されないため、必要に応じてすべて小文字または大文字で指定できます。render_template ステートメントにこれらの値が含まれるようになったので、表示が可能です。

page = render_template('index.html', email=user_email, id=user_id)

index.html テンプレートでこれらの値を表示するには、中括弧で二重に名前を囲みます。

Hello, {{ email }}! Your persistent ID is {{ id }}.

ご覧のとおり、提供されたデータには先頭に accounts.google.com が付いており、情報の出所を示します。必要な場合、アプリケーションではコロンまでのすべてを削除して未加工の値を取得できます。

更新されたアプリをテストする

  1. アプリケーションの URL を取得します。
gcloud run services describe user-auth-lab --region={{{ project_0.default_region | "REGION" }}} --format='value(status.url)'
  1. 取得した URL を新しいブラウザタブで開きます。
  2. 必要に応じてページを更新し、メールアドレスと永続 ID を表示します。

IAP を無効にする

IAP が無効になっている場合、またはバイパスされている場合にこのアプリがどうなるのかを確認するために IAP を無効にします。

  1. Cloud コンソール ウィンドウのナビゲーション メニューで、[セキュリティ] > [Identity-Aware Proxy] をクリックします。
  2. Cloud Run サービス(user-auth-lab など)の横にある IAP 切り替えスイッチをクリックして、IAP をオフにします。
  3. [一般公開アクセスを許可] をクリックします。
  4. アプリケーションのウェブページを更新します。同じページが表示されますが、ユーザー情報は表示されなくなります。

このアプリケーションは保護されなくなったので、IAP を経由するように見えるウェブ リクエストを送信してみます。たとえば、Cloud Shell から次の curl コマンドを実行してリクエスト(<your-url-here> をアプリの URL に置き換える)を送信します。

curl -X GET YOUR_URL -H "X-Goog-Authenticated-User-Email: totally fake email"

ウェブページがコマンドラインに表示され、偽のメールが表示されます。

<!doctype html> <html> <head> <title>IAP Hello User</title> </head> <body> <h1>Hello World</h1> <p> Hello, totally fake email! Your persistent ID is None. </p> <p> This is step 2 of the User Authentication with IAP</em> codelab. </p> </body> </html>

IAP が無効になっていたりバイパスされていたりすることをアプリケーションが認識する手段はありません。潜在的なリスクがある場合は、暗号検証によって解決策が示されます。

タスク 3. 暗号検証を使用する

IAP がオフであったりバイパスされたりするリスクがある場合、アプリでは受信した ID 情報が有効であることを確認できます。その場合、X-Goog-IAP-JWT-Assertion と呼ばれる、IAP によって追加された 3 番目のウェブ リクエスト ヘッダーを使用します。ヘッダーの値は暗号で署名されたオブジェクトで、ユーザー ID データも含まれています。アプリケーションはそのデジタル署名を検証し、そのオブジェクトの中で提供されたデータを使用します。そのデータは IAP から改変されずに提供されたものです。

デジタル署名の検証には、最新の Google 公開鍵セットの取得などの追加のステップがいくつか必要です。アプリケーションでこれらの追加のステップが必要かどうかは、他のユーザーが IAP を無効にしたりバイパスしたりできる可能性があるか、またはアプリケーションの機密性などに基づいて決めることができます。

  • Cloud Shell 内で、このステップで使用するフォルダに移動します。
cd ~/user-authentication-with-iap/3-HelloVerifiedUser

Cloud Run にデプロイする

  1. IAP で保護された Cloud Run サービスの署名済みヘッダーの JWT オーディエンス のクライアント ID を確認します。

    • Cloud コンソールの [Identity-Aware Proxy] ページに移動します。

    • リストから user-auth-lab を見つけます。

    • 注: 右端にある [アクション] 列を表示するため、場合によってはリソースの表を右にスクロール(表の下にある水平スクロールバーを使用)する必要があります。

    • [アクション] で、リソースの横にある [その他](縦に並んだ 3 つの点)ボタンをクリックし、[JWT オーディエンス コードを取得] を選択します。

    • 表示されたモーダルで、表示されているクライアント ID の文字列をコピーしてテキスト エディタに貼り付け、[OK] を選択します。

  2. コピーしたクライアント ID の値を使用して IAP_AUDIENCE 環境変数を設定し、アプリを Cloud Run にデプロイします。

gcloud run deploy user-auth-lab --source . --set-env-vars IAP_AUDIENCE="YOUR_CLIENT_ID" --region={{{ project_0.default_region | "REGION" }}}
  1. 続行を確認するメッセージが表示されたら、「Y」(Yes)と入力します。

デプロイは数分で完了します。待っている間に、以下の説明のようにアプリケーション ファイルを調べることができます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 暗号検証を使用する

アプリケーション ファイルを調べる

  1. cat コマンドを使用して、新しい認証ヘルパー ファイルを Cloud Shell で表示します。
cat auth.py
  1. メインのアプリケーション ファイルを表示して、確認済みのユーザー メソッドがどのように統合されているかを確認します。
cat main.py

このフォルダには 2-HelloUser と同じ一連のファイルが含まれ、そのうちの 2 つは変更されたファイル、1 つは新規のファイルです。新しいファイルは auth.py です。これは、暗号で署名された ID 情報を取得して検証するための user() メソッドを提供します。一方、変更された 2 つのファイルは main.pytemplates/index.html で、先程のメソッドの結果を使用します。前回のデプロイの未確認ヘッダーも表示されるので、比較することができます。

  • 新しい機能は主に user() 関数に含まれています。
def user(): assertion = request.headers.get('X-Goog-IAP-JWT-Assertion') if assertion is None: return None, None info = jwt.decode( assertion, keys(), algorithms=['ES256'], audience=audience() ) return info['email'], info['sub']

assertion は、指定されたリクエスト ヘッダーで提供される暗号で署名されたデータです。コードはライブラリを使用して、このデータを検証およびデコードします。検証では、署名されたデータを確認し、そのデータが(基本的には保護されている Google Cloud プロジェクト用に)準備されていることを対象に知らせるために Google 提供の公開鍵を使用します。ヘルパー関数の keys()audience() がそれらの値を収集して返します。

署名されたオブジェクトには、検証済みのメールアドレスと一意の ID 値(サブスクライバーの場合は、sub 標準フィールドに指定)の 2 つのデータが必要です。

これでステップ 3 は完了です。

暗号検証をテストする

デプロイの準備ができたら、次のコマンドでアプリケーションの URL を取得できます。

gcloud run services describe user-auth-lab --region={{{ project_0.default_region | "REGION" }}} --format='value(status.url)'
  1. 取得した URL を新しいブラウザタブで開きます。
  2. 前のステップで IAP を無効にしたため、アプリケーションによって IAP データが提供されることはありません。メールと ID に [None] と表示されているページが表示されることを確認します。
  3. コンソールの [Identity-Aware Proxy] ページに移動します。
  4. Cloud Run サービスの横にある IAP 切り替えスイッチをクリックして、IAP をオンに戻します。
  5. [オンにする] をクリックして、この操作を確定します。
  6. Cloud Shell で次のコマンドを実行して、Cloud Run サービスを呼び出す権限を IAP サービス エージェントに付与します。
gcloud run services add-iam-policy-binding user-auth-lab \ --member="serviceAccount:service-$(gcloud projects describe {{{project_0.project_id}}} --format='value(projectNumber)')@gcp-sa-iap.iam.gserviceaccount.com" \ --role="roles/run.invoker" \ --region={{{ project_0.default_region | "REGION" }}}
  1. アプリケーション ページを更新します。暗号署名されたメールアドレスとユーザー ID が正しく表示され、検証済みであることを確認します。

検証方法で提供されるメールアドレスには、先頭に accounts.google.com: が付いてないことにご注意ください。

IAP がオフになっているかバイパスされている場合、検証されたデータは有効な署名を使用できないため紛失または無効になります。ただし、Google の秘密鍵の所有者がそのデータを作成した場合を除きます。

お疲れさまでした

Cloud Run サービスをデプロイしました。まず、アプリケーションへのアクセスを、選択したユーザーのみに制限しました。次に、IAP でアプリケーションへのアクセスを許可したユーザー ID を取得して表示し、IAP が無効になっているかバイパスされている場合に、その情報になりすましの可能性があることを確認しました。最後に、なりすましが不可能な、暗号で署名されたユーザー ID のアサーションを検証しました。

次のステップと詳細情報

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2026 年 5 月 28 日

ラボの最終テスト日: 2026 年 5 月 28 日

Copyright 2026 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボを実行するには、シークレット モードまたはシークレット ブラウジング ウィンドウを使用することをおすすめします。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。

ラボを開始するには、この簡単な手順を完了してください。