教學目標

學習 Google Cloud Platform 的心得分享,初步了解有關 Cloud Identity-Aware Proxy (Cloud IAP) 雲端服務的重點概念。

重點概念

首先企業若要導入雲端服務,通常想到就是將本地端的應用程式將虛擬機器往雲端移轉,此時要如何提供應用程式和虛擬機器適當的存取權限呢?此時就能夠採用 Cloud Identity-Aware Proxy (Cloud IAP) 雲端服務。所謂 Cloud Identity-Aware Proxy (Cloud IAP) 主要用於控制在 Google Cloud Platform (GCP) 上執行的雲端應用程式和虛擬機器的存取權限,Cloud IAP 主要會驗證使用者身分和要求內容,判斷是否應該將應用或虛擬機器的存取權限授予某位使用者。此外 Cloud IAP 主要是以 BeyondCorp 為企業安全模型的基礎,透過 BeyondCorp 將能夠讓每一位員工在無需使用 VPN 的情況下,從不被受信任的網路進行連線工作。所謂 BeyoundCorp 主要是 Google 所採用的零信信安全模型,其能夠將存取權限控管設定從網路移轉至個人行動裝置,而無須使用傳統的 VPN。 至於 Cloud IAP 主要是免費工具,使用者無須付費,不過如果使用了 Compute Engine,我們會針對必要的負載平衡與防火牆設定收取額外費用。

接著 Cloud IAP 主要能夠讓我們透過 HTTPS 存取的應用程式建立集中授權管理,所以我們將能夠使用應用程式層級的存取權控管模型,而非網路層級的防火牆。此外 Cloud IAP 政策將能夠跨機構進行資源調整,並且集中定義存取權政策,同時指派專屬團隊建立和強制執行政策套用至所有應用程式與資源,以利避免專案在任何應用程式中錯誤定義或實作政策。其中Cloud IAP 主要會使用簽署標頭 (Signed Headers) 和 App Engine 標準環境中的 Users API 來保護應用程式,並且能夠設定以群組為基礎的應用程式存取權。而當應用程式或資源受到 Cloud IAP 保護時,就僅能夠由成員透過代理程式進行存取,所謂成員為擁有正確 Cloud IAM 使用者的角色,當我們透過 Cloud IAP 授予使用者針對應用程式或資源的存取權時,則使用者會被存取權控管限制和管理,並且不需要使用虛擬私有網路 (VPN),以及當使用者嘗試存取受到 Cloud IAP 保護的資源時,則 Cloud IAP 會執行驗證與授權檢查。

再來所謂驗證主要是指來自於 App Engine 或 Cloud Load Balancing (HTTPS) 的請求將會透過 Cloud IAP 進行驗證,但是必須先啟用 IAP,如果 IAP 被啟用,則被受保護的資源將會傳送至 IAP 驗證伺服器,其中包括 Google Cloud 專案編號、請求網址和任何請求相關的 IAP 憑證。下一步 IAP 將會檢查使用者瀏覽器中的憑證,如果不存在,則使用者會被重新導至 OAuth 2.0 Google 帳戶登入的流程用於取得憑證,並且儲存在瀏覽器中。如果我們需要針對已存在的使用者建立 Google 帳戶,則我們能夠使用 Google Cloud Directory Sync 工具同步 Active Directory 或 LDAP 伺服器,如果請求憑證有效,則驗證伺服器將會使用這些憑證取得使用者識別資訊,像是 Email 和使用者 ID,驗證伺服器主要使用識別資訊檢查使用者 Cloud IAM 角色和被授權存取的資源。此外所謂授權主要是指當驗證完成之後,Cloud IAP 主要會套用相關 Cloud IAM 政策,以利檢查使用者是否有被授權存取資源,請注意如果使用者被授予「IAP-secured Web App User」角色,則代表被授權存取應用程式,但是如果在資源層級授予「Owner」角色,則僅能修改存取權政策,而無法存取應用程式。當我們針對資源啟用 IAP,則會自動建立 OAuth 2.0 的 Client ID 和 Secret,如果我們刪除自動產生的 OAuth 2.0 憑證,則 IAP 的功能將會無法正常執行。

最後 Cloud IAP 最佳實務需要特別注意三大方面,分別為快取、應用程式安全和防火牆設定,有關快取建議不要使用第三方 CDN,因為 CDN 可能會快取內容和提供快取頁面給未授權的使用者,如果真的需要使用 CDN,則建議區分網域儲存非敏感性資源,並且加上 Cache-contol: private 的 HTTP 回應標頭至所有物件,以利僅有受驗證的使用者才能夠存取物件。有關應用程式安全建議必須使用簽署標頭 (Signed Headers) 用於 App Engine 彈性環境、Compute Engine 和 Google Kubernetes Engine (GKE) 應用程式,請注意簽署標頭無法用於 App Engine 標準環境。當我們使用簽署標頭確保應用程式安全,當設定之後 Cloud IAP 主要會使用 JSON Web Tokens (JWT) 確認對應用程式的請求已經獲取授權,以利保護應用程式不會受到 IAP 意外停用、防火牆設定錯誤或專案內存取的影響。所謂防火牆設定主要是確保所有 Compute Engine 和 Google Kubernetes Engine (GKE) 應用程式皆由負載平衡器導入請求,並且設定防火牆規則允許健康狀態的檢查,以及允許的 IP 範圍清單,請注意如果防火牆設定不正確,則 IAP Cloud 主控台將無法顯示任何錯誤或警告訊息。

總結 Cloud IAP 將能夠提供應用程式和虛擬機器適當的存取權限,但是目前僅限於 Google 帳戶,其中包括 G Suite 帳號和 Cloud Identity 帳號,所以若是企業有內部 Active Directory 或 LDAP 伺服器的帳號,則必須先使用 Google Cloud Directory Sync 工具同步使用者身份識別的帳號之後,才能夠透過 Cloud IAP 進行身份驗證,當完成身份驗證之後,就會透過 Cloud IAM 進行身份授權,以利存取雲端資源。

相關資源