步驟 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,以及如何從工作站建立連往該執行個體的通道:

  1. 在 Google Cloud 控制台中,前往「IAP」,然後按一下「啟用 API」。這項作業可能需要幾分鐘才能完成。

  2. 前往 Google Cloud 控制台的「IAP」,然後點選「SSH AND TCP RESOURCES」(SSH 和 TCP 資源)

  3. 授予有權使用 IAP 的使用者權限,透過 IAP 連線至 mde-proxy

    如要讓使用者透過 IAP 連線至 mde-proxy,請按照下列指示授予他們 roles/iap.tunnelResourceAccessor 角色

    1. 從清單中選取「mde-proxy」

    2. 按一下右側面板中的「Add Principal」(新增主體)

    3. 輸入要授予存取權的主體電子郵件地址。

    4. 選取 IAP-secured Tunnel User 角色。

  4. 使用下列指令建立 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。

  5. 建立通道連線至 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 畫面:

  1. 在 Google Cloud 控制台中,前往 IAP,然後按一下「Enable API」(啟用 API)。這項作業可能需要幾分鐘才能完成。

  2. 設定 IAP 的 OAuth 同意畫面:

    1. 在 Google Cloud 控制台中,前往「Google Auth Platform」頁面,然後視需要選取 MDE 部署專案。

      1. 在「總覽」頁面中,按一下「建立 OAuth 用戶端」
      2. 將應用程式類型設為「Web application」(網頁應用程式)
      3. 輸入您想顯示的「Application name」(應用程式名稱),例如 MDE
      4. 在彈出式視窗中,按一下「建立」和「確定」
      5. 在「品牌」頁面,確認您看到「應用程式名稱」、「使用者支援電子郵件地址」和「開發人員聯絡資訊」

    如果稍後想變更 OAuth 同意畫面上的資訊 (例如產品名稱或電子郵件地址),請重複上述步驟來設定同意畫面。

設定外部 HTTP 負載平衡器的網頁介面存取權

在本節中,您將使用 IAP 設定 MDE 網頁介面外部 HTTP 負載平衡器的存取權。

如果您為 MDE 網頁介面啟用外部 HTTP 負載平衡器,就必須使用 IAP 限制應用程式存取權,只允許授權使用者存取。

事前準備

請務必完成下列必要條件:

  • 您已透過 MDE 網頁介面部署 MDE。
  • 您已透過外部 HTTP 負載平衡器部署 MDE 網頁介面。
  • 您已完成一般 IAP 設定步驟。

步驟

  1. 前往 Google Cloud 控制台的「IAP」頁面。

  2. 找出與外部 UI 服務對應的資源 (尋找 mde-ui-ext-service)。

  3. 在該資源的「IAP」欄中,將切換鈕設為「已啟用」

  4. 在確認對話方塊中,按一下「開啟」

  5. 選取資源名稱旁的核取方塊。

  6. 在右側面板中,按一下「Add Principal」(新增主體)

  7. 輸入要授予存取權的使用者或群組電子郵件地址。

  8. 在「角色」下拉式選單中,選取「Cloud IAP」>「受 IAP 保護的網頁應用程式使用者」

  9. 按一下 [儲存]

跨機構存取權 (選填)

根據預設,IAP 會使用 Google 代管的 OAuth 用戶端,嚴格限制只有與專案位於相同 Google Cloud 機構的使用者可以存取。如果部署作業需要外部使用者 (使用不同網域的合作夥伴) 存取,您必須使用設定為「外部」使用者類型的自訂 OAuth 用戶端

詳情請參閱 Google Cloud 官方說明文件,瞭解如何搭配 IAP 使用自訂 OAuth 用戶端,以及為 GKE 啟用 IAP

您可以透過下列任一方法設定這項功能:

方法 A:直接透過主控台設定 (不使用 GKE Secret)

如果 GKE BackendConfig 未管理 IAP 設定 (表示沒有 iap 區塊,因此 GKE Ingress 可沿用現有設定),您可以直接在控制台中設定自訂用戶端:

  1. 將專案的 OAuth 同意畫面設為「外部」(請參閱上方的「設定 OAuth 同意畫面」一節)。如果應用程式仍處於「測試中」狀態,請務必將外部使用者新增至「測試使用者」清單。
  2. 前往 IAP 頁面
  3. mde-ui-ext-service 資源的「動作」欄中,按一下「更多選項」 (三點圖示),然後選取「設定」
  4. 選取「自訂 OAuth」
  5. 按一下「自動產生憑證」 (如果您在「API 和服務」中手動建立憑證,請提供現有憑證)。
  6. 按一下 [儲存]

方法 B:GKE 管理的設定 (使用 Kubernetes 密鑰)

如果您偏好使用 Kubernetes 資訊清單 (GitOps) 管理 IAP 設定,則必須將憑證儲存在密碼中,並在 BackendConfig 中參照該密碼:

  1. OAuth 同意畫面設定為「外部」,然後依序前往「API 和服務」>「憑證」,手動建立 OAuth 用戶端憑證 (網頁應用程式類型)。
  2. 在叢集中建立 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
  3. 更新服務的 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 代管商。