步驟 3:設定存取權
本節將根據您的需求,說明如何授予 MDE 部署作業的存取權。
透過 IAP 建立 SSH 通道
如要連線至 MDE 服務的私人 IP,可以使用 SSH 通道連線至 Proxy VM。這種做法可讓您使用 Postman 等本機工具,與 MDE API 互動。
標準 MDE 部署作業會建立名為 mde-proxy 的 Proxy VM。這部電腦可將傳入的要求 Proxy 至 MDE API 閘道或 MDE 網頁介面。這個 VM 只有私人 IP,但您可以使用 Identity-Aware Proxy (IAP) for TCP forwarding,為這部機器建立安全的 SSH 通道。本節其餘內容將說明如何設定 IAP,將流量導向 mde-proxy,以及如何從工作站建立連往該執行個體的通道:
前往 Google Cloud 控制台的「IAP」,然後點選「SSH AND TCP RESOURCES」(SSH 和 TCP 資源)。
授予有權使用 IAP 的使用者權限,透過 IAP 連線至
mde-proxy:如要讓使用者透過 IAP 連線至
mde-proxy,請按照下列指示授予他們roles/iap.tunnelResourceAccessor角色:從清單中選取「mde-proxy」。
按一下右側面板中的「Add Principal」(新增主體)。
輸入要授予存取權的主體電子郵件地址。
選取
IAP-secured Tunnel User角色。
使用下列指令建立 MDE API 的通道:
export MDE_PROXY_ZONE=$(gcloud compute instances list --filter="mde-proxy" \ --format="value(zone)") gcloud compute ssh mde-proxy \ --zone "$MDE_PROXY_ZONE" --tunnel-through-iap \ -- -N -L 8080:api.mde.cloud.google.com:80執行指令後,您可以在
http://localhost:8080下存取 MDE API。建立通道連線至 MDE 網頁介面。
如果您在步驟 3 中建立 MDE API 的通道,可以開啟新的終端機,稍後再執行指令。連至 MDE API 和 MDE 網頁介面的 SSH 通道可以平行執行。
export MDE_PROXY_ZONE=$(gcloud compute instances list --filter="mde-proxy" \ --format="value(zone)") gcloud compute ssh mde-proxy \ --zone "$MDE_PROXY_ZONE" --tunnel-through-iap \ -- -N -L 8081:ui.mde.cloud.google.com:80執行指令後,即可在
http://localhost:8081下存取 MDE 網頁介面。
設定 Identity-Aware Proxy
如果您使用「外部負載平衡器」選項部署 MDE,即可透過 Identity-Aware Proxy (IAP) 安全連線至 MDE API 和網頁介面的內部 IP,並將 MDE 網頁介面的外部存取權限制為僅限授權使用者。
如要使用 IAP,請先啟用 IAP 服務 API (如果尚未啟用),並設定 OAuth 畫面:
在 Google Cloud 控制台中,前往 IAP,然後按一下「Enable API」(啟用 API)。這項作業可能需要幾分鐘才能完成。
設定 IAP 的 OAuth 同意畫面:
如果稍後想變更 OAuth 同意畫面上的資訊 (例如產品名稱或電子郵件地址),請重複上述步驟來設定同意畫面。
設定外部 HTTP 負載平衡器的網頁介面存取權
在本節中,您將使用 IAP 設定 MDE 網頁介面外部 HTTP 負載平衡器的存取權。
如果您為 MDE 網頁介面啟用外部 HTTP 負載平衡器,就必須使用 IAP 限制應用程式存取權,只允許授權使用者存取。
事前準備
請務必完成下列必要條件:
- 您已透過 MDE 網頁介面部署 MDE。
- 您已透過外部 HTTP 負載平衡器部署 MDE 網頁介面。
- 您已完成一般 IAP 設定步驟。
步驟
找出與外部 UI 服務對應的資源 (尋找
mde-ui-ext-service)。在該資源的「IAP」欄中,將切換鈕設為「已啟用」。
在確認對話方塊中,按一下「開啟」。
選取資源名稱旁的核取方塊。
在右側面板中,按一下「Add Principal」(新增主體)。
輸入要授予存取權的使用者或群組電子郵件地址。
在「角色」下拉式選單中,選取「Cloud IAP」>「受 IAP 保護的網頁應用程式使用者」。
按一下 [儲存]。
跨機構存取權 (選填)
根據預設,IAP 會使用 Google 代管的 OAuth 用戶端,嚴格限制只有與專案位於相同 Google Cloud 機構的使用者可以存取。如果部署作業需要外部使用者 (使用不同網域的合作夥伴) 存取,您必須使用設定為「外部」使用者類型的自訂 OAuth 用戶端。
詳情請參閱 Google Cloud 官方說明文件,瞭解如何搭配 IAP 使用自訂 OAuth 用戶端,以及為 GKE 啟用 IAP。
您可以透過下列任一方法設定這項功能:
方法 A:直接透過主控台設定 (不使用 GKE Secret)
如果 GKE BackendConfig 未管理 IAP 設定 (表示沒有 iap 區塊,因此 GKE Ingress 可沿用現有設定),您可以直接在控制台中設定自訂用戶端:
- 將專案的 OAuth 同意畫面設為「外部」(請參閱上方的「設定 OAuth 同意畫面」一節)。如果應用程式仍處於「測試中」狀態,請務必將外部使用者新增至「測試使用者」清單。
- 前往 IAP 頁面。
- 在
mde-ui-ext-service資源的「動作」欄中,按一下「更多選項」 (三點圖示),然後選取「設定」。 - 選取「自訂 OAuth」。
- 按一下「自動產生憑證」 (如果您在「API 和服務」中手動建立憑證,請提供現有憑證)。
- 按一下 [儲存]。
方法 B:GKE 管理的設定 (使用 Kubernetes 密鑰)
如果您偏好使用 Kubernetes 資訊清單 (GitOps) 管理 IAP 設定,則必須將憑證儲存在密碼中,並在 BackendConfig 中參照該密碼:
- 將 OAuth 同意畫面設定為「外部」,然後依序前往「API 和服務」>「憑證」,手動建立 OAuth 用戶端憑證 (網頁應用程式類型)。
- 在叢集中建立 Kubernetes Secret:
sh kubectl create secret generic iap-oauth-secret \ --namespace=mde \ --from-literal=client_id=YOUR_CLIENT_ID \ --from-literal=client_secret=YOUR_CLIENT_SECRET - 更新服務的
BackendConfig,以參照密鑰:yaml spec: iap: enabled: true oauthclientCredentials: secretName: iap-oauth-secret
設定 MDE 網頁介面的 DNS
如果您為 MDE 網頁介面啟用外部 HTTP 負載平衡器,則必須將指派給 input.tfvars 中變數 MDE_UI_DOMAIN_NAME 的網域名稱 A 記錄,設為部署的外部 HTTP 負載平衡器 IP 位址,才能完成 Google 代管 SSL 憑證的佈建作業。
您可以使用下列指令,查詢外部 HTTP 負載平衡器的 IP 位址:
gcloud compute addresses list --filter="name~'.*mde-ui.*'" --format="value(address)" --global
如要進一步瞭解如何建立 A 記錄,請洽詢 DNS 代管商。