使用 IAM 进行访问权限控制

本文档介绍了如何在 Google Cloud Managed Service for Apache Kafka 中使用 Google Cloud Identity and Access Management (IAM) 进行访问权限控制。

IAM 在 Google Cloud 资源级层控制访问权限:

  • IAM 控制措施可确定哪些人可以使用 Google Cloud API 和工具管理您的 Managed Service for Apache Kafka 资源(例如集群、主题或 ACL)。此类工具的示例包括Google Cloud 控制台、gcloud CLI 或客户端库。

  • 这些控制变量还决定了在使用标准 Apache Kafka 客户端时,哪些人有权首次连接到您的 Managed Service for Apache Kafka 集群。

如需详细了解 IAM,请参阅 IAM 文档

IAM 概览

借助 IAM,您可以授予对特定Google Cloud 资源的精细访问权限,并防止对其他资源进行不必要的访问。借助 IAM,您可以采用最小权限安全原则,只需授予对您资源的必要访问权限。

借助 IAM,您可以控制(委托人)对哪些资源具有什么访问权限(角色)。

主账号

主账号可以是 Google 账号(针对最终用户)、服务账号(针对应用和虚拟机)、Google 群组或可以访问资源的 Google Workspace 或 Cloud Identity 网域。

如需了解详情,请参阅 IAM 概览:主账号

一种特殊的主账号 - Managed Kafka Service Agent

Google Cloud Managed Service for Apache Kafka 使用 Google Cloud 服务账号(称为服务代理)来访问您的资源。如果您已启用该 API,则服务代理已创建。该服务代理采用如下电子邮件地址形式:service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com

Managed Service for Apache Kafka 服务代理需要项目中的 Managed Kafka Service Agent (roles/managedkafka.serviceAgent) 角色才能管理 Managed Service for Apache Kafka 资源。启用 API 时,系统会自动授予此角色。如果您撤消此角色,Managed Service for Apache Kafka 将无法创建、更新或删除集群。

资源

在 Managed Service for Apache Kafka 中,您可以授予访问权限的资源包括项目、集群、主题和消费者群组。

某些 API 方法需要多个资源的权限。例如,创建 Connect 集群任务需要对 Connect 集群资源的父级位置拥有 managedkafka.connectClusters.create 权限,并对集群资源拥有 managedkafka.clusters.attachConnectCluster 权限。

角色

角色是一组权限的集合。权限决定了可以对资源执行的操作。如果您向某个主账号授予了某个角色,此主账号便拥有了该角色包含的所有权限。

您可以向主账号授予一个或多个角色。

与其他 Google Cloud 产品类似,Managed Service for Apache Kafka 支持以下三种类型的角色:

  • 基本角色:在引入 IAM 之前就已存在的高度宽松角色。如需详细了解基本角色,请参阅基本角色

  • 预定义角色:可提供对特定 Google Cloud资源的精细访问权限。如需详细了解预定义角色,请参阅预定义角色。Managed Service for Apache Kafka 预定义角色将在本部分的后半部分中介绍。

  • 自定义角色:有助于您实施最小权限原则。如需详细了解自定义角色,请参阅自定义角色

例如,Managed Kafka Viewer (roles/managedkafka.viewer) 预定义角色提供对 Managed Service for Apache Kafka 资源的只读访问权限。具有此角色的主账号可以查看集群、主题和消费群组,但无法创建、更新或删除它们。

如需详细了解如何分配角色,请参阅授予、更改和撤消访问权限文档。

访问权限控制的工作原理

使用 Google Cloud API 访问 Managed Service for Apache Kafka 的授权由 IAM 处理。使用 SASL 身份验证的开源 Apache Kafka 客户端的访问权限由 IAM 检查。

  • 当客户端使用 SASL 进行连接时,IAM 会先检查相应的主账号是否具有 managedkafka.clusters.connect 权限。如果此检查失败,则连接会被拒绝。

  • 当客户端使用 mTLS 进行连接时,系统会绕过此初始 IAM 权限检查,并且仅通过 Kafka ACL 处理授权。

为实现全面的安全性,您必须配置以下内容:

  • 用于管理访问权限的 IAM 权限。

  • 如果使用 SASL,则连接访问权限的 IAM 权限。

  • Kafka ACL,用于从开源 Apache Kafka 客户端进行集群内数据访问权限和操作,与身份验证方法无关。

例如,假设您想禁止某个正文修改主题。 您可以通过以下两种方式实现此目的:

  • 完全通过 IAM 进行。拒绝向该正文授予 Managed Kafka Topic Editor (roles/managedkafka.topicEditor) 和 Managed Kafka Client (roles/managedkafka.client) 角色。此配置完全限制通过 Google CloudAPI 进行的主题编辑,并阻止使用 SASL 进行任何 Kafka API 访问。此配置不会阻止使用 mTLS 的连接。

  • 将 Kafka ACL 与 IAM 搭配使用。如果主账号使用 mTLS 或需要 SASL 访问权限才能执行其他操作,则此方法是必需的。使用 Kafka ACL 限制以下操作:

    • 在集群级别创建(用于创建主题)。

    • 在主题级执行 Alter、AlterConfigs、Delete(用于主题修改和删除)。

您可以根据正文是否需要访问 Kafka API 以及所用的身份验证方法来选择合适的方法。

在项目级层设置访问权限控制

如需在项目级层设置访问权限控制,请参阅管理对项目、文件夹和组织的访问权限

设置资源级访问权限控制

某些 Managed Service for Apache Kafka 请求(例如集群创建或更新)属于长时间运行的操作。如需允许主账号执行这些操作,请向其授予对 managedkafka.googleapis.com/Operation 资源的访问权限,以及对特定集群资源的访问权限。

此配置可确保正文既能发起操作,又能监控其进度。

以下示例展示了为名为 "test-topic" 的主题设置的 IAM 条件:

{'expression': 'resource.name.endsWith('test-topic') 'title': 'SampleIAMCondition'}`.

此示例展示了一个 IAM 条件,用于检查资源名称是否以 test-topic 结尾。如果存在,则条件为 true。此特定条件的标题为 SampleIAMCondition,可在 IAM 政策中使用,以限制对仅此特定主题的访问权限。

某些 Managed Service for Apache Kafka 请求(例如集群创建或更新)会返回长时间运行的操作。如需在集群级别授予访问权限,除了每个集群的资源条件之外,还需包含对类型为 managedkafka.googleapis.com/Operation 的所有资源的访问权限。此流程可确保正文能够启动操作并监控其进度。

跨项目访问权限控制

如需授权其他项目中的客户端访问集群,请在集群的项目中向客户端的服务账号授予 Managed Kafka Client (roles/managedkafka.client) 角色。

例如,如果您想允许 project-B 中的 Compute Engine 虚拟机访问 project-A 中的集群,请在 project-A 中向 project-B 中的 Compute Engine 虚拟机的服务账号授予 Managed Kafka Client (roles/managedkafka.client) 角色。

后续步骤

Apache Kafka® 是 Apache Software Foundation 或其关联公司在美国和/或其他国家/地区的注册商标。