使用 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 资源的只读访问权限。具有此角色的主账号可以查看集群、主题和消费群组,但无法创建、更新或删除它们。

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

如需确定特定任务所需的权限,请参阅 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 或其关联公司在美国和/或其他国家/地区的注册商标。