
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
Deploy an App Engine application
/ 20
Enable and add policy to IAP
/ 30
Access User Identity Information
/ 25
Use Cryptographic Verification
/ 25
このラボでは、Google App Engine を使用して簡単なウェブ アプリケーションを構築し、Identity-Aware Proxy(IAP)を使用して、そのアプリケーションへのアクセスを制限したり、ユーザー ID 情報をそのアプリケーションに提供したりするさまざまな方法を学習します。構築するアプリの機能は次のとおりです。
Python プログラミング言語の基本的な知識があれば効率的に学習できます。
このラボでは Google App Engine と 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 リソースにアクセスできます。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
[承認] をクリックします。
出力は次のようになります。
出力:
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
コマンドを入力できるように Cloud Shell のコマンドラインの領域をクリックします。
以下のように、公開ストレージ バケットからコードをダウンロードし、コードの保存フォルダに移動します。
このフォルダには、ラボのステップごとにサブフォルダが 1 つ格納されています。ステップごとに適切なフォルダに移動します。
「Hello, World」というシンプルなウェルカム ページを表示する、Python で作成した App Engine スタンダード アプリケーションをデプロイします。デプロイしてテストした後、IAP を使用してアクセスを制限します。
1-HelloWorld
サブフォルダに移動します。アプリケーション コードは main.py
ファイル内に含まれています。このコードは Flask ウェブ フレームワークを使用し、テンプレートの内容を利用してウェブ リクエストに応答します。そのテンプレート ファイルは templates/index.html
内にあり、このステップではプレーン HTML のみが含まれています。templates/privacy.html
内の 2 番目のテンプレート ファイルには、簡単なプライバシー ポリシーのサンプルが含まれています。
他にファイルが 2 つあります。requirements.txt
にはアプリケーションが使用する Python ライブラリ(デフォルト以外)がすべてリストされています。app.yaml
はこのアプリが Python App Engine アプリケーションであることを Google Cloud に通知するファイルです。
次のような cat コマンドを使用してシェル内の各ファイルを一覧表示できます。
または、Cloud Shell ウィンドウの右上にある鉛筆アイコンをクリックし、Cloud Shell コードエディタを起動してコードを調べることもできます。
このステップでは、どのファイルも変更する必要はありません。
python39
に更新します。リージョンを選択します
続行を確認するメッセージが表示されたら、「Y」(Yes)と入力します。
gcloud app deploy
コマンドを再度実行してください。
数分でデプロイが完了します。gcloud app browse
を使用するとアプリケーションを表示できるというメッセージが表示されます。
インターネットに接続されていれば、どのパソコンからも同じ URL でそのウェブページにアクセスできます。アクセスはまだ制限されていません。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud コンソール ウィンドウで、ナビゲーション メニュー()> [セキュリティ] > [Identity-Aware Proxy] をクリックします。
[API を有効にする] をクリックします。
[Identity Aware Proxy に移動] をクリックします。
[同意画面を構成] をクリックします。
[ユーザーの種類] の下の [内部] を選択し、[作成] をクリックします。
下記の必須項目に適切な値を入力してください。
フィールド |
値 |
アプリ名 |
IAP Example |
ユーザー サポートメール |
ラボ受講者用のメールアドレスをプルダウンから選択します。 |
アプリケーションのホームページ |
アプリの表示に使用していた URL。これを再確認するには gcloud app browse コマンドを Cloud Shell 内で再度実行します。 |
[アプリケーション プライバシー ポリシー] リンク |
アプリ内のプライバシー ページへのリンク。ホームページへのリンクの末尾に |
承認済みドメイン |
[ドメインを追加] をクリックします。アプリケーションの URL のホスト名部分(例: iap-example-999999.appspot.com)。これは先ほど開いた Hello World ウェブページのアドレスバーに表示されています。URL の先頭の |
デベロッパーの連絡先情報 |
少なくとも 1 つのメールアドレスを入力してください |
[保存して次へ] をクリックします。
[スコープ] で [保存して次へ] をクリックします。
[概要] で [ダッシュボードに戻る] をクリックします。
認証情報の作成を求めるメッセージが表示されることがあります。このラボでは認証情報を作成する必要はないので、ブラウザタブを閉じます。
App Engine アプリ行の IAP 列 にある切り替えボタンをクリックして IAP をオンにします。
ブラウザタブを開き、アプリの URL に移動します。[Google でログイン] 画面が開き、アプリにアクセスするためのログインが求められます。
コンソールへのログインに使用したアカウントでログインすると、アクセス拒否の画面が表示されます。
アプリは IAP で正常に保護されていますが、どのアカウントを通過させるのかを IAP にまだ指示していません。
アクセスを許可する必要がある各メールアドレス(または Google グループ アドレスや Workspace ドメイン名)をメンバーとして追加しなければなりません。
[プリンシパルを追加] をクリックします。
受講者用メールアドレスを入力します。
[Cloud IAP] > [IAP で保護されたウェブアプリ ユーザー] ロールを選択して、そのアドレスに割り当てます。
同じようにして追加のアドレスや Workspace ドメインを入力できます。
「ポリシーを更新しました」というメッセージがウィンドウの下部に表示されます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
アプリに戻ってページを再読み込みします。承認されたユーザーでログインしているのでウェブアプリが表示されるようになります。
引き続き「アクセス権がありません」ページが表示される場合は、IAP が承認を再確認していません。その場合は次のステップに従います。
/_gcp_iap/clear_login_cookie
を追加して(https://iap-example-999999.appspot.com/_gcp_iap/clear_login_cookie
など)、ウェブブラウザでそのアドレスを開きます。これで、IAP によりアクセス権が再確認されたので、アプリケーションのホーム画面が表示されます。
別の有効な Gmail アカウントや Workspace アカウントをお持ちで、別のブラウザを利用できる場合、またはブラウザでシークレット モードを使用できる場合は、そのブラウザを使ってアプリのページに移動し、その別のアカウントでログインしてみてください。アカウントは承認されていないため、アプリの代わりに「アクセス権がありません」の画面が表示されます。
アプリが IAP で保護されると、通過するウェブ リクエスト ヘッダーで IAP により提供される ID 情報を使用できるようになります。このステップでアプリケーションが取得するのは、ログイン ユーザーのメールアドレスと、Google Identity Services によってそのユーザーに割り当てられた永続的な一意のユーザー ID です。そのデータはウェルカム ページでユーザーに表示されます。
python39
に更新します。デプロイは数分で完了します。待っている間に、以下の説明のようにアプリケーション ファイルを調べることができます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
このフォルダには、先ほどデプロイしたアプリ、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
が付いており、情報の出所を示します。必要な場合、アプリケーションではコロンまでのすべてを削除して未加工の値を取得できます。
デプロイメントに戻ると、準備が整ったときに、gcloud app browse
を使用するとアプリケーションを表示できるというメッセージが表示されます。
アプリケーションが旧バージョンから新しいバージョンに置き換わるまで、数分かかる場合があります。必要に応じてページを更新して上記のようなページを表示します。
IAP が無効になっている場合、または、なんらかの理由で(同じクラウド プロジェクトで実行されている他のアプリケーションなどによって)バイパスされている場合にこのアプリがどうなるのかを確認するために IAP を無効にします。
すべてのユーザーがアプリにアクセスできるようになることを示す警告が示されます。
アプリケーションは保護されなくなったので、IAP を経由するように見えるウェブ リクエストを送信してみます。たとえば、Cloud Shell から次の curl コマンドを実行してリクエスト(<your-url-here>
をアプリケーションの正しい URL に置き換える)を送信します。
ウェブページは次のようにコマンドラインに表示されます。
IAP が無効になっていたりバイパスされていたりすることをアプリケーションが認識する手段はありません。潜在的なリスクがある場合は、暗号検証によって解決策が示されます。
IAP がオフであったりバイパスされたりするリスクがある場合、アプリでは受信した ID 情報が有効であることを確認できます。その場合、X-Goog-IAP-JWT-Assertion
と呼ばれる、IAP によって追加された 3 番目のウェブ リクエスト ヘッダーを使用します。ヘッダーの値は暗号で署名されたオブジェクトで、ユーザー ID データも含まれています。アプリケーションはそのデジタル署名を検証し、そのオブジェクトの中で提供されたデータを使用します。そのデータは IAP から改変されずに提供されたものです。
デジタル署名の検証には、最新の Google 公開鍵セットの取得などの追加のステップがいくつか必要です。アプリケーションでこれらの追加のステップが必要かどうかは、他のユーザーが IAP を無効にしたりバイパスしたりできる可能性があるか、またはアプリケーションの機密性などに基づいて決めることができます。
python39
に更新します。デプロイは数分で完了します。待っている間に、以下の説明のようにアプリケーション ファイルを調べることができます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
このフォルダには 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 は完了です。
デプロイの準備が整うと、gcloud app browse
を使用してアプリケーションを表示できるというメッセージが表示されます。
ブラウザで新しいタブが開かない場合は、表示されているリンクをコピーして貼り付けると、通常は新しいタブで開きます。
前のステップで IAP を無効にしたため、アプリケーションによって IAP データが提供されることはありません。次のようなページが表示されます。
前のタスクと同様、最新バージョンが有効になって新しいページが表示されるまでに、場合によっては数分待つ必要があります。
IAP が無効になっているため、参照できるユーザー情報はありません。ここで IAP を有効に戻します。
Cloud コンソール ウィンドウで、ナビゲーション メニュー > [セキュリティ] > [Identity-Aware Proxy] をクリックします。
App Engine アプリの隣にある IAP 切り替えスイッチをクリックして、IAP をオンに戻します。[オンにする] をクリックします。
ページを更新すると、次のようになります。
検証方法で提供されるメールアドレスには、先頭に accounts.google.com:
が付いてないことにご注意ください。
IAP がオフになっているかバイパスされている場合、検証されたデータは有効な署名を使用できないため紛失または無効になります。ただし、Google の秘密鍵の所有者がそのデータを作成した場合を除きます。
App Engine ウェブ アプリケーションをデプロイしました。まず、アプリケーションへのアクセスを、選択したユーザーのみに制限しました。次に、IAP でアプリケーションへのアクセスを許可したユーザー ID を取得して表示し、IAP が無効になっているかバイパスされている場合に、その情報になりすましの可能性があることを確認しました。最後に、なりすましが不可能な、暗号で署名されたユーザー ID のアサーションを検証しました。
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2024 年 4 月 15 日
ラボの最終テスト日: 2024 年 2 月 28 日
Copyright 2025 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
One lab at a time
Confirm to end all existing labs and start this one