本頁說明如何使用 Access Context Manager 建立存取層級,並將這些層級套用至Identity-Aware Proxy (IAP) 安全資源。
總覽
存取層級是一組根據要求來源而指派給要求的屬性。您可以依據裝置類型、IP 位址和使用者身分等資訊來指派要授予的存取層級。舉例來說,您可針對公司內部連線指派「High_Trust」層級,而執行已核准作業系統的外部裝置則可指派「Medium_Trust」信任關係。
設定端點驗證後,裝置資訊會被收集,並由存取層級參照。端點驗證會建立清點,列出所有存取公司資源的企業和個人裝置。
您可以將存取層級新增為 IAP 安全資源的 身分與存取權管理 (IAM) 條件,藉此強制執行存取層級。您可以透過 IAP 套用精細的資源層級存取權控管模型,而非使用網路層級防火牆。舉例來說,您可以為許多資源指派「Medium_Trust」層級,但有些比較敏感的資源則需要「High_Trust」層級。
詳情請參閱 Access Context Manager 總覽。
事前準備
開始之前,請先完成下列步驟:
- 使用 IAP 保護資源。
- 設定端點驗證。請注意,您只有在想根據使用者裝置資訊 (例如儲存空間加密狀態) 限制資源存取權時,才需要這麼做。
請確認您已授予專案下列任一角色。
- Access Context Manager 管理員
- Access Context Manager 編輯者
建立存取層級
以下程序會建立存取層級。
在本例中,假設您要建立存取層級,讓內部稽核員群組存取專案的 Google Cloud Observability。稽核員所有裝置的指定 IP 都位於範圍在 203.0.113.0
到 203.0.113.127
之間的子網路。您也想確保學生的裝置已加密。您知道除了稽核員使用的裝置以外,不會有任何其他裝置指派到該子網路。
主控台
前往 Google Cloud 控制台的 Access Context Manager 頁面。
如果系統提示您選取機構,請依提示選取您的機構。
按一下「Access Context Manager」頁面最上方的 [New] (新增)。
在「New Access Level」(建立新的存取層級) 窗格中,按一下「條件」部分的「新增屬性」,然後再按一下「裝置政策」。
點選「儲存空間加密」下拉式選單,然後選取「已加密」。請注意,您必須在員工的裝置上設定端點驗證,這項規則才會生效。
再次按一下「Add attribute」(新增屬性),然後選取「IP Subnetworks」(IP 子網路)。
在「IP Subnetworks」(IP 子網路) 方塊中輸入一或多個 IPv4 或 IPv6 範圍 (CIDR 區塊格式)。
在本例中,如要限制只有稽核員可存取,請在「IP Subnetworks」(IP 子網路) 方塊中輸入
203.0.113.0/25
。按一下 [儲存]。
gcloud
為包含一或多個 IPv4 或 IPv6 (CIDR 區塊格式) 範圍的存取層級建立 .yaml 檔案。
在本例中,如要僅限稽核員存取,請在 .yaml 檔案輸入以下程式碼:
- ipSubnetworks: - 203.0.113.0/25 - devicePolicy: allowedEncryptionStatuses - ENCRYPTED
如需存取層級屬性清單及其 YAML 格式,請參閱「存取層級屬性」。如需所有可能屬性的完整 YAML 檔案,請參閱這個存取層級 YAML 檔案範例。
請注意,您必須在員工的裝置上設定端點驗證,
devicePolicy
規則才會生效。儲存檔案。本例的檔案名稱為「CONDITIONS.yaml」。
建立存取層級。
gcloud access-context-manager levels create NAME \ --title TITLE \ --basic-level-spec CONDITIONS.yaml \ --policy=POLICY_NAME
其中:
NAME 是存取層級的專屬名稱,開頭須為英文字母,且只能由英文字母、數字和底線組成。
TITLE 是使用者可理解的標題,政策不得使用重複的標題。
POLICY_NAME 是指您機構的存取權政策名稱。
畫面會顯示類似以下的輸出:
Create request issued for: NAME Waiting for operation [accessPolicies/POLICY_NAME/accessLevels/NAME/create/1521594488380943] to complete...done. Created level NAME.
API
編寫要求主體,建立包含一或多個 IPv4 或 IPv6 範圍 (CIDR 區塊格式) 和要求加密儲存空間的裝置政策的
AccessLevel
資源。在本例中,如要僅限稽核員存取,請在要求主體中輸入以下程式碼:
{ "name": "NAME", "title": "TITLE", "basic": { "conditions": [ { "ipSubnetworks": [ "203.0.113.0/25" ] }, { "devicePolicy": [ "allowedEncryptionStatuses": [ "ENCRYPTED" ] ] } ] } }
其中:
NAME 是存取層級的專屬名稱,開頭須為英文字母,且只能由英文字母、數字和底線組成。
TITLE 是使用者可理解的標題,政策不得使用重複的標題。
以呼叫
accessLevels.create
的方式建立存取層級。POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels
其中:
- POLICY_NAME 是指您機構的存取權政策名稱。
套用存取層級
受 IAP 保護的資源具有 IAM 政策,可將 IAP 角色繫結至資源。
透過將 IAM 條件繫結新增至 IAM 政策,系統會根據要求屬性進一步限制對資源的存取權。這些要求屬性包括:
- 存取層級
- URL 主機/路徑
- 日期/時間
請注意,與 request.host
和 request.path
(在 IAM 條件繫結中指定) 比較的要求值必須使用確切值。舉例來說,假如您對開頭為 /internal admin
的路徑限制存取權,使用者只要前往 /internal%20admin
就可以略過這項限制。詳情請參閱「使用主機名稱和路徑條件」一文。
下列步驟說明如何更新 IAM 政策,為受 IAP 保護的資源新增存取層級。
主控台
前往 IAP 管理員頁面。
找出您要更新 IAM 權限的資源,然後勾選資源旁的核取方塊。
在右側的「資訊面板」中,按一下「新增主體」。
在「New principal」方塊中,輸入您要指派角色的主體。
在「請選擇角色」下拉式清單中,選取「IAP-Secured Web App User」角色。
如要指定現有存取層級,請從「Access levels」(存取層級) 下拉式清單中選取。您必須選取「IAP-Secured Web App User」角色,並擁有機構層級權限,才能查看現有存取層級。
將多個存取層級套用至資源時,只要使用者符合您所選取的「其中一項」存取層級條件,系統就會授予他們資源存取權 (清單中的存取層級使用「或」邏輯運算子)。如果您希望使用者一次符合多項存取層級條件 (使用「且」邏輯運算子的存取層級),請建立包含多個存取層級的存取層級。
如果您要為主體新增更多角色,請按一下「新增其他角色」。
新增完角色之後,點選 [Save] (儲存)。
gcloud
目前您只能使用 gcloud CLI 設定專案層級條件繫結。
如要設定條件繫結,請按照下列流程編輯專案的 policy.yaml
檔案:
使用下列 gcloud 指令開啟應用程式的 IAM 政策:
gcloud projects get-iam-policy PROJECT_ID > policy.yaml
編輯
policy.yaml
檔案,指定下列內容:- 您要套用 IAM 條件的使用者與群組。
- 您要授予資源存取權的
iap.httpsResourceAccessor
角色。 - 包含存取層級的 IAM 條件。
如果符合 ACCESS_LEVEL_NAME 存取層級要求,且資源網址路徑以
/
開頭,則下列條件會授予使用者與群組存取權。... - members: - group:EXAMPLE_GROUP@GOOGLE.COM - user:EXAMPLE_USER@GOOGLE.COM role: roles/iap.httpsResourceAccessor condition: expression: "accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/") title: CONDITION_TITLE ...
使用
set-iam-policy
指令將政策繫結至應用程式。gcloud projects set-iam-policy PROJECT_ID policy.yaml
API
如要編輯應用程式的 policy.json
檔案,請依您應用程式的類型來執行下列程序。如要進一步瞭解如何使用 IAM API 管理存取政策,請參閱「管理受 IAP 保護資源的存取權」一文。
在完成下列應用程式專屬 API 步驟前,請先匯出下列變數:
export PROJECT_NUM=PROJECT_NUMBER export IAP_BASE_URL=https://iap.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/iap_web # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy export JSON_NEW_POLICY=POLICY_FILE.JSON
App Engine
匯出下列 App Engine 變數:
# The APP_ID is usually the project ID export GAE_APP_ID=APP_ID export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}
使用
getIamPolicy
方法取得 App Engine 應用程式的 IAM 政策。結尾的空資料位元會將curl
要求轉換為 POST,而不是 GET。curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -d '' ${GAE_BASE_URL}/:getIamPolicy
將 IAM 條件繫結新增至 IAM 政策 JSON 檔案。以下是已編輯的
policy.json
檔案範例。此檔案會將iap.httpsResourceAccessor
角色繫結至兩個使用者,進而授予受 Chrome Enterprise 進階版保護資源的存取權。系統已新增 IAM 條件,因此只會在使用者符合「ACCESS_LEVEL_NAME」存取層級要求且資源網址路徑以/
開頭時,才會授予資源的存取權。每個繫結只能有一個條件。
範例 policy.json 檔案{ "policy": { "bindings": [ { "role": "roles/iap.httpsResourceAccessor", "members": [ "group:EXAMPLE_GROUP@GOOGLE.COM", "user:EXAMPLE_USER@GOOGLE.COM" ], "condition": { "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")", "title": "CONDITION_NAME" } } ] } }
使用
setIamPolicy
方法設定新的policy.json
檔案。curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${GAE_BASE_URL}:setIamPolicy -d @${JSON_NEW_POLICY}
App Engine 服務與版本
您也可以更新 App Engine 服務、所有版本或特定版本服務的 IAM 政策。如要針對特定版本服務執行此操作:
- 匯出下列其他變數。
export GAE_SERVICE=SERVICE_NAME export GAE_VERSION=VERSION_NAME
- 更新匯出的 GAE_BASE_URL 變數。
export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
- 使用本文先前提供的
getIamPolicy
和setIamPolicy
指令,取得並設定版本的 IAM 政策。
GKE 與 Compute Engine
匯出後端服務的專案 ID。
export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME
使用
getIamPolicy
方法取得 Compute Engine 應用程式的 IAM 政策。結尾的空資料位元會將curl
要求轉換為 POST,而不是 GET。curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \ -d ''
將 IAM 條件繫結新增至 IAM 政策 JSON 檔案。以下是已編輯的
policy.json
檔案範例。此檔案會將iap.httpsResourceAccessor
角色繫結至兩個使用者,進而授予受 Chrome Enterprise 進階版保護資源的存取權。系統已新增 IAM 條件,因此只會在使用者符合「ACCESS_LEVEL_NAME」存取層級要求且資源網址路徑以/
開頭時,才會授予資源的存取權。每個繫結只能有一個條件。
範例 policy.json 檔案{ "policy": { "bindings": [ { "role": "roles/iap.httpsResourceAccessor", "members": [ "group":EXAMPLE_GROUP@GOOGLE.COM, "user:EXAMPLE_USER@GOOGLE.COM" ], "condition": { "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")", "title": "CONDITION_NAME" } } ] } }
使用
setIamPolicy
方法設定新的policy.json
檔案。curl -i -H "Content-Type:application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \ -d @${JSON_NEW_POLICY}