本主題說明如何在 Identity and Access Management (IAM) 允許政策中新增、修改及移除條件式角色繫結。
事前準備
必要的角色
如要在資源的允許政策中管理條件式角色繫結,您需要取得資源的權限,以及取得和設定資源允許政策的權限。這些權限的格式如下,其中 SERVICE
是擁有資源的服務名稱,RESOURCE_TYPE
則是您要管理存取權的資源類型名稱:
SERVICE.RESOURCE_TYPE.get
SERVICE.RESOURCE_TYPE.getIamPolicy
SERVICE.RESOURCE_TYPE.setIamPolicy
舉例來說,如要在專案的允許政策中管理條件式角色繫結,您需要下列權限:
resourcemanager.projects.get
resourcemanager.projects.getIamPolicy
resourcemanager.projects.setIamPolicy
如要取得必要權限,請要求管理員授予包含這些權限的預先定義或自訂角色。舉例來說,管理員可以授予您安全管理員角色 (roles/iam.securityAdmin
),讓您有權取得幾乎所有Google Cloud 資源,並管理這些資源的允許政策。
在政策中新增條件角色繫結
您可以在新的或現有的允許政策中新增條件式角色繫結,進一步控管資源存取權。 Google Cloud 本節說明如何使用 Google Cloud 控制台、Google Cloud CLI 和 REST API,在現有的允許政策中新增簡單的時間條件。
如要將條件角色繫結新增至現有的允許政策,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的「IAM」頁面。
在主體清單中找到所需主體,然後按一下
按鈕。在「編輯權限」面板中,找到要設定條件的角色。然後在「IAM condition (optional)」(IAM 條件 (選用)) 下方,按一下「Add IAM condition」(新增 IAM 條件)。
在「Edit condition」(編輯條件) 面板中,輸入條件的標題和說明 (選填)。
您可以使用「條件建構工具」或「條件編輯器」新增條件運算式。條件建構工具提供互動式介面,可供選取所需的條件類型、運算子,以及運算式的其他適用詳細資料。條件編輯器提供以文字為基礎的介面,可使用 CEL 語法手動輸入運算式。
條件建構工具:
- 在「條件類型」下拉式選單中,選取「存取權到期」。
- 在「運算子」下拉式選單中,選取「by」。
- 在「時間」下拉式選單中,按一下 按鈕,選取日期和時間範圍。
- 按一下「儲存」即可套用條件。
- 關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。
條件編輯器:
按一下「條件編輯器」分頁標籤,然後輸入下列運算式 (請將時間戳記替換為您自己的時間戳記):
request.time < timestamp("2019-12-31T12:00:00.000Z")
輸入運算式後,您可以選擇點選文字方塊右上方的「執行 Linter」,驗證 CEL 語法。
按一下「儲存」即可套用條件。
關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。
gcloud
執行 gcloud projects get-iam-policy
指令,取得專案目前的允許政策。在下列範例中,允許政策的 JSON 版本會下載至磁碟上的路徑。
指令:
gcloud projects get-iam-policy project-id --format json > file-path
系統會下載允許政策的 JSON 格式:
{ "bindings": [ { "members": [ "user:my-user@example.com" ], "role": "roles/owner" }, { "members": [ "group:my-group@example.com" ], "role": "roles/iam.securityReviewer" } ], "etag": "BwWKmjvelug=", "version": 1 }
請注意允許政策目前的 version
,也就是 1
。如要設定允許政策並提供可過期的存取權,請新增下列醒目顯示的條件運算式 (並將時間戳記替換為您自己的時間戳記)。gcloud CLI 會自動更新版本:
{ "bindings": [ { "members": [ "user:my-user@example.com" ], "role": "roles/owner" }, { "members": [ "group:my-group@example.com" ], "role": "roles/iam.securityReviewer", "condition": { "title": "Expires_2019", "description": "Expires at noon on 2019-12-31", "expression": "request.time < timestamp('2019-12-31T12:00:00Z')" } } ], "etag": "BwWKmjvelug=", "version": 3 }
接著,執行 gcloud projects set-iam-policy
指令,設定新的允許政策:
gcloud projects set-iam-policy project-id file-path
系統會套用新的允許政策,且 travis@example.com
的角色繫結會在指定時間到期。
REST
使用「讀取 - 修改 - 寫入」模式,允許存取權至特定時間。
首先,請詳閱專案的允許政策:
Resource Manager API 的
projects.getIamPolicy
方法會取得專案的允許政策。
使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:您的 Google Cloud 專案 ID。專案 ID 為英數字串,例如my-project
。POLICY_VERSION
:要傳回的政策版本。要求應指定最新政策版本,即政策版本 3。詳情請參閱在取得政策時指定政策版本。
HTTP 方法和網址:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
JSON 要求主體:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] }, { "role": "roles/iam.securityReviewer", "members": [ "group:my-group@example.com" ] } ] }
請注意允許政策目前的 version
,也就是 1
。
接著,修改允許政策,讓使用者在特定時間前都能存取。請務必將 version
欄位變更為 3
值:
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] }, { "role": "roles/iam.securityReviewer", "condition": { "title": "Expires_2019", "description": "Expires at noon on 2019-12-31", "expression": "request.time < timestamp('2019-12-31T12:00:00Z')" }, "members": [ "group:my-group@example.com" ] } ] }
最後,請編寫更新後的允許政策:
Resource Manager API 的
projects.setIamPolicy
方法會將要求中的允許政策設為專案的新允許政策。
使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:您的 Google Cloud 專案 ID。專案 ID 為英數字串,例如my-project
。
HTTP 方法和網址:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
JSON 要求主體:
{ "policy": { "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] }, { "role": "roles/iam.securityReviewer", "members": [ "group:my-group@example.com" ], "condition": { "title": "Expires_July_1_2020", "description": "Expires on July 1, 2020", "expression": "request.time < timestamp('2020-07-01T00:00:00.000Z')" } } ] } }
如要傳送要求,請展開以下其中一個選項:
回應會包含更新後的允許政策。
修改現有的條件式角色繫結
建立條件式角色繫結後,您可以隨時變更條件運算式。本節說明如何使用Google Cloud 控制台、Google Cloud CLI 和 REST API,更新現有允許政策中的時間條件。
如要修改現有允許政策中的條件角色繫結,請執行下列操作:
控制台
前往 Google Cloud 控制台的「IAM」頁面。
在主體清單中找出所需主體,然後按一下
按鈕。在「編輯權限」面板中,找到要設定條件的角色。然後在「身分與存取權管理條件 (選用)」下方,按一下現有條件的名稱進行編輯。
在「編輯條件」面板中,您可以保留或更新條件的現有標題和說明。
您可以使用「條件建構工具」或「條件編輯器」,編輯現有條件運算式或新增條件運算式。條件建構工具提供互動式介面,可供您選取所需的條件類型、運算子,以及運算式的其他適用詳細資料。條件編輯器提供文字介面,可使用 CEL 語法手動輸入運算式。
條件建構工具:
- 新增條件運算式或修改現有條件運算式。
- 按一下「儲存」即可套用條件。
- 關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。
條件編輯器:
- 按一下「條件編輯器」分頁,然後新增條件運算式或修改現有條件運算式。
- 輸入運算式後,您可以選擇點選文字方塊右上方的「執行 Linter」,驗證 CEL 語法。
- 按一下「儲存」即可套用條件。
- 關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。
gcloud
執行 gcloud projects get-iam-policy
指令,取得專案目前的允許政策。在下列範例中,允許政策的 JSON 版本會下載至磁碟上的路徑。
指令:
gcloud projects get-iam-policy project-id --format json > file-path
系統會下載允許政策的 JSON 格式:
{ "bindings": [ { "members": [ "user:my-user@example.com" ], "role": "roles/owner" }, { "members": [ "group:my-group@example.com" ], "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_3_months", "description": "Expires in 3 months on 2019-10-12", "expression": "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")" } } ], "etag": "BwWKmjvelug=", "version": 3 }
在本範例中,我們會更新運算式中的 title
、description
和時間戳記值,藉此變更排定存取條件的持續時間。更新條件中以下醒目顯示的部分 (將值替換為您自己的值):
{ "bindings": [ { "members": [ "user:my-user@example.com" ], "role": "roles/owner" }, { "members": [ "group:my-group@example.com" ], "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_5_months", "description": "Expires in 5 months on 2020-01-12", "expression": "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')" } } ], "etag": "BwWKmjvelug=", "version": 3 }
接著,執行 gcloud projects set-iam-policy
指令來設定新的允許政策。
gcloud projects set-iam-policy project-id file-path
系統會套用更新後的允許政策,且 fatima@example.com
的角色繫結會在新的時間到期。
REST
首先,請詳閱專案的允許政策:
Resource Manager API 的
projects.getIamPolicy
方法會取得專案的允許政策。
使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:您的 Google Cloud 專案 ID。專案 ID 為英數字串,例如my-project
。
HTTP 方法和網址:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
JSON 要求主體:
{ "options": { "requestedPolicyVersion": 3 } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] }, { "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_3_months", "description": "Expires in 3 months on 2019-10-12", "expression": "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")" }, "members": [ "group:my-group@example.com" ] } ] }
接著,修改允許政策中的條件角色繫結。在本範例中,我們將更新時間戳記值,變更排定存取條件的持續時間。更新條件運算式中以下醒目顯示的部分 (將時間戳記替換為您自己的時間戳記):
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] }, { "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_5_months", "description": "Expires in 5 months on 2020-01-12", "expression": "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')" }, "members": [ "group:my-group@example.com" ] } ] }
最後,請編寫更新後的允許政策:
Resource Manager API 的
projects.setIamPolicy
方法會將要求中的允許政策設為專案的新允許政策。
使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:您的 Google Cloud 專案 ID。專案 ID 為英數字串,例如my-project
。
HTTP 方法和網址:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
JSON 要求主體:
{ "policy": { "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] }, { "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_5_months", "description": "Expires in 5 months on 2020-01-12", "expression": "request.time > timestamp('2019-07-12T07:00:00.000Z') && request.time < timestamp('2020-01-12T07:00:00.000Z')" }, "members": [ "group:my-group@example.com" ], } ] } }
如要傳送要求,請展開以下其中一個選項:
回應會包含更新後的允許政策。
從角色繫結中移除條件
從角色繫結中移除條件不會撤銷角色,而是讓該角色繫結中的所有主體無條件使用角色中的權限。
本節說明如何使用Google Cloud 控制台、Google Cloud CLI 和 REST API,在允許政策中移除時間條件。
如要從允許政策的角色繫結中移除條件,請執行下列操作:
控制台
前往 Google Cloud 控制台的「IAM」頁面。
在主體清單中找到所需主體,然後按一下
按鈕。在「編輯權限」面板中,找出所需角色繫結。然後在「IAM condition (optional)」下方,按一下現有條件的名稱。
在「編輯條件」面板中,按一下
按鈕移除條件。系統會提示您確認是否要刪除條件。關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。
gcloud
執行 gcloud projects get-iam-policy
指令,取得專案目前的允許政策。在下列範例中,允許政策的 JSON 版本會下載至磁碟上的路徑。
指令:
gcloud projects get-iam-policy project-id --format json > file-path
系統會下載允許政策的 JSON 格式:
{ "bindings": [ { "members": [ "user:my-user@example.com" ], "role": "roles/owner" }, { "members": [ "group:my-group@example.com" ], "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_3_months", "description": "Expires in 3 months on 2019-10-12", "expression": "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")" } } ], "etag": "BwWKmjvelug=", "version": 3 }
如要從允許政策中移除條件角色繫結,請移除 condition
區塊,如下所示:
{ "bindings": [ { "members": [ "user:my-user@example.com" ], "role": "roles/owner" }, { "members": [ "group:my-group@example.com" ], "role": "roles/bigquery.dataViewer", } ], "etag": "BwWKmjvelug=", "version": 3 }
請注意,儘管無條件角色繫結只需要版本 1
允許政策,version
仍會設為 3
。設定允許政策時,建議您一律使用最高版本號碼,無論是條件式角色繫結或無條件角色繫結皆然。詳情請參閱版本規定。gcloud CLI 會自動更新允許政策的版本號碼。
接著,執行 gcloud projects set-iam-policy
指令,設定更新後的允許政策:
gcloud projects set-iam-policy project-id file-path
系統會套用更新後的允許政策,移除 fatima@example.com
的條件角色繫結。角色繫結將不再過期。
REST
使用讀取 - 修改 - 寫入模式,移除條件式角色繫結。
首先,請詳閱專案的允許政策:
Resource Manager API 的
projects.getIamPolicy
方法會取得專案的允許政策。
使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:您的 Google Cloud 專案 ID。專案 ID 為英數字串,例如my-project
。
HTTP 方法和網址:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
JSON 要求主體:
{ "options": { "requestedPolicyVersion": 3 } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] }, { "role": "roles/bigquery.dataViewer", "condition": { "title": "Duration_3_months", "description": "Expires in 3 months on 2019-10-12", "expression": "request.time > timestamp(\"2019-07-12T07:00:00.000Z\") && request.time < timestamp(\"2019-10-12T07:00:00.000Z\")" }, "members": [ "group:my-group@example.com" ] } ] }
接著,移除條件式角色繫結,藉此修改允許政策:
{ "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] }, { "role": "roles/bigquery.dataViewer", "members": [ "group:my-group@example.com" ] } ] }
請注意,儘管無條件角色繫結只需要版本 1
允許政策,version
仍會設為 3
。設定允許政策時,建議您一律使用最高版本號碼,無論是條件式角色繫結或無條件角色繫結皆然。詳情請參閱版本規定。
最後,請編寫更新後的允許政策:
Resource Manager API 的
projects.setIamPolicy
方法會將要求中的允許政策設為專案的新允許政策。
使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:您的 Google Cloud 專案 ID。專案 ID 為英數字串,例如my-project
。
HTTP 方法和網址:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
JSON 要求主體:
{ "policy": { "etag": "BwWKmjvelug=", "version": 3, "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] }, { "role": "roles/bigquery.dataViewer", "members": [ "group:my-group@example.com" ] } ] } }
如要傳送要求,請展開以下其中一個選項:
回應會包含更新後的允許政策。