本主題說明如何使用允許政策中的條件角色繫結,為 Google Cloud資源設定臨時 (會過期) 存取權。使用日期/時間屬性,即可在存取特定資源時強制執行時間控管。舉例來說,您可以授予專案的臨時存取權,在指定時間開始和停止,或依排程定期授予。
事前準備
- 請參閱「條件總覽」,瞭解 Identity and Access Management (IAM) 條件式角色繫結的基本概念。
- 請查看可在條件運算式中使用的日期/時間屬性。所有 Google Cloud 服務都會辨識日期/時間屬性。
必要的角色
如要取得管理條件角色繫結所需的權限,請要求管理員授予下列 IAM 角色:
-
如要管理專案存取權:
專案的專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin
) -
如要管理資料夾的存取權:
在資料夾上擁有資料夾管理員 (
roles/resourcemanager.folderAdmin
) 角色 -
如要管理專案、資料夾和機構的存取權:
機構管理員 (
roles/resourcemanager.organizationAdmin
) 機構 -
如要管理幾乎所有 Google Cloud 資源的存取權:
安全性管理員 (
roles/iam.securityAdmin
) 在您要管理存取權的專案、資料夾或機構中
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這些預先定義的角色具備管理條件式角色繫結所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要管理條件式角色繫結,您必須具備下列權限:
-
如要管理專案存取權,請按照下列步驟操作:
-
專案的
resourcemanager.projects.getIamPolicy
-
專案的
resourcemanager.projects.setIamPolicy
-
專案的
-
如何管理資料夾的存取權:
-
resourcemanager.folders.getIamPolicy
資料夾 -
resourcemanager.folders.setIamPolicy
資料夾
-
-
如何管理機構的存取權:
-
resourcemanager.organizations.getIamPolicy
機構 -
resourcemanager.organizations.setIamPolicy
機構
-
授予暫時存取權
您可以使用條件式角色繫結,授予資源的存取權 (設有時間限制),確保使用者在指定到期日和時間過後,就無法再存取資源。
請參考以下情境:ExampleCo 公司的資訊安全規則強調,員工不得無限期存取生產專案中的資源。先前,管理員必須手動設定及刪除 IAM 角色繫結,才能滿足工程師的緊急需求。為減少管理負擔,ExampleCo 可以改為設定附有日期/時間條件的條件式角色繫結,為繫結設定結束日期。
如要授予專案資源的存取權,並設定到期時間,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的「IAM」IAM頁面。
在主體清單中找到所需主體,然後按一下
按鈕。在「編輯權限」面板中,找到要設定條件的角色。然後在「IAM condition (optional)」(IAM 條件 (選用)) 下方,按一下「Add IAM condition」(新增 IAM 條件)。
在「編輯條件」面板中,輸入條件的標題和說明 (說明為選填)。
您可以使用「條件建構工具」或「條件編輯器」新增條件運算式。條件建構工具提供互動式介面,可供您選取所需的條件類型、運算子,以及運算式的其他適用詳細資料。條件編輯器提供文字介面,可使用 CEL 語法手動輸入運算式。
條件建構工具:
- 從「條件類型」下拉式選單中,選取「存取權到期」。
- 在「運算子」下拉式選單中,選取「by」。
- 在「時間」下拉式選單中,按一下 按鈕,選取日期和時間範圍。
- 按一下「儲存」即可套用條件。
- 關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。
條件編輯器:
按一下「條件編輯器」分頁標籤,然後輸入下列運算式 (請將時間戳記替換為您自己的時間戳記):
request.time < timestamp("2020-07-01T00:00:00.000Z")
輸入運算式後,您可以選擇點選文字方塊右上方的「執行 Linter」,驗證 CEL 語法。
按一下「儲存」即可套用條件。
關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。
gcloud
執行 gcloud projects get-iam-policy
指令,取得專案目前的允許政策。在下列範例中,允許政策的 JSON 版本會下載到磁碟上的路徑。
指令:
gcloud projects get-iam-policy project-id --format=json > filepath
系統會下載允許政策的 JSON 格式:
{
"bindings": [
{
"members": [
"user:[email protected]"
],
"role": "roles/owner"
},
{
"members": [
"group:[email protected]"
],
"role": "roles/iam.securityReviewer"
}
],
"etag": "BwWKmjvelug=",
"version": 1
}
如要設定允許政策並提供可過期的存取權,請新增下列醒目顯示的條件運算式 (將時間戳記替換為您自己的值)。gcloud CLI 會自動更新版本:
{
"bindings": [
{
"members": [
"user:[email protected]"
],
"role": "roles/owner"
},
{
"members": [
"group:[email protected]"
],
"role": "roles/iam.securityReviewer",
"condition": {
"title": "Expires_July_1_2020",
"description": "Expires on July 1, 2020",
"expression":
"request.time < timestamp('2020-07-01T00:00:00.000Z')"
}
}
],
"etag": "BwWKmjvelug=",
"version": 3
}
接著,執行 gcloud projects set-iam-policy
指令,設定新的允許政策:
gcloud projects set-iam-policy project-id filepath
系統會套用新的允許政策,且群組的角色授權會在指定時間到期。
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:[email protected]" ] }, { "role": "roles/iam.securityReviewer", "members": [ "group:[email protected]" ] } ] }
接著,修改允許政策,讓使用者在特定時間前都能存取。請務必將 version
欄位變更為 3
值:
{
"version": 3,
"etag": "BwWKmjvelug=",
"bindings": [
{
"role": "roles/owner",
"members": [
"user:[email protected]"
]
},
{
"role": "roles/iam.securityReviewer",
"members": [
"group:[email protected]"
],
"condition": {
"title": "Expires_July_1_2020",
"description": "Expires on July 1, 2020",
"expression":
"request.time < timestamp('2020-07-01T00:00:00.000Z')"
}
}
]
}
最後,請編寫更新後的允許政策:
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:[email protected]" ] }, { "role": "roles/iam.securityReviewer", "members": [ "group:[email protected]" ], "condition": { "title": "Expires_July_1_2020", "description": "Expires on July 1, 2020", "expression": "request.time < timestamp('2020-07-01T00:00:00.000Z')" } } ] } }
如要傳送要求,請展開以下其中一個選項:
回應會包含更新後的允許政策。
根據每週的日期/時間管理存取權
條件式角色繫結可用於授予資源存取權,但僅限每週特定日期或時間。
假設 ExampleCo 公司有一個品質保證專案。整個 QA 團隊都必須具備高權限角色,才能完成工作。ExampleCo 必須遵守所在地區的勞工法,該法規定工作時間為週一至週五上午 9 點至下午 5 點。ExampleCo 可以使用日期/時間條件,確保員工只能在工作週和排定的工作時間內存取Google Cloud 。
如要定期授予專案資源的存取權,但僅限於每週的特定日期或時段,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的「IAM」IAM頁面。
在主體清單中找到所需主體,然後按一下
按鈕。在「編輯權限」面板中,找到要設定條件的角色。然後在「IAM condition (optional)」(IAM 條件 (選用)) 下方,按一下「Add IAM condition」(新增 IAM 條件)。
在「編輯條件」面板中,輸入條件的標題和說明 (選填)。
您可以使用「條件建構工具」或「條件編輯器」新增條件運算式。條件建構工具提供互動式介面,可供您選取所需的條件類型、運算子,以及運算式的其他適用詳細資料。條件編輯器提供文字介面,可使用 CEL 語法手動輸入運算式。
條件建構工具:
- 按一下「新增」。
- 在「條件類型」下拉式選單中,依序選取「時間」 「時間表」 「星期幾」。
- 從「運算子」下拉式選單中,選取「之後或當天」。
- 從「星期幾」下拉式選單中選取「星期一」。
- 從「選擇時區」下拉式選單中,選取所需時區。
- 確認左側已選取「And」運算子,然後再次點按「Add」。
- 在「條件類型」下拉式選單中,選取「時間」 「時間表」 「星期幾」。
- 從「運算子」下拉式選單中,選取「之前或當天」。
- 在「星期幾」下拉式選單中,選取「星期五」。
- 從「選擇時區」下拉式選單中,選取所需時區。
此時,您只設定了週一至週五的存取權。 現在,您要設定上午 9 點 (09:00) 到下午 5 點 (17:00) 的存取權。
- 確認左側已選取「And」運算子,然後再次點按「Add」。
依序選取「條件類型」下拉式選單中的「時間」
「時間表」 「時段」。- 從「運算子」下拉式選單中,選取「之後或當天」。
- 在「Hour of Day」(一天中的時數) 下拉式選單中,選取「9」(上午 9 點)。
- 從「選擇時區」下拉式選單中,選取所需時區。
- 依序選取「條件類型」下拉式選單中的「時間」 「時間表」 「時段」。
- 從「運算子」下拉式選單中,選取「之前或當天」。請注意,如果選取這個選項,「開啟」在邏輯上會評估為 17:00 (下午 5 點) 到 17:59 (下午 5:59) 之間的所有時間。如要將存取權到期時間設為下午 4:59,請將小時設為 16,而非 17。
- 在「Hour of Day」(一天中的時數) 下拉式選單中,選取「17」(下午 5 點)。
- 從「選擇時區」下拉式選單中,選取所需時區。
- 按一下「儲存」即可套用條件。
- 關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。
您已將存取權設定為週一至週五上午 9 點至下午 5 點。
條件編輯器:
按一下「條件編輯器」分頁標籤,然後輸入下列運算式 (將預留位置值替換成您自己的值):
request.time.getHours("Europe/Berlin") >= 9 && request.time.getHours("Europe/Berlin") <= 17 && request.time.getDayOfWeek("Europe/Berlin") >= 1 && request.time.getDayOfWeek("Europe/Berlin") <= 5
輸入運算式後,您可以選擇點選文字方塊右上方的「執行 Linter」,驗證 CEL 語法。
按一下「儲存」即可套用條件。
關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。
gcloud
執行 gcloud projects get-iam-policy
指令,取得專案目前的允許政策。在下列範例中,允許政策的 JSON 版本會下載到磁碟上的路徑。
指令:
gcloud projects get-iam-policy project-id --format=json > filepath
系統會下載允許政策的 JSON 格式:
{
"bindings": [
{
"members": [
"user:[email protected]"
],
"role": "roles/owner"
},
{
"members": [
"group:[email protected]"
],
"role": "roles/bigquery.dataViewer"
}
],
"etag": "BwWKmjvelug=",
"version": 1
}
如要設定允許政策並排定存取時間,請新增下列醒目顯示的條件運算式 (將時間戳記替換為您自己的)。gcloud CLI 會自動更新版本:
{
"bindings": [
{
"members": [
"user:[email protected]"
],
"role": "roles/owner"
},
{
"members": [
"group:[email protected]"
],
"role": "roles/bigquery.dataViewer",
"condition": {
"title": "Business_hours",
"description": "Business hours Monday-Friday",
"expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5"
}
}
],
"etag": "BwWKmjvelug=",
"version": 3
}
接著,執行 gcloud projects set-iam-policy
指令,設定新的允許政策:
gcloud projects set-iam-policy project-id filepath
系統會套用新的允許政策,群組的角色授權也會允許在指定日期和時間之間存取。
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:[email protected]" ] }, { "role": "roles/bigquery.dataViewer", "members": [ "group:[email protected]" ] } ] }
接著,修改允許政策,允許排定存取時間。
新增以下醒目顯示的條件運算式 (將時間戳記替換為您自己的時間戳記)。請確認您已將 version
值更新為 3
:
{
"etag": "BwWKmjvelug=",
"version": 3,
"bindings": [
{
"role": "roles/owner",
"members": [
"user:[email protected]"
]
},
{
"role": "roles/bigquery.dataViewer",
"members": [
"group:[email protected]"
],
"condition": {
"title": "Business_hours",
"description": "Business hours Monday-Friday",
"expression":
"request.time.getHours('Europe/Berlin') >= 9 &&
request.time.getHours('Europe/Berlin') <= 17 &&
request.time.getDayOfWeek('Europe/Berlin') >= 1 &&
request.time.getDayOfWeek('Europe/Berlin') <= 5"
}
}
]
}
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:[email protected]" ] }, { "role": "roles/bigquery.dataViewer", "members": [ "group:[email protected]" ], "condition": { "title": "Business_hours", "description": "Business hours Monday-Friday", "expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5" } } ] } }
如要傳送要求,請展開以下其中一個選項:
回應會包含更新後的允許政策。
後續步驟
- 瞭解如何管理條件式角色繫結。
- 瞭解如何檢查允許政策。
- 瞭解如何使用條件式角色繫結,管理專案的即時權限存取權。