設定暫時存取權

本主題說明如何使用允許政策中的條件角色繫結,為 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 可以改為設定附有日期/時間條件的條件式角色繫結,為繫結設定結束日期。

如要授予專案資源的存取權,並設定到期時間,請按照下列步驟操作:

控制台

  1. 前往 Google Cloud 控制台的「IAM」IAM頁面。

    前往「IAM」頁面

  2. 在主體清單中找到所需主體,然後按一下 按鈕。

  3. 在「編輯權限」面板中,找到要設定條件的角色。然後在「IAM condition (optional)」(IAM 條件 (選用)) 下方,按一下「Add IAM condition」(新增 IAM 條件)

  4. 在「編輯條件」面板中,輸入條件的標題和說明 (說明為選填)。

  5. 您可以使用「條件建構工具」或「條件編輯器」新增條件運算式。條件建構工具提供互動式介面,可供您選取所需的條件類型、運算子,以及運算式的其他適用詳細資料。條件編輯器提供文字介面,可使用 CEL 語法手動輸入運算式。

    條件建構工具

    1. 從「條件類型」下拉式選單中,選取「存取權到期」
    2. 在「運算子」下拉式選單中,選取「by」
    3. 在「時間」下拉式選單中,按一下 按鈕,選取日期和時間範圍。
    4. 按一下「儲存」即可套用條件。
    5. 關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。

    條件編輯器

    1. 按一下「條件編輯器」分頁標籤,然後輸入下列運算式 (請將時間戳記替換為您自己的時間戳記):

      request.time < timestamp("2020-07-01T00:00:00.000Z")
    2. 輸入運算式後,您可以選擇點選文字方塊右上方的「執行 Linter」,驗證 CEL 語法。

    3. 按一下「儲存」即可套用條件。

    4. 關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。

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 。

如要定期授予專案資源的存取權,但僅限於每週的特定日期或時段,請按照下列步驟操作:

控制台

  1. 前往 Google Cloud 控制台的「IAM」IAM頁面。

    前往「IAM」頁面

  2. 在主體清單中找到所需主體,然後按一下 按鈕。

  3. 在「編輯權限」面板中,找到要設定條件的角色。然後在「IAM condition (optional)」(IAM 條件 (選用)) 下方,按一下「Add IAM condition」(新增 IAM 條件)

  4. 在「編輯條件」面板中,輸入條件的標題和說明 (選填)。

  5. 您可以使用「條件建構工具」或「條件編輯器」新增條件運算式。條件建構工具提供互動式介面,可供您選取所需的條件類型、運算子,以及運算式的其他適用詳細資料。條件編輯器提供文字介面,可使用 CEL 語法手動輸入運算式。

    條件建構工具

    1. 按一下「新增」
    2. 在「條件類型」下拉式選單中,依序選取「時間」 「時間表」 「星期幾」
    3. 從「運算子」下拉式選單中,選取「之後或當天」
    4. 從「星期幾」下拉式選單中選取「星期一」
    5. 從「選擇時區」下拉式選單中,選取所需時區。
    6. 確認左側已選取「And」運算子,然後再次點按「Add」
    7. 在「條件類型」下拉式選單中,選取「時間」 「時間表」 「星期幾」
    8. 從「運算子」下拉式選單中,選取「之前或當天」
    9. 在「星期幾」下拉式選單中,選取「星期五」
    10. 從「選擇時區」下拉式選單中,選取所需時區。

    此時,您只設定了週一至週五的存取權。 現在,您要設定上午 9 點 (09:00) 到下午 5 點 (17:00) 的存取權。

    1. 確認左側已選取「And」運算子,然後再次點按「Add」
    2. 依序選取「條件類型」下拉式選單中的「時間」 「時間表」 「時段」

      1. 從「運算子」下拉式選單中,選取「之後或當天」
      2. 在「Hour of Day」(一天中的時數) 下拉式選單中,選取「9」(上午 9 點)。
      3. 從「選擇時區」下拉式選單中,選取所需時區。
      4. 依序選取「條件類型」下拉式選單中的「時間」 「時間表」 「時段」
      5. 從「運算子」下拉式選單中,選取「之前或當天」。請注意,如果選取這個選項,「開啟」在邏輯上會評估為 17:00 (下午 5 點) 到 17:59 (下午 5:59) 之間的所有時間。如要將存取權到期時間設為下午 4:59,請將小時設為 16,而非 17。
      6. 在「Hour of Day」(一天中的時數) 下拉式選單中,選取「17」(下午 5 點)。
      7. 從「選擇時區」下拉式選單中,選取所需時區。
      8. 按一下「儲存」即可套用條件。
      9. 關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。

      您已將存取權設定為週一至週五上午 9 點至下午 5 點。

      條件編輯器

      1. 按一下「條件編輯器」分頁標籤,然後輸入下列運算式 (將預留位置值替換成您自己的值):

        request.time.getHours("Europe/Berlin") >= 9 &&
        request.time.getHours("Europe/Berlin") <= 17 &&
        request.time.getDayOfWeek("Europe/Berlin") >= 1 &&
        request.time.getDayOfWeek("Europe/Berlin") <= 5
        
      2. 輸入運算式後,您可以選擇點選文字方塊右上方的「執行 Linter」,驗證 CEL 語法。

      3. 按一下「儲存」即可套用條件。

      4. 關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。

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"
        }
      }
    ]
  }
}

如要傳送要求,請展開以下其中一個選項:

回應會包含更新後的允許政策。


後續步驟