步驟 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」,然後按一下「Enable API」(啟用 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 部署專案。
    2. 在「總覽」頁面中,按一下「開始使用」
    3. 輸入您想顯示的「Application name」(應用程式名稱),例如 MDE
    4. 將您的電子郵件地址新增為「使用者支援電子郵件」,然後按一下「下一步」
    5. 在「目標對象」部分選取「外部」,然後點選「下一步」
    6. 將電子郵件地址新增為「聯絡資訊」,然後點選「下一步」
    7. 詳閱並同意《Google API 服務:使用者資料政策》,然後點選「繼續」
    8. 點選「建立」

設定外部 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. 啟用後,選取資源名稱旁的核取方塊 (mde-ui-ext-service)。

  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. 前往 IAP 頁面
  2. mde-ui-ext-service 資源的「動作」欄中,按一下「更多選項」 (三點圖示),然後選取「設定」
  3. 選取「自訂 OAuth」
  4. 按一下「自動產生憑證」 (如果您在「API 和服務」中手動建立憑證,請提供現有憑證)。
  5. 按一下 [儲存]

方法 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 代管商。