管理條件式角色繫結

本主題說明如何在 Identity and Access Management (IAM) 允許政策中新增、修改及移除條件式角色繫結。

事前準備

  • Enable the IAM API.

    Enable the API

  • 請參閱 IAM 條件總覽,瞭解 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,在現有的允許政策中新增簡單的時間條件

如要將條件角色繫結新增至現有的允許政策,請按照下列步驟操作:

控制台

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

    前往「IAM」頁面

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

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

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

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

    條件建構工具

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

    條件編輯器

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

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

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

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

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,更新現有允許政策中的時間條件

如要修改現有允許政策中的條件角色繫結,請執行下列操作:

控制台

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

    前往「IAM」頁面

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

  3. 在「編輯權限」面板中,找到要設定條件的角色。然後在「身分與存取權管理條件 (選用)」下方,按一下現有條件的名稱進行編輯。

  4. 在「編輯條件」面板中,您可以保留或更新條件的現有標題和說明。

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

    條件建構工具

    1. 新增條件運算式或修改現有條件運算式。
    2. 按一下「儲存」即可套用條件。
    3. 關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。

    條件編輯器

    1. 按一下「條件編輯器」分頁,然後新增條件運算式或修改現有條件運算式。
    2. 輸入運算式後,您可以選擇點選文字方塊右上方的「執行 Linter」,驗證 CEL 語法。
    3. 按一下「儲存」即可套用條件。
    4. 關閉「編輯條件」面板後,再次按一下「編輯權限」面板中的「儲存」,即可更新允許政策。

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
}

在本範例中,我們會更新運算式中的 titledescription 和時間戳記值,藉此變更排定存取條件的持續時間。更新條件中以下醒目顯示的部分 (將值替換為您自己的值):

{
  "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,在允許政策中移除時間條件

如要從允許政策的角色繫結中移除條件,請執行下列操作:

控制台

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

    前往「IAM」頁面

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

  3. 在「編輯權限」面板中,找出所需角色繫結。然後在「IAM condition (optional)」下方,按一下現有條件的名稱。

  4. 在「編輯條件」面板中,按一下 按鈕移除條件。系統會提示您確認是否要刪除條件。

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

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

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

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


後續步驟