管理服务帐号模拟

本页面介绍了如何使主帐户和资源能够模拟或充当 Identity and Access Management (IAM) 服务帐号。其中还介绍了如何查看哪些主帐号能够模拟给定 IAM 服务帐号。

准备工作

确保您了解服务帐号在 IAM 中的工作原理

允许主帐号模拟服务帐号

使主帐号能够模拟服务帐号的几个预定义角色如下:

  • Service Account User (roles/iam.serviceAccountUser):通过服务帐号,允许主帐号间接访问所有资源。例如,如果某位主帐号在一个服务帐号中具有 Service Account User 角色,而该服务帐号在项目中具有 Cloud SQL Admin 角色 (roles/cloudsql.admin),则该主帐号可以模拟服务帐号来创建 Cloud SQL 实例。

    通过此角色,主帐号还可以将服务帐号附加到资源,如本页中所述。

  • Service Account Token Creator (roles/iam.serviceAccountTokenCreator):使主帐号能够模拟服务帐号创建 OAuth 2.0 访问令牌、对 JSON Web 令牌 (JWT) 和二进制 blob 进行签名,以便它们能够用于身份验证。如需了解详情,请参阅创建短期有效的服务帐号凭据

  • Workload Identity User (roles/iam.workloadIdentityUser):允许主帐号模拟 GKE 工作负载中的服务帐号。

或者,您也可以授予其他预定义角色或授予自定义角色,只要它们包含与上述角色相同的权限即可。

以下部分介绍了如何对项目、文件夹和组织授予这些角色,以及如何对单个服务帐号授予这些角色。根据您要授予的访问权限大小选择级别:

使主帐号能够模拟多个服务帐号

要使主帐号能够模拟在项目、文件夹或组织中创建的所有服务帐号,请对项目、文件夹或组织授予角色:

控制台

  1. 在 Cloud Console 中,转到 IAM 页面。

    转到 IAM 页面

  2. 在页面顶部的项目选择器中,选择您要授予角色的项目、文件夹或组织。

  3. 点击添加

  4. 输入您的主帐号的电子邮件地址。

  5. 选择一个使主帐号能够模拟服务帐号的角色。请参阅使成员能够模拟服务帐号的角色列表。

  6. 点击保存

gcloud

要向主帐号授予使其能够模拟服务帐号的角色,请修改项目、文件夹或组织的 IAM 政策。

  1. 读取资源的 IAM 政策:

    gcloud resource get-iam-policy resource-id \
        --format=json > policy.json
    

    替换以下值:

    • resource:您要设置政策的资源的类型。此值应为 projectsresource-manager foldersorganizations 之一。
    • resource-id:您要设置政策的资源的 ID。

    该命令会将资源的政策存储在 policy.json 文件中。

    如果相应资源上已经设置了政策,则 policy.json 文件类似于以下内容:

    {
      "bindings": [
        {
          "members": [
            "user:hollis@example.com"
          ],
          "role": "roles/owner"
        }
      ],
      "etag": "BwUqLaVeua8=",
      "version": 1
    }
    

    如果相应资源上未设置政策,则 policy.json 文件仅包含默认 etag

    如果没有现有政策,请在以下步骤中使用 JSON 手动创建政策作为模板。

  2. 修改政策以向您的主帐号授予适当角色。要授予角色,请执行以下操作之一:

    • 如果角色不存在绑定,请向 bindings 数组添加一个对象,以指明您要授予的角色以及要将角色授予的主帐号。
    • 如果角色已存在绑定,请将新主帐号添加到现有主帐号列表中。如果您的政策包含条件角色绑定,您还应在添加主帐号之前确保绑定具有适当的条件。

    如果 bindings 数组不存在,您可以创建一个。

    示例

    要向 robin@example.com 授予 Service Account User 角色 (roles/iam.serviceAccountUser),请更改上一步中显示的示例,如下所示:

    {
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/owner",
          "members": [
            "user:hollis@example.com"
          ]
        }
      ],
      "etag": "BwUqLaVeua8=",
      "version": 1
    }
    
  3. 写入更新后的政策:

    gcloud resource set-iam-policy resource-id \
        policy-file
    

    替换以下值:

    • resource:您要设置政策的资源的类型。此值应为 projectsresource-manager foldersorganizations 之一。
    • resource-id:您要设置政策的资源的 ID。
    • policy-file:包含更新后政策的文件的路径。

    该命令会输出更新后的政策,其中包含更新后的 etag 值。

REST

要使用 Resource Manager REST API 授予角色,您需要读取项目、文件夹或组织的当前 IAM 政策;修改该政策以授予所需角色;然后写入更新后的政策。

读取资源的 IAM 政策。

Resource Manager API 的 getIamPolicy 方法可获取项目、文件夹或组织的 IAM 政策。

在使用任何请求数据之前,请先进行以下替换:

  • API_VERSION:要使用的 API 版本。对于项目和组织,请使用 v1。对于文件夹,请使用 v2
  • RESOURCE_TYPE:您要管理其政策的资源类型。使用值 projectsfoldersorganizations
  • RESOURCE_ID:您的 Google Cloud 项目、组织或文件夹 ID。 项目 ID 是字母数字字符串,例如 my-project。文件夹和组织 ID 是数字,例如 123456789012
  • POLICY_VERSION:要返回的政策版本。请求应指定最新的政策版本,即政策版本 3。如需了解详情,请参阅在获取政策时指定政策版本

HTTP 方法和网址:

POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

请求 JSON 正文:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

如需发送您的请求,请展开以下选项之一:

响应内容包含资源的 IAM 政策。例如:

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

如果没有现有政策,则响应仅包含默认的 etag。如果收到此响应,请添加一个 version 字段(设置为 3)和一个 bindings 字段(设置为一个空数组)。

修改政策以向您的主帐号授予适当角色。

要授予角色,请执行以下操作之一:

  • 如果角色不存在绑定,请向 bindings 数组添加一个对象,以指明您要授予的角色以及要将角色授予的主帐号。
  • 如果角色已存在绑定,请将新主帐号添加到现有主帐号列表中。

示例

要向 robin@example.com 授予 Service Account User 角色 (roles/iam.serviceAccountUser),请更改上一步中显示的示例,如下所示:

{
  "version": 1,
  "etag": "BwUqLaVeua8=",
  "bindings": [
    {
      "role": "roles/iam.serviceAccountUser",
      "members": [
        "user:robin@example.com"
      ]
    },
    {
      "role": "roles/owner",
      "members": [
        "user:owner@example.com"
      ]
    }
  ]
}

写入更新后的政策。

Resource Manager API 的 setIamPolicy 方法会将请求中的政策设置为项目、文件夹或组织的新 IAM 政策。

在使用任何请求数据之前,请先进行以下替换:

  • API_VERSION:要使用的 API 版本。对于项目和组织,请使用 v1。对于文件夹,请使用 v2
  • RESOURCE_TYPE:您要管理其政策的资源类型。使用值 projectsfoldersorganizations
  • RESOURCE_ID:您的 Google Cloud 项目、组织或文件夹 ID。 项目 ID 是字母数字字符串,例如 my-project。文件夹和组织 ID 是数字,例如 123456789012
  • POLICY:您要设置的政策的 JSON 格式。如需详细了解政策的格式,请参阅政策参考文档

    例如,要设置上一步中显示的政策,请将 POLICY 替换为以下内容:

    {
      "version": 1,
      "etag": "BwUqLaVeua8=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/owner",
          "members": [
            "user:owner@example.com"
          ]
        }
      ]
    }
    

HTTP 方法和网址:

POST https://iam.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy

请求 JSON 正文:

{
  "policy": POLICY
}

如需发送您的请求,请展开以下选项之一:

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

使主帐号能够模拟单个服务帐号

要使主帐号能够模拟单个服务帐号,请对服务帐号授予角色。

控制台

  1. 在 Cloud Console 中,转到服务帐号页面。

    转到“服务帐号”页面

  2. 选择一个项目。

  3. 点击您要允许主帐号模拟的服务帐号的电子邮件地址。

  4. 点击权限标签页。

  5. 有权访问此服务帐号的主帐号下,点击 授予访问权限

  6. 输入您的主帐号的电子邮件地址。

  7. 选择一个使主帐号能够模拟服务帐号的角色。请参阅使成员能够模拟服务帐号的角色列表。

  8. 点击保存,将角色应用到主帐号。

要对多个服务帐号授予角色,请为每个服务帐号重复上述步骤。

gcloud

要向主帐号授予使其能够模拟服务帐号的角色,请修改您的服务帐号的 IAM 政策。

  1. 使用 service-accounts get-iam-policy 命令读取当前政策:

    gcloud iam service-accounts get-iam-policy sa-id \
        --format=json > policy.json
    

    替换以下值:

    • sa-id:您的服务帐号的 ID。此 ID 可以是服务帐号的电子邮件地址(格式为 sa-name@project-id.iam.gserviceaccount.com),也可以是服务帐号的唯一数字 ID。

    该命令会将服务帐号的政策存储在 policy.json 文件中。

    如果服务帐号上已经设置了政策,则 policy.json 文件类似于以下内容:

    {
      "bindings": [
        {
          "members": [
            "user:hollis@example.com"
          ],
          "role": "roles/iam.serviceAccountAdmin"
        }
      ],
      "etag": "BwUqLaVeua8=",
      "version": 1
    }
    

    如果服务帐号上未设置政策,则 policy.json 文件仅包含默认 etag

    如果没有现有政策,请在以下步骤中使用 JSON 手动创建政策作为模板。

  2. 在文本编辑器中,修改 policy.json 文件中的绑定数组,以向主帐号授予适当的角色。要授予角色,请执行以下操作之一:

    • 如果角色不存在绑定,请向 bindings 数组添加一个新对象,以定义您要授予的角色以及要将角色授予的主帐号。
    • 如果角色已存在绑定,请将新主帐号添加到现有主帐号列表中。如果您的政策包含条件角色绑定,您还应在添加主帐号之前确保绑定具有适当的条件。

    如果 bindings 数组不存在,您可以创建一个。

    示例

    要向 robin@example.com 授予 Service Account User 角色 (roles/iam.serviceAccountUser),请更改上一步中显示的示例,如下所示:

    {
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountAdmin",
          "members": [
            "user:hollis@example.com"
          ]
        }
      ],
      "etag": "BwUqLaVeua8=",
      "version": 1
    }
    
  3. 使用 service-accounts set-iam-policy 命令写入更新后的政策:

    gcloud iam service-accounts set-iam-policy sa-id \
        policy-file
    

    替换以下值:

    • sa-id:您的服务帐号的 ID。此 ID 可以是服务帐号的电子邮件地址(格式为 sa-name@project-id.iam.gserviceaccount.com),也可以是服务帐号的唯一数字 ID。
    • policy-file:包含更新后政策的文件的路径。

    该命令会输出更新后的政策,其中包含更新后的 etag 值。

REST

要使用 IAM REST API 授予角色,您需要读取服务帐号的当前 IAM 政策,修改该政策以授予所需的角色,然后写入更新后的政策。

读取服务帐号的 IAM 政策。

serviceAccounts.getIamPolicy 方法可获取服务帐号的 IAM 政策。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目 ID。 项目 ID 是字母数字字符串,例如 my-project
  • SA_ID:您的服务帐号的 ID。此 ID 可以是服务帐号的电子邮件地址(格式为 SA_NAME@PROJECT_ID.iam.gserviceaccount.com)或服务帐号的唯一数字 ID。

  • POLICY_VERSION:要返回的政策版本。请求应指定最新的政策版本,即政策版本 3。如需了解详情,请参阅在获取政策时指定政策版本

HTTP 方法和网址:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:getIamPolicy

请求 JSON 正文:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

如需发送您的请求,请展开以下选项之一:

响应内容包含服务帐号的 IAM 政策。例如:

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

如果没有现有政策,则响应仅包含默认的 etag。如果收到此响应,请添加一个 version 字段(设置为 3)和一个 bindings 字段(设置为一个空数组)。

修改政策以向您的主帐号授予适当角色。

在文本编辑器中,从响应正文修改绑定数组,以向您的主帐号授予适当的角色。要授予角色,请执行以下操作之一:

  • 如果角色不存在绑定,请向 bindings 数组添加一个新对象,以定义您要授予的角色以及要将角色授予的主帐号。
  • 如果角色已存在绑定,请将新主帐号添加到现有主帐号列表中。

示例

要向 robin@example.com 授予 Service Account User 角色 (roles/iam.serviceAccountUser),请更改上一步中显示的示例,如下所示:

{
  "version": 1,
  "etag": "BwUqLaVeua8=",
  "bindings": [
    {
      "role": "roles/iam.serviceAccountUser",
      "members": [
        "user:robin@example.com"
      ]
    },
    {
      "role": "roles/iam.serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    }
  ]
}

写入更新后的政策。

serviceAccounts.setIamPolicy 方法为服务帐号设置更新后的 IAM 政策。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目 ID。 项目 ID 是字母数字字符串,例如 my-project
  • SA_ID:您的服务帐号的 ID。此 ID 可以是服务帐号的电子邮件地址(格式为 SA_NAME@PROJECT_ID.iam.gserviceaccount.com)或服务帐号的唯一数字 ID。

  • POLICY:您要设置的政策的 JSON 格式。如需详细了解政策的格式,请参阅政策参考文档

    例如,要设置上一步中显示的政策,请将 policy 替换为以下内容:

    {
      "version": 1,
      "etag": "BwUqLaVeua8=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

HTTP 方法和网址:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:setIamPolicy

请求 JSON 正文:

{
  "policy": POLICY
}

如需发送您的请求,请展开以下选项之一:

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

列出可访问服务帐号的主帐号

使用 Cloud Console 查看有权访问服务帐号的所有主帐号,无论他们有权访问是因为拥有对服务帐号授予的角色,还是拥有对项目、文件夹或组织授予的角色。

  1. 在 Cloud Console 中,转到服务帐号页面。

    转到“服务帐号”

  2. 选择一个项目。

  3. 点击您要允许主帐号模拟的服务帐号的电子邮件地址。

  4. 点击权限标签页。 有权访问此服务帐号的主帐号部分列出了可以访问该服务帐号的主帐号。

将服务帐号附加到资源

对于某些 Google Cloud 资源,您可以指定用户管理的服务帐号,供资源用作其默认身份。此过程称为“将服务帐号附加到资源”或“将服务帐号与资源关联”

当资源需要访问其他 Google Cloud 服务和资源时,它会模拟附加到自身的服务帐号。例如,如果您将服务帐号附加到 Compute Engine 实例,则该实例上的应用使用客户端库来调用 Google Cloud API,这些应用会自动模拟附加的服务帐号。

在大多数情况下,您必须在创建资源时将服务帐号附加到该资源。创建资源后,您无法更改将哪个服务帐号附加到该资源。Compute Engine 实例是此规则的一个例外情况;您可以根据需要更改附加到实例的服务帐号

在将服务帐号附加到资源之前,您必须先配置服务帐号。此过程取决于服务帐号和资源是位于同一项目还是不同项目中。配置服务帐号后,您可以创建资源并将服务帐号附加到该资源。

配置同一项目中的资源

在将服务帐号附加到同一项目中的其他资源之前,请向服务帐号授予角色,以便其能够访问相应资源,就像您向其他任何主帐号授予角色一样。

配置其他项目中的资源

在某些情况下,您可能需要将服务帐号附加到位于其他项目中的资源。例如,如果您在单个项目中创建所有服务帐号,则可能需要将其中一个服务帐号附加到其他项目中的新资源。

在将服务帐号连接到其他项目中的资源之前,请先执行以下操作:

  1. 在服务帐号所在的项目中,按照本页面中的步骤跨项目启用服务帐号模拟
  2. 确定要在其中创建资源的项目。
  3. 确定您将附加到的资源的服务帐号类型,以及该类型资源的服务。

    例如,如果您要创建 Pub/Sub 订阅,则 Pub/Sub 是拥有该资源的服务。

  4. 找到服务的服务代理的电子邮件地址。

    不同的服务使用不同的服务代理。如需了解详情,请参阅服务代理

  5. 向服务代理授予 Service Account Token Creator 角色 (roles/iam.serviceAccountTokenCreator):

    控制台

    1. 在 Cloud Console 中,转到服务帐号页面。

      转到“服务帐号”

    2. 选择将您要附加到资源的服务帐号所属的项目。

    3. 找到要附加到资源的服务帐号,然后选中对应的复选框。

    4. 权限窗格中,点击添加主帐号

    5. 新主帐号字段中,输入服务代理的电子邮件地址。

    6. 选择角色下拉列表中,输入 Service Account Token Creator,然后点击该角色。

    7. 点击保存以保存更改。

    8. 可选:如果您需要向其他服务代理授予该角色,请重复执行上述步骤。

    gcloud

    使用 gcloud iam service-accounts add-iam-policy-binding 命令:

    gcloud iam service-accounts add-iam-policy-binding \
        user-sa-name@project-id.iam.gserviceaccount.com \
        --member=serviceAccount:service-agent-email \
        --role=roles/iam.serviceAccountTokenCreator
    

    替换以下值:

    • user-sa-name:您要附加到资源的用户管理服务帐号的名称。
    • project-id:用户管理的服务帐号所在的项目 ID。
    • service-agent-email:服务代理的电子邮件地址。

    该命令会输出用户管理的服务帐号的更新后的 IAM 政策。

    可选:如果您需要向其他服务代理授予该角色,请再次运行该命令。

    REST

    要授予此角色,请使用 read-modify-write 模式更新用户管理的服务帐号的 IAM 政策。

    首先,读取用户管理的服务帐号的 IAM 政策

    projects.serviceAccounts.getIamPolicy 方法返回服务帐号的 IAM 政策。

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:您的 Google Cloud 项目 ID。 项目 ID 是字母数字字符串,例如 my-project
    • USER_SA_NAME:您绑定到资源的用户管理服务帐号的名称。

    HTTP 方法和网址:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/USER_SA_NAME@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy

    请求 JSON 正文:

    {
      "requestedPolicyVersion": 3
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    {
      "version": 1,
      "etag": "BwWl3KCTUMY=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

    接下来,请修改政策以向服务代理授予 Service Account Token Creator 角色。将 SERVICE_AGENT_EMAIL 替换为服务代理的电子邮件地址:

    {
      "version": 1,
      "etag": "BwWl3KCTUMY=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SERVICE_AGENT_EMAIL"
          ]
        },
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

    最后,写入更新后的政策

    projects.serviceAccounts.setIamPolicy 方法会更新您的服务帐号的 IAM 政策。

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:您的 Google Cloud 项目 ID。 项目 ID 是字母数字字符串,例如 my-project
    • USER_SA_NAME:您绑定到资源的用户管理服务帐号的名称。
    • SERVICE_AGENT_EMAIL:为用户管理的服务帐号创建访问令牌的服务代理的电子邮件地址。

    HTTP 方法和网址:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/USER_SA_NAME@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy

    请求 JSON 正文:

    {
      "policy": {
        "version": 1,
        "etag": "BwWl3KCTUMY=",
        "bindings": [
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:SERVICE_AGENT_EMAIL"
            ]
          },
          {
            "role": "roles/iam.serviceAccountUser",
            "members": [
              "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
            ]
          }
        ]
      }
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    {
      "version": 1,
      "etag": "BwWo331TkHE=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SERVICE_AGENT_EMAIL"
          ]
        },
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

将服务帐号附加到新资源

配置用户管理的服务帐号后,您可以创建新资源并将服务帐号附加到该资源。请务必在相应的项目中创建新资源。

请参阅您要创建的资源类型对应的说明:

创建资源时附加服务帐号
AI Platform Prediction 模型版本
AI Platform Training 作业
Cloud Composer 环境
Cloud Functions Cloud Functions 函数
Cloud Life Sciences 流水线
Cloud Run 服务
Cloud Scheduler 作业
Cloud Source Repositories
Compute Engine
Dataflow 作业
Datalab 实例
Dataproc 集群
Google Kubernetes Engine
笔记本 笔记本实例
Pub/Sub 订阅
Vertex AI

创建资源并将服务帐号附加到该资源之后,您可以向该服务帐号授予角色,以便它可以访问适当的资源。该过程与向任何其他主帐号授予角色的过程相同。

如需了解如何授予角色,请参阅授予、更改和撤消对资源的访问权限

解读审核日志

Cloud Audit Logs 可帮助您回答针对您的 Google Cloud 资源“哪些用户何时在何处执行过哪些操作?”问题。

当您使用短期有效凭据来模拟服务帐号时,大多数 Google Cloud 服务都会创建包含以下身份的日志条目:

  • 短期有效凭据所要模拟的服务帐号
  • 创建短期有效凭据的身份

您可以使用这些日志条目来识别创建短期有效凭据的主帐号以及该主帐号模拟的服务帐号。

如需查看显示服务帐号模拟的审核日志条目示例,请参阅模拟服务帐号来访问 Google Cloud

跨项目启用服务帐号模拟

默认情况下,您无法将在一个项目中创建服务帐号附加到其他项目中的资源上。如果您希望将所有服务帐号保留在一个项目中,则必须更新该项目的组织政策

在服务帐号所在的项目的组织政策中,检查以下布尔值限制

  • 确保不会为项目强制执行 iam.disableCrossProjectServiceAccountUsage 布尔值限制。

    此布尔值限制条件用于控制是否可以将服务帐号附加到另一个项目中的资源。默认情况下,强制执行限制条件。

    如果不强制执行此限制条件,IAM 会添加一个项目安全锁,以防止删除项目。此安全锁的来源为 iam.googleapis.com/cross-project-service-accounts。我们强烈建议您不要删除此安全锁。

  • 推荐:确保对项目强制执行 iam.restrictCrossProjectServiceAccountLienRemoval 布尔值限制条件。

    此布尔值限制条件可确保主帐号只有在组织级层具有 resourcemanager.projects.updateLiens 权限时才可以移除项目安全锁。如果未强制执行此限制条件,则主帐号在项目级层拥有此权限时可以移除项目安全锁。

要了解如何在组织政策中查看或更改布尔值限制条件,请参阅设置布尔值限制条件

跨项目停用服务帐号模拟

如果您之前跨项目启用服务帐号模拟,我们强烈建议您不要停用此功能,尤其是在生产环境中。

具体来说,在服务帐号所在的项目中,您不应做出以下任何更改:

  • 请勿更新项目的组织政策以强制执行 iam.disableCrossProjectServiceAccountUsage 布尔值限制条件。
  • 不要将项目的组织政策更新为不强制执行 iam.restrictCrossProjectServiceAccountLienRemoval 布尔值限制条件。
  • 请勿移除带有源 iam.googleapis.com/cross-project-service-accounts项目安全锁,以防删除项目。
  • 请勿删除项目。

如果您愿意接受停用此功能的风险,则可以通过停用您在各种项目中使用的服务帐号来降低风险,然后监控 Google Cloud 环境从而发现问题。 如果发现任何问题,您可以重新启用服务帐号。如果未发现任何问题,则可能是因为没有任何 Google Cloud 资源依赖于其他项目中的服务帐号。

后续步骤