
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) 限制應用程式存取權,以及向應用程式提供使用者身分資訊。您的應用程式將會:
如果您具備 Python 程式設計語言的基本知識,將能享有更優質的學習體驗。
本實驗室主要探討 Google App Engine 和 IAP。我們不會對與本主題無關的概念和程式碼多做介紹,但會事先準備好這些程式碼區塊,屆時您只要複製及貼上即可。
驗證網頁應用程式使用者的身分往往是必要的,而這項作業通常需要在應用程式中特別編寫程式碼。如果是 Google Cloud 應用程式,則可交由 Identity-Aware Proxy 服務進行身分驗證。若只需要限制特定使用者的存取權,則無須對應用程式進行任何變更。如果應用程式需要知道使用者的身分 (例如為了將使用者偏好保留於伺服器端),則 Identity-Aware Proxy 可運用最少的應用程式程式碼提供這項資訊。
Identity-Aware Proxy (IAP) 是一項 Google Cloud 服務,可攔截傳送至應用程式的網頁要求,使用 Google Identity 服務對發出請求的使用者進行身分驗證,並只允許您授權的使用者所傳送的要求。此外,這項功能還能修改要求標頭,加入已驗證使用者相關資訊。
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
點選「Start Lab」按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目:
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。
提示:您可以在不同的視窗中並排開啟分頁。
如有必要,請將下方的 Username 貼到「登入」對話方塊。
您也可以在「Lab Details」窗格找到 Username。
點選「下一步」。
複製下方的 Password,並貼到「歡迎使用」對話方塊。
您也可以在「Lab Details」窗格找到 Password。
點選「下一步」。
按過後續的所有頁面:
Google Cloud 控制台稍後會在這個分頁開啟。
Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
連線完成即代表已通過驗證,且專案已設為您的 PROJECT_ID。輸出內容中有一行宣告本工作階段 PROJECT_ID 的文字:
gcloud
是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。
點按「授權」。
輸出畫面應如下所示:
輸出內容:
輸出內容:
輸出內容範例:
gcloud
的完整說明,請前往 Google Cloud 並參閱「gcloud CLI overview guide」(gcloud CLI 總覽指南)。
按一下 Cloud Shell 中的指令列區域,即可輸入指令。
從公開儲存空間 bucket 下載程式碼,然後切換至程式碼資料夾:
這個資料夾包含本研究每個步驟的子資料夾。您必須切換至正確的資料夾才能執行每個步驟。
這是以 Python 編寫的 App Engine 標準環境應用程式,只會顯示「Hello, world」歡迎頁面。我們會部署並測試應用程式,然後使用 IAP 限制相關存取權。
1-HelloWorld
子資料夾。應用程式程式碼位於 main.py
檔案中。這個檔案使用 Flask 網路架構,透過範本內容回應網頁要求。該範本檔案位於 templates/index.html
,在這個步驟中僅包含純 HTML。第二個範本檔案位於 templates/privacy.html
,其中包含簡略的隱私權政策範例。
另外還有兩個檔案:一個是 requirements.txt
,該檔案會列出應用程式使用的所有非預設 Python 程式庫,另一個是 app.yaml
,則指示 Google Cloud 這是 Python App Engine 應用程式。
您可以使用 cat 指令在殼層中列出每個檔案,如下所示:
或者,您也可以點選 Cloud Shell 視窗右上角的鉛筆圖示,啟動 Cloud Shell 程式碼編輯器,以此方式檢查程式碼。
在這個步驟中,您不需要變更任何檔案。
python39
。選取區域
當系統詢問是否要繼續時,請輸入「Y」表示同意。
gcloud app deploy
指令。部署作業會在幾分鐘內完成。屆時系統會顯示訊息,指示您可以使用 gcloud app browse
查看應用程式。
您可以在任何連線至網際網路的電腦上開啟同一個網址,查看該網頁。存取權尚未受到限制。
點選「Check my progress」,確認目標已達成。
在 Cloud 控制台視窗中,依序點選「導覽選單」圖示 >「安全性」>「Identity-Aware Proxy」。
按一下「啟用 API」。
點選「前往 Identity-Aware Proxy」。
按一下「設定同意畫面」。
在使用者類型底下選取「內部」,然後按一下「建立」。
在所需欄位中填入適當的值:
欄位 |
值 |
應用程式名稱 |
IAP 範例 |
使用者支援電子郵件 |
從下拉式選單中選取實驗室學生的電子郵件地址。 |
應用程式首頁 |
用來查看應用程式的網址。您可以在 Cloud Shell 中重新執行 gcloud app browse 指令,找出這項資訊。 |
應用程式隱私權政策連結 |
應用程式中的隱私權頁面連結與首頁連結相同,但網址結尾加上了 |
授權網域 |
點選「新增網域」,輸入應用程式網址的主機名稱部分,例如 iap-example-999999.appspot.com,這個網域便會顯示在先前開啟的 Hello World 網頁網址列中。請不要在該網址開頭加上 |
開發人員聯絡資訊 |
請至少輸入一個電子郵件地址 |
點選「儲存並繼續」。
在「範圍」部分,按一下「儲存並繼續」。
在「摘要」部分,按一下「返回資訊主頁」。
系統可能會提示您建立憑證。在本實驗室中,您不需要建立憑證,只要關閉這個瀏覽器分頁即可。
按一下「App Engine 應用程式」列中 IAP 欄的切換鈕,即可啟用「IAP」。
開啟瀏覽器分頁並前往應用程式的網址。隨即會顯示「使用 Google 帳戶登入」畫面,您必須登入才能存取應用程式。
使用您登入控制台時所用的帳戶登入。畫面會顯示「拒絕存取」。
您已成功使用 IAP 保護應用程式,但尚未指示 IAP 哪些帳戶有存取權。
取得存取權的每個電子郵件地址 (或 Google 網路論壇電子郵件地址/Workspace 網域名稱) 都必須新增為成員。
按一下「新增主體」。
輸入「學生」的電子郵件地址。
接著依序選取「Cloud IAP」>「受 IAP 保護的網頁應用程式使用者」角色,指派給該電子郵件地址。
您可以用相同方式輸入多個電子郵件地址或 Workspace 網域。
系統隨即會在視窗底部顯示「已更新政策」訊息。
點選「Check my progress」,確認目標已達成。
返回應用程式,然後重新載入頁面。您已使用授權的使用者登入,因此現在應該會看到網頁應用程式。
如果還是看到「您沒有存取權」頁面,表示 IAP 尚未重新確認您的授權。在這種情況下,請執行下列步驟:
/_gcp_iap/clear_login_cookie
,例如:https://iap-example-999999.appspot.com/_gcp_iap/clear_login_cookie
。這些步驟會使 IAP 重新確認存取權限,您現在應該可以看到應用程式的主畫面。
如果您可以存取另一個瀏覽器或在瀏覽器中使用無痕模式,並且有其他有效的 Gmail 或 Workspace 帳戶,則可透過該瀏覽器前往應用程式頁面,然後用其他帳戶登入。由於該帳戶尚未獲得授權,因此會顯示「您沒有存取權」畫面,而不是應用程式頁面。
應用程式受到 IAP 保護後,就能使用 IAP 在網頁要求標頭中提供的身分資訊。在這個步驟中,應用程式將取得已登入使用者的電子郵件地址,以及 Google Identity 服務指派給該使用者的永久專屬使用者 ID。系統會在歡迎頁面向使用者顯示這項資料。
python39
。部署作業應該會在幾分鐘內完成。等待過程中,您可以按照下方說明檢查應用程式檔案。
點選「Check my progress」,確認目標已達成。
這個資料夾包含與先前部署的應用程式 1-HelloWorld
相同的一組檔案,但其中兩個檔案已變更:main.py
和 templates/index.html
。該程式已改為檢索 IAP 在要求標頭中提供的使用者資訊,且範本現在也會顯示該項資料。
在 main.py
中,有兩行程式碼可取得 IAP 提供的身分資料:
X-Goog-Authenticated-User- 標頭是由 IAP 提供,名稱不區分大小寫,因此可依需求採用全部小寫或全部大寫。render_template 語句現在包含這些值,因此可以顯示:
index.html 範本可以將名稱加上雙大括號來顯示這些值:
如您所見,提供的資料包含 accounts.google.com
前置字串,顯示資訊來源。應用程式可視需要移除包括半形冒號在內的所有內容,以取得原始值。
部署作業準備就緒後,系統會顯示訊息,指示您可以使用 gcloud app browse
查看應用程式。
系統可能需要幾分鐘,才能將先前的應用程式版本替換為新版本。請視需要重新整理頁面,以查看類似上述內容的頁面。
如果停用或以某種方式 (例如透過同一個雲端專案中執行的其他應用程式) 略過 IAP,會對應用程式有什麼影響?停用 IAP 以查看後續影響。
系統會提醒您,停用 IAP 後所有使用者都可以存取該應用程式。
應用程式目前未受到保護,因此使用者可以發送看似透過 IAP 傳送的網頁要求。舉例來說,您可以在 Cloud Shell 中執行下列 curl 指令,完成 (將 <your-url-here>
替換成應用程式正確網址) 這項操作:
網頁會顯示在指令列中,如下所示:
應用程式無法知道 IAP 是否遭到停用或略過。因此,針對可能存在潛在風險的情況,加密編譯驗證提供了解決方案。
如果 IAP 可能遭到停用或略過,您的應用程式可確認收到的身分資訊是否有效。方法是使用 IAP 新增的第三個網頁要求標頭,名稱為 X-Goog-IAP-JWT-Assertion
。該標頭的值是以加密編譯方式簽署的物件,也包含使用者身分資料。應用程式可驗證數位簽章,並使用該物件中提供的資料確保這個簽章是出自 IAP,未經修改。
數位簽章驗證需要幾個額外的步驟,例如檢索最新的 Google 公開金鑰。您可以根據使用者可能停用或略過 IAP 的可能性,以及應用程式的敏感度,決定應用程式是否需要這些額外步驟。
python39
。部署作業應該會在幾分鐘內完成。等待過程中,您可以按照下方說明檢查應用程式檔案。
點選「Check my progress」,確認目標已達成。
這個資料夾包含與 2-HelloUser
相同的一組檔案,其中有兩個已變更的檔案和一個新檔案。新檔案是 auth.py
,提供 user()
方法來檢索並驗證以加密編譯方式簽署的身分資訊。已變更的檔案是 main.py
和 templates/index.html
,這兩個檔案目前採用上述方法得出的結果。此外,系統也會顯示在上次部署作業中發現的未驗證標頭,進行比較。
user()
函數中:assertion
是指特定要求標頭中提供的以加密編譯方式簽署的資料。該程式碼會使用程式庫驗證並解碼該資料。驗證作業採用 Google 提供的公開金鑰檢查相關簽署資料,並瞭解資料目標對象 (基本上是指受到保護的 Google Cloud 專案)。輔助函式 keys()
和 audience()
會收集並傳回這些值。
簽署物件包含我們需要的兩種資料:經過驗證的電子郵件地址和專屬 ID 值 (以 sub
列出,表示訂閱者,位於標準欄位)。
這樣步驟 3 就完成了。
部署作業準備就緒後,系統會顯示訊息,指示您可以使用 gcloud app browse
查看應用程式。
如果瀏覽器未開啟新分頁,請將顯示的連結複製到新分頁正常開啟。
提醒您,先前您已停用 IAP,因此應用程式不會提供 IAP 資料。您應該會看到類似以下頁面:
如同之前的情況,系統可能需要幾分鐘才能將最新版本上線,屆時才能看到新版頁面。
IAP 已停用,因此沒有提供使用者資訊。現在重新啟用 IAP。
在 Cloud 控制台視窗中,依序點選「導覽選單」>「安全性」>「Identity-Aware Proxy」。
點選 App Engine 應用程式旁的「IAP」切換開關,即可重新啟用 IAP。按一下「啟用」。
重新整理頁面。頁面應如下所示:
請注意,經驗證方法提供的電子郵件地址不含 accounts.google.com:
前置字串。
如果停用或略過 IAP,經過驗證的資料會遺失或失效,原因是不具備有效簽章,除非是由 Google 私密金鑰持有者所建立的資料。
您部署了 App Engine 網頁應用程式。首先,您只將應用程式存取權授予選定的使用者。接著,您檢索並顯示了 IAP 允許應用程式存取權的使用者身分,也瞭解若停用或略過 IAP,該資訊可能會如何遭到冒用。最後,您驗證了以加密編碼方式簽署的使用者身分斷言,這類斷言無法假冒。
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2024 年 4 月 15 日
實驗室上次測試日期:2024 年 2 月 28 日
Copyright 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。
此内容目前不可用
一旦可用,我们会通过电子邮件告知您
太好了!
一旦可用,我们会通过电子邮件告知您
One lab at a time
Confirm to end all existing labs and start this one