這個頁面說明如何管理個人或群組對資源層級 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、clientauthconfig.clients.update 和 clientauthconfig.clients.getWithSecret 權限。這些權限是由專案編輯者角色授予。
欲進一步瞭解如何授予角色,請參閱授予、變更及撤銷存取權一文。
在 Google Cloud 控制台管理存取權
如要使用Google Cloud 控制台控管 IAP 保護資源的存取權,請按照新增或移除存取權的程序操作。
新增存取權
選取要使用 IAP 保護的資源。選取下列資源可確保一組資源的安全:
所有網路服務:專案中的所有資源都將受到保護。請注意,這與透過 IAM 管理員頁面授予專案層級存取權不同。在「所有網路服務」資源層級獲派「IAP 政策管理員」角色的使用者,只會擁有 IAP 政策的權限。
後端服務:所有後端服務都將受到保護。
在右側的「資訊」面板中,新增要授予資源 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] (移除)。
- 在隨即顯示的「移除主體」對話方塊中,按一下「移除」。
使用 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 |
| 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,但無法存取機構的後代。也就是說,管理員在制定拒絕政策時,必須明確列出所有相關的細部權限,才能在附加點及其後代項目拒絕存取權。
如需這類細部權限的完整清單,請參閱「拒絕政策支援的權限」。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或emailclaim。
如果授予公開存取權,IAP 就不會為該要求產生 Cloud 稽核記錄記錄。
目前,授予公開存取權的繫結不得有相關聯的條件。
舉例來說,如果要求路徑開頭為 /public/,允許任何人存取資源的政策無效。