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 Service Agent 需要其他角色。例如,如果您使用 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 权限。

  • 用于连接到集群的 IAM 权限(如果客户端使用 SASL)。

  • 用于集群内数据访问权限和来自开源 Apache Kafka 客户端的操作的 Kafka ACL,无论身份验证方法如何。

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

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

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

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

资源级访问权限控制

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

以下示例展示了一个 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 或其关联公司在美国和/或其他国家/地区的注册商标。