管理条件政策

本主题介绍如何在 Cloud Identity and Access Management(Cloud IAM)政策中添加、修改和移除条件绑定。

准备工作

向政策添加条件角色绑定

可以将条件角色绑定添加到新的或现有的 Cloud IAM 政策中,以进一步限制对 Google Cloud 资源的访问。本部分介绍如何使用 Cloud Console、gcloud 命令行工具和 REST API 将简单的基于时间的条件添加到现有政策。

要向现有政策添加条件角色绑定,请执行以下操作:

控制台

  1. 在 Cloud Console 中打开 IAM 页面。

    打开 IAM 页面

  2. 点击选择项目,然后选择一个项目并点击打开
  3. 从成员列表中找到所需成员,然后点击按钮。
  4. 修改权限面板中,找到要为其配置条件的对应角色。然后在条件下,点击添加条件
  5. 编辑条件面板中,输入条件的标题和可选说明。
  6. 您可以使用条件构建器条件编辑器添加条件表达式。条件构建器提供一个交互式界面,供选择所需的条件类型,运算符以及表达式的其他相关详情。条件编辑器提供基于文本的界面,供使用 CEL 语法手动输入表达式。

    条件构建器

    1. 条件类型下拉列表中,选择访问权限到期时间
    2. 运算符下拉菜单中,选择 by
    3. 时间下拉列表中,点击按钮,以便从日期和时间范围中做出选择。
    4. 点击保存以应用条件。
    5. 修改条件面板关闭后,从修改权限面板中再次点击保存,以更新 Cloud IAM 政策。

    条件编辑器

    1. 点击条件编辑器标签页并输入以下表达式(将时间戳替换为您自己的):

      request.time < timestamp("2019-12-31T12:00:00.000Z")
    2. 输入表达式后,您可以通过点击右上方文本框上方的 Run Linter 来选择验证 CEL 语法。
    3. 点击保存以应用条件。
    4. 修改条件面板关闭后,从修改权限面板中再次点击保存,以更新 Cloud IAM 政策。

gcloud 命令

Cloud IAM 政策是使用读取-修改-写入模式设置的。

执行 gcloud projects get-iam-policy 命令以获取项目的当前 Cloud IAM 政策。在以下示例中,政策的 JSON 版本将下载到磁盘上的路径中。

命令:

gcloud projects get-iam-policy [PROJECT-ID] --format json > [FILE-PATH]

下载 Cloud IAM 政策的 JSON 格式:

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/iam.securityReviewer"
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 1
    }

请注意政策的当前 version,即 1。要为政策配置可过期的访问权限,请添加以下突出显示的条件表达式(将时间戳替换为您自己的)。如果使用的不是 263.0.0 或更高版本的 gcloud 工具,请确保将 version 值更新为 3。如果使用的是较新版本的 gcloud 工具,系统会自动为您设置最大政策值:

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.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]

此时将应用新的条件政策,且 example@gmail.com 的角色绑定将在指定时间过期。

REST API

调用 projects.getIamPolicy() 可获取项目的当前 Cloud IAM 政策。

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT-ID]:getIamPolicy

请求正文设置如下:

{
      "options": {
        "requestedPolicyVersion": 3
      }
    }

响应正文将包含项目的 Cloud IAM 政策:

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.com"
          ],
          "role": "roles/iam.securityReviewer"
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 1
    }

请注意政策的当前 version,即 1。要为政策配置可过期的访问权限,请添加以下突出显示的条件表达式(将时间戳替换为您自己的)。要满足条件的版本要求,请确保将 version 值更新为 3

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.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
    }

调用 projects.setIamPolicy() 可为项目设置新的条件 Cloud IAM 政策,包括请求正文中的已更新政策:

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT-ID]:setIamPolicy

响应将是更新后的政策。

修改现有的条件角色绑定

可以修改包含现有条件角色绑定的 Cloud IAM 政策,以更改当前对某个资源的访问限制。本部分介绍如何使用 Cloud Console、gcloud 命令行工具和 REST API 更新现有政策中的基于时间的条件

要修改现有政策中的条件角色绑定,请执行以下操作:

控制台

  1. 在 Cloud Console 中打开 IAM 页面。

    打开 IAM 页面

  2. 点击选择项目,然后选择一个项目并点击打开
  3. 从成员列表中找到所需成员,然后点击按钮。
  4. 修改权限面板中,找到要为其配置条件的对应角色。然后在条件下,点击现有条件的名称进行修改。
  5. 编辑条件面板中,可以保留或更新条件的现有标题和说明。
  6. 您可以使用条件构建器条件编辑器来修改现有条件表达式或添加新条件表达式。条件构建器提供一个交互式界面,供选择所需的条件类型、运算符以及表达式的其他相关详情。条件编辑器提供基于文本的界面,供使用 CEL 语法手动输入表达式。

    条件构建器

    1. 添加新的条件表达式或修改现有的条件表达式。
    2. 点击保存以应用条件。
    3. 修改条件面板关闭后,从修改权限面板中再次点击保存,以更新 Cloud IAM 政策。

    条件编辑器

    1. 点击条件编辑器标签页,然后添加新的条件表达式或修改现有的条件表达式。
    2. 输入表达式后,您可以通过点击右上方文本框上方的 Run Linter 来选择验证 CEL 语法。
    3. 点击保存以应用条件。
    4. 修改条件面板关闭后,从修改权限面板中再次点击保存,以更新 Cloud IAM 政策。

gcloud 命令

Cloud IAM 政策是使用读取-修改-写入模式设置的。

执行 gcloud projects get-iam-policy 命令以获取项目的当前 Cloud IAM 政策。在以下示例中,政策的 JSON 版本将下载到磁盘上的路径中。

命令:

gcloud projects get-iam-policy [PROJECT-ID] --format json > [FILE-PATH]

下载 Cloud IAM 政策的 JSON 格式:

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.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 和时间戳值,以更改计划的访问条件的持续时间。更新条件的以下突出显示部分(将值替换为您自己的)。 如果使用的不是 263.0.0 或更高版本的 gcloud 工具,请确保将 version 值更新为 3。如果使用的是较新版本的 gcloud 工具,系统会自动为您设置最大政策值:

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.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]

此时会应用更新后的条件政策,example@gmail.com 的角色绑定将在新时间过期。

REST API

调用 projects.getIamPolicy() 可获取项目的当前 Cloud IAM 政策。

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT-ID]:getIamPolicy

请求正文设置如下:

{
      "options": {
        "requestedPolicyVersion": 3
      }
    }

响应正文将包含项目的 Cloud IAM 政策:

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.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
    }

在此示例中,我们将更新时间戳值以更改计划的访问条件的持续时间。更新条件表达式的以下突出显示部分(将时间戳替换为您自己的):

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.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
    }

调用 projects.setIamPolicy() 可为项目设置更新后的条件 Cloud IAM 政策,包括请求正文中的已更新政策:

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT-ID]:setIamPolicy

响应将包含更新后的政策。

移除条件角色绑定

当您移除 Cloud IAM 政策中条件角色绑定后,资源的访问权限将仅限于该角色绑定。本部分介绍如何使用 Cloud Console、gcloud 命令行工具和 REST API 移除政策中的基于时间的条件

要从政策中的角色绑定中移除条件,请执行以下操作:

控制台

  1. 在 Cloud Console 中打开 IAM 页面。

    打开 IAM 页面

  2. 点击选择项目,然后选择一个项目并点击打开
  3. 从成员列表中找到所需成员,然后点击按钮。
  4. 修改权限面板中,找到所需的角色绑定。 然后在条件下,点击现有条件的名称。
  5. 修改条件面板中,点击按钮以移除条件。系统会提示您确认是否移除条件。
  6. 修改条件面板关闭后,从修改权限面板再次点击保存,以更新 Cloud IAM 政策。

gcloud 命令

Cloud IAM 政策是使用读取-修改-写入模式设置的。

执行 gcloud projects get-iam-policy 命令以获取项目的当前 Cloud IAM 政策。在以下示例中,政策的 JSON 版本将下载到磁盘上的路径中。

命令:

gcloud projects get-iam-policy [PROJECT-ID] --format json > [FILE-PATH]

下载 Cloud IAM 政策的 JSON 格式:

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.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:example@gmail.com"
          ],
          "role": "roles/bigquery.dataViewer",
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }

请注意,尽管无条件角色绑定仅需要政策版本 1,但 version 仍会设为 3。我们建议您在为条件角色绑定和无条件角色绑定设置政策时,始终使用最高的政策版本号。有关详情,请参阅版本要求。如果使用的是 263.0.0 或更高版本的 gcloud 工具,则会为您更新最新的政策版本。

接下来,通过执行 gcloud projects set-iam-policy 命令设置更新后的政策:

gcloud projects set-iam-policy [PROJECT-ID] [FILE-PATH]

此时,更新后的政策已应用,移除了 example@gmail.com 的条件角色绑定。角色绑定不会再过期。

REST API

调用 projects.getIamPolicy() 可获取项目的当前 Cloud IAM 政策。

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT-ID]:getIamPolicy

请求正文设置如下:

{
      "options": {
        "requestedPolicyVersion": 3
      }
    }

响应正文将包含项目的 Cloud IAM 政策:

{
      "bindings": [
        {
          "members": [
            "user:example@gmail.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:example@gmail.com"
          ],
          "role": "roles/bigquery.dataViewer",
        }
      ],
      "etag": "BwWKmjvelug=",
      "version": 3
    }

请注意,尽管无条件角色绑定仅需要政策版本 1,但 version 仍会设为 3。我们建议您在为条件角色绑定和无条件角色绑定设置政策时,始终使用最高的政策版本号。有关详情,请参阅版本要求

调用 projects.setIamPolicy(),为项目设置更新后的 Cloud IAM 政策,包括请求正文中的已更新政策:

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT-ID]:setIamPolicy

响应将是更新后的政策,该政策不再具有条件绑定。