チェックポイント
Deploy an App Engine application
/ 20
Enable and add policy to IAP
/ 30
Access User Identity Information
/ 25
Use Cryptographic Verification
/ 25
ユーザー認証: Identity-Aware Proxy
GSP499
概要
このラボでは、Google App Engine を使用して簡単なウェブ アプリケーションを構築し、Identity-Aware Proxy(IAP)を使用して、そのアプリケーションへのアクセスを制限したり、ユーザー ID 情報をそのアプリケーションに提供したりするさまざまな方法を学習します。構築するアプリの機能は次のとおりです。
- ウェルカム ページを表示する
- IAP が提供したユーザー ID 情報にアクセスする
- 暗号化検証を使用してユーザー ID 情報のなりすましを防ぐ
ラボの内容
- Python を使用して簡単な App Engine アプリを作成してデプロイする
- アプリへのアクセスを制限する IAP を有効または無効にする
- ユーザー ID 情報を IAP からアプリに取り込む
- なりすましを防ぐために IAP からの情報を暗号的に検証する
概要
ウェブアプリではユーザー認証が必要になることが多く、通常はアプリで特別にプログラミングする必要がありますが、Google Cloud アプリでは、ユーザー認証を Identity-Aware Proxy サービスに任せることができます。選択したユーザーのみにアクセスを制限する場合は、アプリケーションを変更する必要はありません。アプリケーションがユーザー ID を認識する必要がある場合(ユーザー設定をサーバーサイドで保持する場合など)、Identity-Aware Proxy では最小限のアプリケーション コードを使用してそれを実現します。
Identity-Aware Proxy とは
Identity-Aware Proxy(IAP)は Google Cloud のサービスです。アプリケーションに送信されたウェブ リクエストをインターセプトし、Google Identity Services を使ってリクエストを送信したユーザーの認証を行い、認証されたユーザーからのリクエストのみを通過させます。さらに、リクエスト ヘッダーを変更して認証されたユーザーに関する情報を含めることができます。
必要なもの
Python プログラミング言語の基本的な知識があれば効率的に学習できます。
このラボでは Google App Engine と IAP を中心に学びます。関連のない概念やコードブロックについては詳しく触れず、コードはコピーして貼るだけの状態で提供されています。
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。
-
[ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。
重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後このタブで Cloud Console が開きます。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
-
[承認] をクリックします。
-
出力は次のようになります。
出力:
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
コードをダウンロードする
コマンドを入力できるように Cloud Shell のコマンドラインの領域をクリックします。
以下のように、公開ストレージ バケットからコードをダウンロードし、コードの保存フォルダに移動します。
このフォルダには、ラボのステップごとにサブフォルダが 1 つ格納されています。ステップごとに適切なフォルダに移動します。
タスク 1. アプリケーションをデプロイして IAP で保護する
「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 コードエディタを起動してコードを調べることもできます。
このステップでは、どのファイルも変更する必要はありません。
App Engine にデプロイする
- Python ランタイムを
python39
に更新します。
- Python 用の App Engine スタンダード環境にアプリをデプロイします。
-
リージョンを選択します
。 -
続行を確認するメッセージが表示されたら、「Y」(Yes)と入力します。
gcloud app deploy
コマンドを再度実行してください。
数分でデプロイが完了します。gcloud app browse
を使用するとアプリケーションを表示できるというメッセージが表示されます。
- 次のコマンドを入力します。
- 表示されたリンクをクリックして新しいタブで開くか、必要な場合は手動で開いた新しいタブにコマンドをコピーします。このアプリを実行するのは今回が初めてなので、クラウド インスタンスが起動するのに数秒かかり、それから以下のウィンドウが表示されます。
インターネットに接続されていれば、どのパソコンからも同じ URL でそのウェブページにアクセスできます。アクセスはまだ制限されていません。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
IAP を使用してアクセスを制限する
-
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 つのメールアドレスを入力してください |
-
[保存して次へ] をクリックします。
-
[スコープ] で [保存して次へ] をクリックします。
-
[概要] で [ダッシュボードに戻る] をクリックします。
認証情報の作成を求めるメッセージが表示されることがあります。このラボでは認証情報を作成する必要はないので、ブラウザタブを閉じます。
- Cloud Shell 内で次のコマンドを実行して、Flex API を無効にします。
- [Identity-Aware Proxy] に戻ってページを更新します。保護できるリソースの一覧が表示されます。
App Engine アプリ行の IAP 列 にある切り替えボタンをクリックして IAP をオンにします。
- IAP によってドメインが保護されます。[オンにする] をクリックします。
IAP がオンになっていることをテストする
-
ブラウザタブを開き、アプリの URL に移動します。[Google でログイン] 画面が開き、アプリにアクセスするためのログインが求められます。
-
コンソールへのログインに使用したアカウントでログインすると、アクセス拒否の画面が表示されます。
アプリは IAP で正常に保護されていますが、どのアカウントを通過させるのかを IAP にまだ指示していません。
- コンソールの [Identity-Aware Proxy] ページに戻り、App Engine アプリの隣にあるチェックボックスをオンにすると、右側に App Engine のサイドバーが表示されます。
アクセスを許可する必要がある各メールアドレス(または Google グループ アドレスや Workspace ドメイン名)をメンバーとして追加しなければなりません。
-
[プリンシパルを追加] をクリックします。
-
受講者用メールアドレスを入力します。
-
[Cloud IAP] > [IAP で保護されたウェブアプリ ユーザー] ロールを選択して、そのアドレスに割り当てます。
同じようにして追加のアドレスや Workspace ドメインを入力できます。
- [保存] をクリックします。
「ポリシーを更新しました」というメッセージがウィンドウの下部に表示されます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
アクセスをテストする
アプリに戻ってページを再読み込みします。承認されたユーザーでログインしているのでウェブアプリが表示されるようになります。
引き続き「アクセス権がありません」ページが表示される場合は、IAP が承認を再確認していません。その場合は次のステップに従います。
- ホームページ アドレスの URL の末尾に
/_gcp_iap/clear_login_cookie
を追加して(https://iap-example-999999.appspot.com/_gcp_iap/clear_login_cookie
など)、ウェブブラウザでそのアドレスを開きます。 - アカウントがすでに表示された状態で、新たに「Google でログイン」画面が表示されます。アカウントをクリックせずに、[別のアカウントを使用] をクリックして認証情報を再入力します。
これで、IAP によりアクセス権が再確認されたので、アプリケーションのホーム画面が表示されます。
別の有効な Gmail アカウントや Workspace アカウントをお持ちで、別のブラウザを利用できる場合、またはブラウザでシークレット モードを使用できる場合は、そのブラウザを使ってアプリのページに移動し、その別のアカウントでログインしてみてください。アカウントは承認されていないため、アプリの代わりに「アクセス権がありません」の画面が表示されます。
タスク 2. ユーザー ID 情報にアクセスする
アプリが IAP で保護されると、通過するウェブ リクエスト ヘッダーで IAP により提供される ID 情報を使用できるようになります。このステップでアプリケーションが取得するのは、ログイン ユーザーのメールアドレスと、Google ID サービスによってそのユーザーに割り当てられた永続的な一意のユーザー ID です。そのデータはウェルカム ページでユーザーに表示されます。
- Cloud Shell 内で、このステップで使用するフォルダに移動します。
App Engine にデプロイする
- Python ランタイムを
python39
に更新します。
- デプロイには数分かかるため、まず Python 用の App Engine スタンダード環境にアプリをデプロイすることから始めます。
- 続行を確認するメッセージが表示されたら、「Y」(Yes)と入力します。
デプロイは数分で完了します。待っている間に、以下の説明のようにアプリケーション ファイルを調べることができます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
アプリケーション ファイルを調べる
このフォルダには、先ほどデプロイしたアプリ、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 をテストする
デプロイメントに戻ると、準備が整ったときに、gcloud app browse
を使用するとアプリケーションを表示できるというメッセージが表示されます。
- 次のコマンドを入力します。
- ブラウザで新しいタブが開かない場合は、表示されているリンクをコピーして貼り付けると、通常は新しいタブで開きます。次のようなページが表示されます。
アプリケーションが旧バージョンから新しいバージョンに置き換わるまで、数分かかる場合があります。必要に応じてページを更新して上記のようなページを表示します。
IAP を無効にする
IAP が無効になっている場合、または、なんらかの理由で(同じクラウド プロジェクトで実行されている他のアプリケーションなどによって)バイパスされている場合にこのアプリがどうなるのかを確認するために IAP を無効にします。
- Cloud コンソール ウィンドウで、ナビゲーション メニュー > [セキュリティ] > [Identity-Aware Proxy] をクリックします。
- App Engine アプリの隣にある IAP 切り替えスイッチをクリックして、IAP をオフにします。[オフにする] をクリックします。
すべてのユーザーがアプリにアクセスできるようになることを示す警告が示されます。
- アプリケーションのウェブページを更新します。同じページが表示されますが、ユーザー情報は表示されなくなります。
アプリケーションは保護されなくなったので、IAP を経由するように見えるウェブ リクエストを送信してみます。たとえば、Cloud Shell から次の curl コマンドを実行してリクエスト(<your-url-here>
をアプリケーションの正しい URL に置き換える)を送信します。
ウェブページは次のようにコマンドラインに表示されます。
IAP が無効になっていたりバイパスされていたりすることをアプリケーションが認識する手段はありません。潜在的なリスクがある場合は、暗号検証によって解決策が示されます。
タスク 3. 暗号検証を使用する
IAP がオフであったりバイパスされたりするリスクがある場合、アプリでは受信した ID 情報が有効であることを確認できます。その場合、X-Goog-IAP-JWT-Assertion
と呼ばれる、IAP によって追加された 3 番目のウェブ リクエスト ヘッダーを使用します。ヘッダーの値は暗号で署名されたオブジェクトで、ユーザー ID データも含まれています。アプリケーションはそのデジタル署名を検証し、そのオブジェクトの中で提供されたデータを使用します。そのデータは IAP から改変されずに提供されたものです。
デジタル署名の検証には、最新の Google 公開鍵セットの取得などの追加のステップがいくつか必要です。アプリケーションでこれらの追加のステップが必要かどうかは、他のユーザーが IAP を無効にしたりバイパスしたりできる可能性があるか、またはアプリケーションの機密性などに基づいて決めることができます。
- Cloud Shell 内で、このステップで使用するフォルダに移動します。
App Engine にデプロイする
- Python ランタイムを
python39
に更新します。
- Python 用の App Engine スタンダード環境にアプリをデプロイします。
- 続行を確認するメッセージが表示されたら、「Y」(Yes)と入力します。
デプロイは数分で完了します。待っている間に、以下の説明のようにアプリケーション ファイルを調べることができます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
アプリケーション ファイルを調べる
このフォルダには 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 のアサーションを検証しました。
クエストを完了する
このセルフペース ラボは「Security & Identity Fundamentals」クエストと「Networking Fundamentals in Google Cloud」クエストの構成要素です。クエストとは学習プログラムを構成する一連のラボのことで、完了すると成果が認められて上のようなバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、このラボが含まれるクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なすべてのクエストについては、Google Cloud Skills Boost カタログをご覧ください。
次のラボを受講する
「Cloud KMS のスタートガイド」に進んでクエストを続けるか、他の Google Cloud Skills Boost ラボをお試しください。たとえば次のようなラボがあります。
次のステップと詳細情報
- Cloud Identity-Aware Proxy について詳細を参照する。
- Google の他のセキュリティ関連プロダクトを確認する。
ライセンス
この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2024 年 2 月 28 日
ラボの最終テスト日: 2024 年 2 月 28 日
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。