本頁面說明如何在資源層級,管理個人或群組對 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 |
clientauthconfig.clients.create、clientauthconfig.clients.update和 clientauthconfig.clients.getWithSecret權限。這些權限是由專案編輯者角色授予。
欲進一步瞭解如何授予角色,請參閱授予、變更及撤銷存取權一文。
在 Google Cloud 控制台管理存取權
如要使用Google Cloud 控制台控管受 IAP 保護的資源存取權,請按照新增或移除存取權的程序操作。
新增存取權
選取要使用 IAP 保護的資源。下列資源選項可保護一組資源:
所有網路服務:專案中的所有資源都將受到保護。請注意,這與透過 IAM 管理頁面授予專案層級存取權不同。如果使用者在「所有網路服務」資源層級獲得「IAP 政策管理員」角色,則只會具備 IAP 政策的權限。
後端服務:所有後端服務都將受到保護。
在右側的「Info panel」(資訊面板) 中,新增要授予資源 Identity and Access Management (IAM) 角色的群組或個人電子郵件地址。
在「Select a role」(選取角色) 下拉式選單中選取下列角色,將存取權政策角色套用至主體:
Owner (擁有者):授予與「IAP Policy Admin」(IAP 政策管理員) 相同的存取權。請改用「IAP 政策管理員」角色。這個角色僅允許修改政策,且不會授予應用程式的存取權。
IAP 政策管理員:授予 IAP 政策的管理員權限。
受 IAP 保護的網頁應用程式使用者:可授予應用程式和其他使用 IAP 的 HTTPS 資源存取權。
安全性審查者:可查看及稽核 IAP 政策。
新增了電子郵件地址並設定完角色之後,按一下 [Add] (新增)
移除存取權限
- 前往「Identity-Aware Proxy」頁面。
前往「Identity-Aware Proxy」頁面 - 選取受 IAP 保護的資源。
- 在右側的「資訊面板」中,選取要從主體移除的角色對應部分。
- 在展開的部分中,在您要移除角色的每個使用者或群組名稱旁邊,按一下 [Remove] (移除)。
- 在隨即顯示的「Remove principal」(移除主體) 對話方塊中,按一下「Remove」(移除)。
使用 API 管理存取權
IAM 提供一組標準方法,可用於建立及管理 Google Cloud 資源的存取控管政策。
資源和權限
IAP API 可讓您將 IAM 權限套用至受 IAP 保護專案中的個別資源。在特定層級授予的 IAM 權限,會套用至其下的所有層級。舉例來說,在專案層級授予的權限,會套用至專案中的所有 Google Cloud 資源。專案層級和更高層級資源的存取權是在 IAM 管理頁面中管理,但會顯示在 IAP 管理頁面中。
使用者必須具備特定權限,才能存取受 IAP 保護的應用程式。管理員可以使用 API 更新 IAM 政策,授予這些權限。iap.webServiceVersions.accessViaIAP 權限可授予使用者應用程式存取權。如果您使用 IAP 控制 SSH 和 RDP 等管理服務的存取權,使用者就需要 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 |
|
App Engine 服務版本 Compute Engine 不支援版本管理。 路徑 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 的存取權,但不會授予組織子項的存取權。也就是說,管理員在制定拒絕政策,拒絕連接點及其子項的存取權時,必須明確列出所有相關的精細權限。
如需這類精細權限的完整清單,請參閱「拒絕政策支援的權限」。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",
],
}
}
]
}
以下是僅含一項權限 (*.getSettings) 的 IAM 拒絕政策範例,而非指定所有精細權限。
{
"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/ 時存取資源,則該政策無效。