本頁面說明如何管理資源層級中受 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.create、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 政策管理員:透過 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 管理員頁面;如要管理存取權則須至 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 管理員頁面中的「所有網路服務」核取方塊相同。 路徑 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 管理員頁面中的「所有通道資源」核取方塊相同。 路徑 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 的存取權,但不會授予機構子項的存取權。這表示管理員在制定拒絕政策時,必須明確列出所有相關的精細權限,才能拒絕附件點及其子項的存取權。
如需這類細項權限的完整清單,請參閱「拒絕政策支援的權限」。完整網域名稱 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/ 的要求路徑無效,就讓任何人存取資源」這樣的政策條件。