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

本文档介绍了 Managed Service for 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 主题,请向该主体授予受管理的 Kafka 主题编辑器角色。

使用 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 权限才能连接到集群。

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

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

  • 拒绝主体拥有 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 Conditions。

以下示例展示了一个 IAM 条件,该条件仅在资源类型为 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 或其关联公司在美国和/或其他国家/地区的注册商标。