角色与权限

本页面介绍了 Identity and Access Management (IAM) 角色和权限以及它们如何与 Cloud SQL 实例配合使用。

简介

本页面重点介绍了与 Cloud SQL 相关的 IAM 功能。如需了解 IAM 及其功能的详细说明,请参阅 Identity and Access Management,尤其应参阅管理 IAM 政策部分。 借助 IAM,您可以控制谁有权访问 Google Cloud 项目中的资源。您应用于资源的一组访问规则称为 IAM 政策。应用于项目的 IAM 政策定义了用户可以对项目中的所有资源执行的操作。

成员指的是 IAM 适用的“谁”。成员可以是个人用户、群组、网域,甚至是全体公众。成员会被分配角色,这些角色使成员能够在 Cloud SQL 以及整个 Google Cloud 中执行操作。每个角色都是一个或多个权限的集合。权限是 IAM 的基本单位:每项权限让您可以执行一种特定的操作。如需查看 Cloud SQL 中所有角色和权限的完整列表,请参阅 Cloud SQL 中的 IAM 角色Cloud SQL 中的 IAM 权限

当您使用账号连接到 Cloud SQL 实例时,账号必须具有 Cloud SQL > Client 角色 (roles/cloudsql.client),该角色拥有连接所需的权限

您可以在控制台的 IAM 和管理 > IAM 页面中向账号添加角色,并在 IAM 和管理 > 角色页面中查看哪些权限属于哪些角色。

Cloud SQL 使用服务账号在 Cloud SQL 和其他 Google Cloud 产品之间进行身份验证。服务账号以 JSON 格式提供 credentials,您可以从控制台进行下载,并在各种场景中使用以进行身份验证。

例如:从在 docker 容器中运行的应用进行连接时。

Cloud SQL Auth 代理所需的 Cloud SQL 角色和权限

如果您要使用 Cloud SQL Auth 代理从 Compute Engine 实例连接到 Cloud SQL 实例,则可以使用与该 Compute Engine 实例关联的默认 Compute Engine 服务账号。

与连接到 Cloud SQL 实例的所有账号一样,此服务账号必须具有 Cloud SQL > Client 角色。

无服务器方案所需的 Cloud SQL 角色和权限

Google Cloud 无服务器方案包括 App EngineCloud Run 函数Cloud Run

使用服务账号可授权通过这些方案进行访问。服务账号可授予对特定项目中所有 Cloud SQL 的访问权限。当您创建应用或 Cloud Run 函数时,此服务会为您创建此账号。您可以通过相应的后缀在 IAM 和管理 > IAM 页面上找到该账号:

无服务器方案 服务账号后缀
App Engine @gae-api-prod.google.com.iam.gserviceaccount.com
Cloud Run 函数 @appspot.gserviceaccount.com
Cloud Run compute@developer.gserviceaccount.com
与连接到 Cloud SQL 实例的所有账号一样,此服务账号必须具有 Cloud SQL > Client 角色。

Cloud Storage 所需的 Cloud SQL 角色和权限

Cloud SQL 中的导入和导出功能可搭配使用。导出内容可以写入 Cloud Storage,也可以从 Cloud Storage 中读取导入的内容。因此,用于执行这些操作的服务账号需要同时具备对 Cloud Storage 的读写权限:

  • 如需向 Cloud Storage 导入数据以及从 Cloud Storage 导出数据,Cloud SQL 实例的服务账号必须在项目中设置 storage.objectAdmin IAM 角色。您可以在 Google Cloud 控制台的实例概览页面上找到实例的服务账号名称。
  • 您可以使用 gcloud storage buckets add-iam-policy-binding 命令向服务账号授予该存储桶的此 IAM 角色
  • 如需有关设置 IAM 角色和权限的帮助,请参阅使用 IAM 权限
  • 如需了解详情,请参阅适用于 Cloud Storage 的 IAM

IAM 群组身份验证所需的 Cloud SQL 角色和权限

使用 IAM 群组身份验证时,您可以创建群组。然后,您可以使用群组来管理对 Cloud SQL 实例的访问和数据库权限。

下表列出了管理 IAM 群组身份验证所需的角色。

操作 角色
创建、查看和管理群组。

roles/resourcemanager.organizationViewer

查看 IAM 群组成员资格更新日志。

roles/logging.viewer

在项目级层授予、查看和设置 IAM 权限。

roles/resourcemanager.projectIamAdmin

在文件夹级层授予、查看和设置 IAM 权限。

roles/resourcemanager.folderIamAdmin

管理员可以为每个群组授予 Cloud SQL 角色或授予个别 Cloud SQL 权限。每个群组的成员都会继承角色和权限。

Dataplex 集成的 Cloud SQL 角色和权限

如需提供对 Dataplex 上 Cloud SQL 元数据的访问权限,您可以向用户授予 roles/cloudsql.schemaViewer 角色或向自定义角色添加 cloudsql.schemas.view 权限。

如需了解详情,请参阅使用 Dataplex Catalog 管理 Cloud SQL 资源

访问专用 Cloud SQL 实例的权限

当其他 Google Cloud 服务(例如 BigQuery)需要与您的 Cloud SQL 实例通信以访问数据并通过专用连接对此数据进行查询时,该服务会使用内部路径,而不是 Virtual Private Cloud (VPC) 内的专用 IP 地址。流量无法通过任何 VPC 级配置、防火墙规则、路由政策或对等互连切断进行控制或限制。

而是 Cloud SQL 在您的实例上提供配置标志,以控制是否为访问数据库的其他 Google Cloud 服务开启或关闭此内部路径。

控制和撤消权限

当其他 Google Cloud 服务(例如 BigQuery)尝试访问您的专用 Cloud SQL 实例时,它必须提供具有 cloudsql.instances.connect IAM 权限的合法身份。

通常,服务可以通过两种方式来实现此目的:

  1. 转发用户的凭据。服务可以将用户的 IAM 身份转发到 Cloud SQL,以评估访问实例的权限。在这种情况下,用户必须具有足够的 IAM 权限,才能使 Cloud SQL 成功连接。
  2. 使用服务账号。BigQuery 等服务可以使用预配置的服务账号连接到 Cloud SQL 实例。在这种情况下,服务账号必须具有足够的 IAM 权限。

    例如,对于 BigQuery 与 Cloud SQL 之间的联合连接,在激活 BigQuery Connection API 后,系统会创建一个名为 service-{PROJECT_NUMBER}@gcp-sa-bigqueryconnection.iam.gserviceaccount.com 的服务账号。此服务账号具有两项 Cloud SQL 权限:cloudsql.instances.connectcloudsql.instances.get。BigQuery 会使用这些权限通过内部路径访问专用 Cloud SQL 实例。

如需控制谁可以使用此内部路径的权限,您可以授予和撤消 Google Cloud 服务(例如 BigQuery)用于连接到 Cloud SQL 实例的用户 IAM 身份的 IAM 权限。如需详细了解如何在 BigQuery 中授予和撤消权限,请参阅设置对 Cloud SQL 的访问权限

其他场景所需的 Cloud SQL 角色和权限

Cloud SQL 可与其他 Google Cloud 产品和工具进行交互。这些交互还需要特定角色和权限,具体角色和权限因场景而异。Cloud SQL 文档为以下情况提供了详细的要求信息:

将 IAM 用于项目

以下各部分介绍了如何在项目中完成基本的 IAM 任务。

您必须具备 resourcemanager.projects.getIamPolicyresourcemanager.projects.setIamPolicy IAM 权限才能完成以下任务。

将成员添加到项目级政策

如需查看与 Cloud SQL 关联的角色列表,请参阅 IAM 角色

控制台

  1. 转到 Google Cloud 控制台中的 IAM 和管理页面
  2. 在顶栏的项目下拉菜单中,选择要添加成员的项目。
  3. 点击添加。系统会显示向项目添加成员,角色对话框。
  4. 新成员字段中,指定您要授予访问权限的实体的名称。
  5. 选择角色下拉菜单中,向成员授予适当的角色。 您可以在项目Cloud SQL 子菜单中找到影响 Cloud SQL 资源的角色。
  6. 点击保存

gcloud

如需添加项目级 IAM 政策,请使用 gcloud beta projects add-iam-policy-binding

查看项目的 IAM 政策

控制台

  1. 转到 Google Cloud 控制台中的 IAM 和管理页面
  2. 在顶栏的项目下拉菜单中,选择要查看的政策所属的项目。
  3. 查看项目权限的方法有两种:
    • 成员查看:查看与各个成员相关联的角色列,了解各成员具有哪些角色。
    • 角色查看:使用与各个角色相关联的下拉列表,查看哪些成员具有此角色。

gcloud

如需查看项目的 IAM 政策,请使用 gcloud beta projects get-iam-policy

从项目级政策中移除成员

控制台

  1. 转到 Google Cloud 控制台中的 IAM 和管理页面
  2. 在顶栏的项目下拉菜单中,选择要移除成员的项目。
  3. 确保您正在按成员查看权限,并选择要移除的成员。
  4. 点击移除
  5. 在出现的叠加窗口中,点击确认

gcloud

如需移除项目级 IAM 政策,请使用 gcloud beta projects remove-iam-policy-binding

最佳做法

与任何其他管理设置一样,您必须对 IAM 进行主动管理以使之生效。在使其他用户可以访问资源之前,请确保您知道您希望这些人中的每个人扮演什么角色。一段时间后,如果项目管理、使用模式和组织所有权发生变化,您可能需要修改项目的 IAM 设置(特别是当您在大型组织中或面对大规模用户的情况下管理 Cloud SQL 时)。在评估和规划访问权限控制设置时,请谨记以下最佳做法:

  • 授予访问权限时,请遵循最小权限原则。 最小权限原则是关于授予对资源的访问权限的一项安全准则。如果根据最小权限原则授予访问权限,则仅将为用户授予完成分配到的任务所需的访问权限。

  • 避免向陌生人授予具有 setIamPolicy 权限的角色。 授予 setIamPolicy 权限后,获得授权的用户可以更改权限和控制数据。只有在您希望将对象和存储桶的管理控制权委托给他人时,您才应使用具有 setIamPolicy 权限的角色。

  • 请确保将您资源的管理控制权委托给他人。如果具有管理员权限的某个人离开了群组,则您应确保您的资源仍可由其他团队成员管理。实现此目的的两种常用方法如下:

    • 将项目的 Cloud SQL Admin 角色分配给群组(而不是个人)。
    • 将项目的 Cloud SQL Admin 角色分配给至少两个人。

后续步骤