本頁面說明如何管理資源層級中受 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 控制台clientauthconfig.clients.create啟用 IAP,可能也需要 clientauthconfig.clients.update 和 clientauthconfig.clients.getWithSecret 權限。這些權限係由專案編輯者角色來授予。
欲進一步瞭解如何授予角色,請參閱授予、變更及撤銷存取權一文。
在 Google Cloud 控制台管理存取權
如要透過Google Cloud 主控台控制受 IAP 保護資源的存取權,請按照流程新增或移除存取權。
新增存取權
前往「Identity-Aware Proxy」頁面。
前往「Identity-Aware Proxy」頁面選取要使用 IAP 保護的資源。下列資源選取項目可保護一組資源:
所有網路服務:專案中的所有資源都將受到保護。請注意,這與透過 IAM 管理員頁面授予專案層級存取權不同。在所有網路服務資源層級已獲得 IAP 政策管理員角色的使用者,僅擁有 IAP 政策的存取權。
後端服務:所有後端服務都將受到保護。
在右側「Info panel」(資訊面板) 中,新增您想授予資源之 Identity and Access Management (IAM) 角色的群組或個人的電子郵件地址。
從「Select a role」(請選擇角色) 下拉式選單中選取下列角色,將存取權政策角色套用至主體:
Owner (擁有者):授予與「IAP Policy Admin」(IAP 政策管理員) 相同的存取權。請改用「IAP Policy Admin」(IAP 政策管理員) 角色。這個角色僅允許修改政策,且不會授予應用程式的存取權。
IAP Policy Admin (IAP 政策管理員):透過 IAP 政策授予管理員權限。
IAP-Secured Web App User (受 IAP 保護的網路應用程式使用者):授予應用程式和使用 IAP 的其他 HTTPS 資源的存取權。
安全性審查者:授予查看和稽核 IAP 政策的權限。
新增了電子郵件地址並設定完角色之後,按一下 [Add] (新增)
移除存取權限
- 前往「Identity-Aware Proxy」頁面。
前往「Identity-Aware Proxy」頁面 - 選取使用 IAP 保護的資源。
- 在右側「Info panel」(資訊面板) 中,選取與您要從主體中移除的角色對應的部分。
- 在展開的部分中,在您要移除角色的每個使用者或群組名稱旁邊,按一下 [Remove] (移除)。
- 在顯示的「移除主體」對話方塊中,按一下「移除」。
透過 API 管理存取權
IAM 提供一組標準方法,可用於建立及管理 Google Cloud 資源的存取控管政策。
資源和權限
IAP API 可讓您將 IAM 權限套用至受 IAP 保護專案中的個別資源。在特定層級授予的 IAM 權限會套用至其下方的所有層級。例如,在專案層級授予的權限會套用至專案中的所有 Google Cloud 資源。專案層級以上的存取權會顯示在「IAP admin」(IAP 管理員)頁面;如要管理存取權則須至「IAM admin」(IAM 管理員)頁面。
使用者需要特定權限,才能存取受 IAP 保護的應用程式。如要授予這些權限,管理員可以使用 API 更新 IAM 政策。iap.webServiceVersions.accessViaIAP 權限可授予使用者應用程式存取權。如果您使用 IAP 控制管理服務 (例如 SSH 和遠端桌面協定) 的存取權,使用者需要 iap.tunnelInstances.accessViaIAP 權限。
每個 IAP 資源都有自己的 getIamPolicy 和 setIamPolicy 權限,可授予管理該資源及其子項存取權政策的能力。
如要呼叫 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」(所有網路服務) 核取方塊相同。 路徑 https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_web |
iap.web.getIamPolicyiap.web.setIamPolicy |
| 專案中的每個後端服務 這與 IAP 管理頁面中的「後端服務」核取方塊相同。 路徑 全球範圍: https://iap.googleapis.com/v1/projects/ 區域範圍: https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicyiap.webTypes.setIamPolicy |
| 專案中的每項轉送規則 專案中所有轉送規則的權限。 路徑 全球範圍: https://iap.googleapis.com/v1/projects/ 區域範圍: https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicyiap.webTypes.setIamPolicy |
| 專案中每個 Cloud Run 服務的區域 專案中某個區域內所有 Cloud Run 服務的權限。 路徑 https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicyiap.webTypes.setIamPolicy |
| Cloud Run 服務 Cloud Run 服務的權限。所有 Cloud Run 服務都是地區性服務。 路徑 https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicyiap.webServices.setIamPolicy |
| App Engine 應用程式 這和 IAP 管理員頁面中的「App Engine 應用程式」核取方塊相同。 路徑 https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicyiap.webTypes.setIamPolicy |
| Compute Engine 後端服務 後端服務路徑可指定後端服務 ID 或後端服務名稱。 路徑 全域範圍: https://iap.googleapis.com/v1/projects/ 區域範圍: https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicyiap.webServices.setIamPolicy |
| Compute Engine 轉送規則 轉送規則的權限。轉送規則路徑可指定轉送規則 ID 或轉送規則名稱。 路徑 全域範圍: https://iap.googleapis.com/v1/projects/ 區域範圍: https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicyiap.webServices.setIamPolicy |
| App Engine 應用程式服務 路徑 https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicyiap.webServices.setIamPolicy |
| An App Engine service version Compute Engine doesn't support versioning. Path https://iap.googleapis.com/v1/projects/ |
iap.webServiceVersions.getIamPolicyiap.webServiceVersions.setIamPolicy |
| 專案中每個受 IAP 保護的 VM 執行個體 這和 IAP 管理員頁面中的「All Tunnel Resources」(所有通道資源) 核取方塊相同。 路徑 https://iap.googleapis.com/v1/projects/ |
iap.tunnel.getIamPolicyiap.tunnel.setIamPolicy |
| 至少有一個 VM 執行個體的可用區 這與 IAP 管理頁面中的可用區名稱核取方塊相同,例如 us-central1-c。路徑 https://iap.googleapis.com/v1/projects/ |
iap.tunnelZones.getIamPolicyiap.tunnelZones.setIamPolicy |
| 個別 VM 執行個體 路徑 https://iap.googleapis.com/v1/projects/ |
iap.tunnelInstances.getIamPolicyiap.tunnelInstances.setIamPolicy |
至少有一個目的地群組的區域,例如 us-central1 路徑 https://iap.googleapis.com/v1/projects/ |
iap.tunnelLocations.getIamPolicyiap.tunnelLocations.setIamPolicy |
| 個別目的地群組 路徑 https://iap.googleapis.com/v1/projects/ |
iap.tunnelDestGroups.getIamPolicyiap.tunnelDestGroups.setIamPolicy |
角色
下表列出 IAP IAM 角色,以及各角色具備的所有 IAP 專屬權限的對應清單。如要進一步瞭解 IAM 角色,請參閱「管理角色與權限」。
| 角色 | 具備的權限 | 說明 |
|---|---|---|
受 IAP 保護的網頁應用程式使用者 (roles/iap.httpsResourceAccessor) |
iap.webServiceVersions.accessViaIAP |
授予 App Engine 和 Compute Engine 資源的存取權。 |
受 IAP 保護的通道使用者 (roles/iap.tunnelResourceAccessor) |
iap.tunnelInstances.accessViaIAPiap.tunnelDestGroups.accessViaIAP |
授予存取受 IAP 保護的 VM 執行個體權限。 |
IAP 政策管理員 (roles/iap.admin) |
iap.web.getIamPolicyiap.web.setIamPolicyiap.webTypes.getIamPolicyiap.webTypes.setIamPolicyiap.webServices.getIamPolicyiap.webServices.setIamPolicyiap.webServiceVersions.getIamPolicyiap.webServiceVersions.setIamPolicyiap.tunnel.getIamPolicyiap.tunnel.setIamPolicyiap.tunnelZones.getIamPolicyiap.tunnelZones.setIamPolicyiap.tunnelInstances.getIamPolicyiap.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.organizations、iap.folders、iap.projects、iap.web、iap.webTypes、iap.webServices、iap.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:網際網路上的任何使用者 (包括已驗證和未驗證的使用者),也就是要求的已簽署標頭不會顯示sub或email憑證附加資訊。
如果授予公開存取權,IAP 就不會針對要求產生 Cloud 稽核記錄的記錄檔。
目前,授予公開存取權的繫結不能與任何條件相關聯。例如「如果開頭為 /public/ 的要求路徑無效,就讓任何人存取資源」這樣的政策條件。