Managed Service for Apache Kafka 的访问权限控制

在 Managed Service for Apache Kafka 中,您可以通过结合使用 Identity and Access Management (IAM) 权限和 Kafka 访问权限控制列表 (ACL) 来控制对 Kafka 集群和主题的访问权限:

  • 使用 IAM 授予管理访问权限,以及在使用 SASL 身份验证时授予客户端连接到集群的权限。

  • 使用 Kafka ACL 从开源 Apache Kafka 客户端进行数据访问和操作。

本页面简要介绍了这些访问权限控制选项。

Managed Kafka Service Agent

Managed Service for Apache Kafka 使用服务代理访问 Google Cloud资源。启用 Managed Kafka API 后,系统会创建 Managed Kafka Service Agent。

Managed Kafka Service Agent 是一个标识符为 service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com 的主账号,其中 PROJECT_NUMBER 是您的 Google Cloud 项目编号。

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

对于某些任务,Managed Kafka 服务代理需要额外的角色。例如,如果您使用 Kafka Connect,则可能需要向服务代理授予访问来源和接收器(例如 Pub/Sub 或 BigQuery)的权限。

针对客户端的访问权限控制

通常,您可以通过两种方式对 Managed Service for Apache Kafka 资源执行操作:

  • Managed Kafka API。此选项包括直接调用 REST API,以及使用 Google Cloud CLI、 Google Cloud 控制台或客户端库。

  • 开源 Apache Kafka API。许多开源 Kafka 客户端都使用此 API。

使用 Managed Kafka API 进行访问权限控制

使用 Managed Kafka API 时,授权由 Identity and Access Management (IAM) 执行。如需对资源执行操作,主账号必须拥有该操作所需的 Managed Kafka API 权限。每个任务的文档都列出了该任务所需的 IAM 角色。例如,如需允许主账号创建 Kafka 主题,请向主账号授予 Managed Kafka Topic Editor 角色。

使用 Apache Kafka API 进行访问权限控制

使用 Apache Kafka API 的客户端通过 SASL 或双向 TLS (mTLS) 身份验证进行身份验证。

  • 如果客户端使用 SASL 进行连接,则进行身份验证的主账号需要 managedkafka.clusters.connect IAM 权限。如需授予此权限,您可以向主账号授予 Managed Kafka Client (roles/managedkafka.client) 角色。

  • 如果客户端使用 mTLS 进行连接,则不需要 managedkafka.clusters.connect 权限。而是使用客户端证书进行身份验证。

客户端连接后,服务会使用 Kafka ACL 授权客户端的操作,例如读取或更改资源。

组合访问权限控制

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

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

  • 如果客户端使用 SASL,则需要连接到集群的 IAM 权限。

  • Kafka ACL,用于通过开源 Apache Kafka 客户端进行集群内数据访问和操作,无论采用何种身份验证方法。

例如,假设您想阻止某个主账号修改主题。为此,您需要设置以下访问权限控制:

  • 拒绝向主账号授予 managedkafka.topics.update 权限,以防止主账号使用 Managed Kafka API 更新主题(例如,通过使用 Google Cloud 控制台)。

  • (可选)拒绝主账号拥有 managedkafka.clusters.connect 权限,以防止主账号通过 SASL 身份验证连接到集群。

  • 如果主账号因其他原因需要 SASL 访问权限,或者主账号使用 mTLS 进行连接,请创建 Kafka ACL,以拒绝针对主题的 ALTER、ALTER_CONFIGS 和 DELETE 操作。如需查看具体示例,请参阅拒绝修改所有主题。

资源级访问权限控制

如需将主账号的 IAM 权限限制为项目中的特定 Managed Service for Apache Kafka 资源(例如单个集群或主题),请使用 IAM 条件。

以下示例展示了一个 IAM Condition,该条件仅在资源类型为 managedkafka.googleapis.com/Topic 且资源名称以 "test-topic" 结尾时才允许访问:

{
    "expression": "resource.name.endsWith(\"topic-1\") &&\nresource.type == \"managedkafka.googleapis.com/Topic\"",
    "title": "topic-1",
    "description": "Grant access only to topic-1"
}

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

后续步骤

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