管理受 IAP 保護資源的存取權

本頁面說明如何管理資源層級中受 Identity-Aware Proxy (IAP) 保護資源的個人或群組存取權。

總覽

您可以使用 IAP 為 Google Cloud 專案中的個別資源和 Cloud Run 資源設定 IAP 政策。專案中的每個應用程式都可以擁有不同的存取權政策,包括擁有 Compute Engine、Google Kubernetes Engine 和 App Engine 應用程式的專案。針對 App Engine 應用程式,個別版本與服務可套用不同的存取權政策。

如要管理專案層級與更高層級的存取權,請使用 IAM 管理員頁面。在專案層級擁有存取權的使用者 (「實體」) 清單會套用至專案中的所有受 IAP 保護的資源。

事前準備

在您開始之前,您需要擁有下列項目:

  • 您要新增個人或群組存取權的受 IAP 保護資源。
  • 您要新增存取權的使用者或群組名稱。

開啟及關閉 IAP

必須擁有特定權限,才能啟用或關閉 IAP。下表說明每個應用程式類型需要的權限。

應用程式類型 所須權限
App Engine appengine.applications.update
Compute Engine、Google Kubernetes Engine 或 Cloud Run compute.backendServices.update

這些權限係由諸如專案編輯者、App Engine 管理員和 Compute 網路管理員等角色來授予。雖然這些角色能夠啟用或關閉 IAP,但他們不具備修改存取政策的權限。

此外,透過 Google Cloud 控制台啟用 IAP,可能也需要 clientauthconfig.clients.createclientauthconfig.clients.updateclientauthconfig.clients.getWithSecret 權限。這些權限係由專案編輯者角色來授予。

欲進一步瞭解如何授予角色,請參閱授予、變更及撤銷存取權一文。

在 Google Cloud 主控台管理存取權

如要透過Google Cloud 主控台控制受 IAP 保護資源的存取權,請按照流程新增或移除存取權。

新增存取權

  1. 前往「Identity-Aware Proxy」頁面
    前往「Identity-Aware Proxy」頁面

  2. 選取要使用 IAP 保護的資源。下列資源選取項目可保護一組資源:

    • 所有網路服務:專案中的所有資源都將受到保護。請注意,這與透過 IAM 管理員頁面授予專案層級存取權不同。在「所有網路服務」資源層級已獲得 IAP 政策管理員角色的使用者,僅擁有 IAP 政策的存取權。

    • 後端服務:所有後端服務都將受到保護。

  3. 在右側「Info panel」(資訊面板) 中,新增您想授予資源身分與存取權管理 (IAM) 角色的群組或個人的電子郵件地址。

  4. 從「Select a role」(請選擇角色) 下拉式選單中選取下列角色,將存取權政策角色套用至主體:

    • Owner (擁有者):授予與「IAP Policy Admin」(IAP 政策管理員) 相同的存取權。請改用「IAP Policy Admin」(IAP 政策管理員) 角色。這個角色僅允許修改政策,且不會授予應用程式的存取權。

    • IAP 政策管理員:可透過 IAP 政策授予管理員權限。

    • 受 IAP 保護的網路應用程式使用者:授予應用程式和使用 IAP 的其他 HTTPS 資源的存取權。

    • 安全性審查者:授予查看和稽核 IAP 政策的權限。

  5. 新增了電子郵件地址並設定完角色之後,按一下 [Add] (新增)

移除存取權限

  1. 前往「Identity-Aware Proxy」頁面
    前往「Identity-Aware Proxy」頁面
  2. 選取使用 IAP 保護的資源。
  3. 在右側「Info panel」(資訊面板) 中,選取與您要從實體中移除的角色對應的部分。
  4. 在展開的部分中,在您要移除角色的每個使用者或群組名稱旁邊,按一下 [Remove] (移除)
  5. 在隨即顯示的「Remove principal」對話方塊中,按一下「Remove」

透過 API 管理存取權

IAM 提供一組標準方法,可用於建立及管理資源的存取權控管政策。 Google Cloud

資源和權限

IAP API 可讓您將 IAM 權限套用至受 IAP 保護專案中的個別資源。在特定層級授予的 IAM 權限會套用至其下方的所有層級。例如,在專案層級授予的權限會套用至專案中的所有 Google Cloud 資源。專案層級以上的存取權會顯示在 IAM 管理員頁面;如要管理存取權,則須至 IAP 管理員頁面

使用者需要特定權限才能存取受 IAP 保護的應用程式。如要授予這些權限,管理員可以使用 API 更新 IAM 政策。iap.webServiceVersions.accessViaIAP 權限可授予使用者存取應用程式的權限。如果您使用 IAP 來控制管理服務 (SSH 及遠端桌面協定) 的存取權,使用者將需要 iap.tunnelInstances.accessViaIAP 權限。

每個 IAP 資源都有自己的 getIamPolicysetIamPolicy 權限,可授予管理該資源及其子項存取權政策的能力。

如要呼叫 IAM API,請使用資源的網址路徑建構呼叫。下列呼叫範例可取得 App Engine 應用程式服務版本的 IAM 政策。

https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_web/
appengine-APP_ID/services/SERVICE_ID/versions/VERSION_ID:getIamPolicy

下表列出支援的資源類型,以及呼叫 IAM API 所需的權限。

資源類型 權限
專案中的每個受 IAP 保護的網路應用程式
這和 IAP 管理員頁面中的「All Web Services」(所有網路服務) 核取方塊相同。

Path
https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_web
iap.web.getIamPolicy

iap.web.setIamPolicy
專案中的每項後端服務
這和 IAP 管理員頁面中的「Backend Service」(後端服務) 核取方塊相同。

路徑
全域範圍:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute

Regional scope:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute-REGION_NAME
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
專案中的每個轉送規則
專案中所有轉送規則的權限。

路徑
全域範圍:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule

Regional scope:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule-REGION_NAME
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
專案中每項 Cloud Run 服務的地區
專案中某個地區的所有 Cloud Run 服務的權限。

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/cloud_run-REGION_NAME
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
Cloud Run 服務
Cloud Run 服務的權限。所有 Cloud Run 服務都是地區性服務。

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/cloud_run-REGION_NAME/services/SERVICE_NAME
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
App Engine 應用程式
這和 IAP 管理員頁面中的「App Engine app」(App Engine 應用程式) 核取方塊相同。

路徑
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
Compute Engine 後端服務
後端服務路徑可指定後端服務 ID 或後端服務名稱。

路徑
全域範圍:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute/services/
BACKEND_SERVICE_ID or BACKEND_SERVICE_NAME

Regional scope:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute-REGION_NAME/
services/BACKEND_SERVICE_ID or BACKEND_SERVICE_NAME
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
Compute Engine 轉送規則
轉送規則的權限。轉送規則路徑可指定轉送規則 ID 或轉送規則名稱。

路徑
全域範圍:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule/services/
FORWARDING_RULE_ID or FORWARDING_RULE_NAME

Regional scope:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule-REGION_NAME/
services/FORWARDING_RULE_ID or FORWARDING_RULE_NAME
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
App Engine 應用程式服務

路徑
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID/
services/APP_SERVICE_ID
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
An App Engine service version
Compute Engine doesn't support versioning.

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID/
services/APP_SERVICE_ID/versions/VERSION_ID
iap.webServiceVersions.getIamPolicy

iap.webServiceVersions.setIamPolicy
專案中每個受 IAP 保護的 VM 執行個體
這和 IAP 管理員頁面中的「All Tunnel Resources」(所有通道資源) 核取方塊相同。

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel
iap.tunnel.getIamPolicy

iap.tunnel.setIamPolicy
至少含有一個 VM 執行個體的區域
這和 IAP 管理員頁面中的區域名稱核取方塊相同,例如 us-central1-c

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/zones/ZONE_NAME
iap.tunnelZones.getIamPolicy

iap.tunnelZones.setIamPolicy
個別 VM 執行個體

路徑
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/zones/ZONE_NAME
/instances/INSTANCE_ID or INSTANCE_NAME
iap.tunnelInstances.getIamPolicy

iap.tunnelInstances.setIamPolicy
至少包含一個目標群組的區域,例如 us-central1

路徑
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/locations/REGION_NAME
iap.tunnelLocations.getIamPolicy

iap.tunnelLocations.setIamPolicy
個別目的地群組

路徑
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/locations/REGION_NAME
/destGroups/GROUP_NAME
iap.tunnelDestGroups.getIamPolicy

iap.tunnelDestGroups.setIamPolicy

角色

下表列出 IAP IAM 角色,以及各角色具備的所有 IAP 專屬權限的對應清單。如要進一步瞭解 IAM 角色,請參閱「管理角色與權限」一文。

角色 具備的權限 說明
受 IAP 保護的網頁應用程式使用者 (roles/iap.httpsResourceAccessor) iap.webServiceVersions.accessViaIAP 授予 App Engine 和 Compute Engine 資源的存取權。
受 IAP 保護的通道使用者 (roles/iap.tunnelResourceAccessor) iap.tunnelInstances.accessViaIAP
iap.tunnelDestGroups.accessViaIAP
授予存取由 IAP 保護的 VM 執行個體的權限。
IAP 政策管理員 (roles/iap.admin) iap.web.getIamPolicy
iap.web.setIamPolicy
iap.webTypes.getIamPolicy
iap.webTypes.setIamPolicy
iap.webServices.getIamPolicy
iap.webServices.setIamPolicy
iap.webServiceVersions.getIamPolicy
iap.webServiceVersions.setIamPolicy
iap.tunnel.getIamPolicy
iap.tunnel.setIamPolicy
iap.tunnelZones.getIamPolicy
iap.tunnelZones.setIamPolicy
iap.tunnelInstances.getIamPolicy
iap.tunnelInstances.setIamPolicy
授予 IAP 管理權限,以管理資源的 IAP 存取權政策。

使用 Google Cloud CLI 管理存取權

您也可以使用 Google Cloud CLI 管理存取權。

拒絕存取

您可以使用 Identity and Access Management (IAM) 的拒絕政策,設定 Google Cloud 資源存取的安全防護機制。如需瞭解拒絕政策的實用情境清單,請參閱用途

您可以建立拒絕政策,並在這些政策中加入所有 IAP 權限。如要查看可新增至拒絕政策的 IAP 權限清單,請參閱「拒絕政策支援的權限」,並搜尋 iap.googleapis.com。雖然拒絕政策可套用至任何 IAP 權限,但其效力取決於拒絕政策的附加點

部分 IAP 權限僅適用於特定資源層級,不適用於其子項。舉例來說,iap.organizations.getSettings 會在機構層級授予 getSettings 存取權,但不會授予機構的子項存取權。也就是說,管理員在建立拒絕政策時,必須明確列出所有相關的細部權限,才能拒絕在附件點及其子項的存取權。

如需這類精細權限的完整清單,請參閱「拒絕政策支援的權限」。FQDN iap.googleapis.com 和資源類型 iap.organizationsiap.foldersiap.projectsiap.webiap.webTypesiap.webServicesiap.webServicesVersions 下的所有權限都是精細權限。

以下是 IAM 拒絕政策範例,可拒絕機構及其子項的實體存取 getSettings API。

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Forganizations%2F253519172624/denypolicies/testpolicyid",
  "uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
  "kind": "DenyPolicy",
  "displayName": "Only project admins can delete projects.",
  "etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
  "createTime": "2021-09-07T23:15:35.258319Z",
  "updateTime": "2021-09-07T23:15:35.258319Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/public:all"
        ],
        "deniedPermissions": [
          "iap.googleapis.com/iap.organizations.getSettings",
          "iap.googleapis.com/iap.folders.getSettings",
          "iap.googleapis.com/iap.projects.getSettings",
          "iap.googleapis.com/iap.web.getSettings",
          "iap.googleapis.com/iap.webTypes.getSettings",
          "iap.googleapis.com/iap.webServices.getSettings",
          "iap.googleapis.com/iap.webServicesVersions.getSettings",
        ],
      }
    }
  ]
}

以下是 IAM 拒絕政策的範例,其中只有一個權限:*.getSettings,而非指定所有精細權限。

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Forganizations%2F253519172624/denypolicies/testpolicyid",
  "uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
  "kind": "DenyPolicy",
  "displayName": "Only project admins can delete projects.",
  "etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
  "createTime": "2021-09-07T23:15:35.258319Z",
  "updateTime": "2021-09-07T23:15:35.258319Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/public:all"
        ],
        "deniedPermissions": [
          "iap.googleapis.com/*.getSettings",
        ],
      }
    }
  ]
}

以下是一些更簡單的方式,可用來建立 IAM 拒絕政策,而無須指定所有精細權限。

管理員動作 拒絕政策中的權限
拒絕所有 IAP 資源類型的特定 IAP 權限 *.updateSettings
*.getSettings
*.setIamPolicy
*.getIamPolicy
拒絕特定資源類型的所有 IAP 權限 iap.organizations.*
iap.folders.*
iap.projects.*
iap.web.*
iap.webTypes.*
iap.webServices.*
iap.webServicesVersions.*

公開存取權

如要授予「所有人」存取資源的權限,請為下列任一主體授予角色:

  • allAuthenticatedUsers:任何透過 Google 帳戶或服務帳戶進行驗證的使用者。
  • allUsers:網際網路上的任何使用者 (包括已驗證和未驗證的使用者),也就是要求的已簽署標頭不會顯示 subemail 憑證附加資訊

如果授予公開存取權,IAP 就不會針對要求產生 Cloud 稽核記錄的記錄檔。

目前,授予公開存取權的繫結不能與任何條件相關聯,例如「如果開頭為 /public/ 的要求路徑無效,就讓任何人存取資源」這樣的政策條件。