Control de acceso con la IAM

En este documento, se describe cómo usar Google Cloud Identity and Access Management (IAM) para el control de acceso en Google Cloud Managed Service para Apache Kafka.

IAM controla el acceso a nivel del Google Cloud recurso:

  • Los controles de IAM determinan quién puede administrar tus recursos de Managed Service para Apache Kafka, como clústeres, temas o LCA, con las Google Cloud APIs y las herramientas. Algunos ejemplos de estas herramientas son la consola deGoogle Cloud , gcloud CLI o las bibliotecas cliente.

  • Estos controles también determinan quién tiene permiso para conectarse inicialmente a tu clúster de Managed Service for Apache Kafka cuando se usan clientes estándar de Apache Kafka.

Para obtener más información sobre IAM, consulta la documentación de IAM.

Descripción general de IAM

IAM te permite otorgar acceso detallado a recursos específicos deGoogle Cloud y evita el acceso no deseado a otros recursos. IAM te permite adoptar el principio de seguridad de privilegio mínimo, en el que solo otorgas el acceso necesario a tus recursos.

IAM te permite controlar quién (principales) tiene qué acceso (roles) a qué recursos.

Principal

Un principal puede ser una Cuenta de Google (para usuarios finales), una cuenta de servicio (para apps y máquinas virtuales), un Grupo de Google o un dominio de Google Workspace o Cloud Identity que puede acceder a un recurso.

Para obtener más información, consulta Descripción general de IAM: principales.

Un principal especial: el agente de servicio de Kafka administrado

Google Cloud Managed Service para Apache Kafka usa una Google Cloud cuenta de servicio administrada conocida como agente de servicio para acceder a tus recursos. Si habilitaste la API, el agente de servicio ya se creó. El agente de servicio se identifica por su correo electrónico: service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com.

El agente de servicio de Managed Service para Apache Kafka requiere el rol de Agente de servicio de Kafka administrado (roles/managedkafka.serviceAgent) en el proyecto para administrar los recursos de Managed Service para Apache Kafka. Este rol se otorga automáticamente cuando habilitas la API. Si revocas este rol, Managed Service para Apache Kafka no podrá crear, actualizar ni borrar clústeres.

Recurso

Entre los ejemplos de recursos a los que puedes otorgar acceso en Managed Service para Apache Kafka, se incluyen proyectos, clústeres, temas y grupos de consumidores.

Algunos métodos de API requieren permisos para varios recursos. Por ejemplo, la tarea Create Connect cluster requiere el permiso managedkafka.connectClusters.create en la ubicación principal del recurso del clúster de Connect y el permiso managedkafka.clusters.attachConnectCluster en el recurso del clúster.

Rol

Un rol es un conjunto de permisos. Los permisos determinan qué operaciones están permitidas en un recurso. Cuando otorgas un rol a una principal, le otorgas todos los permisos que el rol contiene.

Puedes otorgar uno o más roles a un principal.

Al igual que otros Google Cloud productos, Managed Service para Apache Kafka admite tres tipos de roles:

  • Roles básicos: Roles muy permisivos que existían antes de la introducción de IAM. Para obtener más información sobre los roles básicos, consulta Roles básicos.

  • Roles predefinidos: Otorgan acceso detallado a recursos Google Cloudespecíficos. Para obtener más información sobre los roles predefinidos, consulta Roles predefinidos. Los roles predefinidos de Managed Service para Apache Kafka se incluyen en una parte posterior de esta sección.

  • Roles personalizados: Te ayudan a aplicar el principio de privilegio mínimo. Para obtener más información sobre los roles personalizados, consulta Roles personalizados.

Por ejemplo, el rol predefinido Visualizador de Kafka administrado (roles/managedkafka.viewer) proporciona acceso de solo lectura a los recursos de Managed Service para Apache Kafka. Una principal con este rol puede ver clústeres, temas y grupos de consumidores, pero no puede crearlos, actualizarlos ni borrarlos.

Para obtener más información sobre cómo asignar roles, consulta la documentación sobre cómo otorgar, cambiar y revocar el acceso.

Para determinar qué permisos necesitas para una tarea específica, consulta la página de referencia de roles y permisos del Servicio administrado para Apache Kafka.

Cómo funciona el control de acceso

IAM controla la autorización para acceder a Managed Service para Apache Kafka con las APIs de Google Cloud . IAM verifica la autorización para el acceso desde clientes de Apache Kafka de código abierto que usan la autenticación SASL.

  • Cuando un cliente se conecta con SASL, IAM primero verifica si la principal tiene el permiso managedkafka.clusters.connect. Si falla esta verificación, se rechaza la conexión.

  • Cuando un cliente se conecta con mTLS, se omite esta verificación inicial de permisos de IAM, y la autorización se controla exclusivamente con las LCA de Kafka.

Para obtener una seguridad integral, debes configurar lo siguiente:

  • Permisos de IAM para el acceso de administración

  • Permisos de IAM para el acceso a la conexión si se usa SASL.

  • ACL de Kafka para el acceso y las operaciones de datos en el clúster desde clientes de Apache Kafka de código abierto, independientemente del método de autenticación.

Por ejemplo, supongamos que deseas evitar que una principal edite temas. Puedes lograr esto de dos maneras:

  • Completamente a través de IAM. Deniega al principal los roles de Editor del tema de Kafka administrado (roles/managedkafka.topicEditor) y Cliente de Kafka administrado (roles/managedkafka.client). Esta configuración restringe por completo la edición de temas a través de las APIs de Google Cloudy evita el acceso a cualquier API de Kafka con SASL. Esta configuración no impide las conexiones que usan mTLS.

  • Usa LCA de Kafka junto con IAM. Este método es obligatorio si la principal usa mTLS o necesita acceso SASL para otras operaciones. Restringe las siguientes operaciones con las ACL de Kafka:

    • Crear (para la creación de temas) a nivel del clúster

    • Alter, AlterConfigs y Delete (para la modificación y el borrado de temas) a nivel del tema

Puedes elegir el método adecuado según si la principal necesita acceso a las APIs de Kafka y el método de autenticación que se usa.

Configura los controles de acceso a nivel del proyecto

Para configurar los controles de acceso a nivel del proyecto, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Cómo establecer el control de acceso a nivel del recurso

Algunas solicitudes de Managed Service para Apache Kafka, como la creación o las actualizaciones de clústeres, son operaciones de larga duración. Para permitir que un principal realice estas acciones, otórgale acceso a los recursos de managedkafka.googleapis.com/Operation, además del recurso de clúster específico.

Esta configuración garantiza que la principal pueda iniciar la operación y supervisar su progreso.

A continuación, se muestra un ejemplo de una condición de IAM establecida en un tema llamado "test-topic":

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

En este ejemplo, se muestra una condición de IAM que verifica si un nombre de recurso termina con test-topic. Si es así, la condición es true. Esta condición específica se titula SampleIAMCondition y se podría usar en una política de IAM para restringir el acceso solo a este tema en particular.

Algunas solicitudes de Managed Service para Apache Kafka, como la creación o las actualizaciones de clústeres, devuelven operaciones de larga duración. Para otorgar acceso a nivel del clúster, incluye acceso para todos los recursos de tipo managedkafka.googleapis.com/Operation, además de la condición de recurso por clúster. Este proceso garantiza que la entidad principal pueda iniciar la operación y supervisar su progreso.

Control de acceso entre proyectos

Para autorizar a un cliente en otro proyecto a acceder a un clúster, otorga el rol de cliente de Kafka administrado (roles/managedkafka.client) a la cuenta de servicio del cliente en el proyecto del clúster.

Por ejemplo, si quieres permitir que una VM de Compute Engine en project-B acceda a un clúster en project-A, en project-A, otorga el rol de cliente de Kafka administrado (roles/managedkafka.client) a la cuenta de servicio de la VM de Compute Engine en project-B.

¿Qué sigue?

Apache Kafka® es una marca registrada de The Apache Software Foundation o sus afiliados en Estados Unidos y otros países.