Configura la autenticación SASL

Los clientes pueden conectarse a los clústeres de Managed Service para Apache Kafka con la API de Apache Kafka de código abierto. Todas las conexiones deben encriptarse con TLS. No se admite la comunicación de texto sin formato. La autenticación se controla a través de uno de los dos mecanismos compatibles, cada uno con un tipo de credencial diferente: SASL o mTLS.

En este documento, se describe cómo autenticarse con el método SASL. Los clientes se autentican con las credenciales de una principal autorizada de Identity and Access Management, como una cuenta de servicio. Managed Service para Apache Kafka administra los certificados de agente del servidor para todas las conexiones.

Antes de comenzar

Obtén más información sobre los siguientes temas:

Otorga el rol de cliente de Kafka administrado a la cuenta de servicio

Debes otorgar el rol de IAM roles/managedkafka.client en el proyecto que contiene el clúster a la cuenta de servicio que usarás para conectarte al clúster.

El rol de cliente de Kafka administrado incluye el permiso managedkafka.clusters.connect requerido para todas las conexiones. Para otorgar el rol de cliente de Kafka administrado a la cuenta de servicio, sigue estos pasos:

Console

  1. En la consola de Google Cloud , dirígete a la página IAM.
    Ir a IAM
  2. Verifica que el proyecto esté configurado como el proyecto del consumidor al que accederá el cliente de Managed Service para Apache Kafka.
  3. Haz clic en Otorgar acceso.
  4. En la página nueva, en Agregar principales, ingresa la dirección de correo electrónico de la cuenta de servicio que estás usando.
  5. En Asignar roles, selecciona el rol Cliente de Kafka administrado.
  6. Haz clic en Guardar.

gcloud CLI

  1. En la consola de Google Cloud , activa Cloud Shell.

    Activa Cloud Shell

    En la parte inferior de la consola de Google Cloud , se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Ejecuta el comando gcloud projects add-iam-policy-binding:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
      --role roles/managedkafka.client

    Reemplaza lo siguiente:

    • PROJECT_ID es el ID del proyecto.

    • SERVICE_ACCOUNT_EMAIL es la dirección de correo electrónico de la cuenta de servicio.

Configura el cliente de Kafka para la autenticación en Google Cloud

Puedes autenticar clientes de Kafka en Google Cloud con uno de los siguientes mecanismos:

OAUTHBEARER (recomendado): Este mecanismo requiere el uso de credenciales predeterminadas de la aplicación (ADC). ADC es una estrategia que usan las bibliotecas de autenticación para encontrar credenciales automáticamente según el entorno de la aplicación. Para obtener más información sobre dónde ADC busca credenciales y en qué orden, consulta Cómo funcionan las credenciales predeterminadas de la aplicación.

SASL/PLAIN: Este mecanismo requiere el uso de un nombre de usuario y una contraseña que se pueden derivar de un archivo JSON de clave de cuenta de servicio o de un token de acceso.

En general, OAUTHBEARER es la opción recomendada. Sin embargo, SASL/PLAIN podría ser un mecanismo más conveniente para las pruebas.

Autenticación de OAuthBearer

Para obtener información sobre cómo autenticarse en la API de Kafka de código abierto, consulta la documentación en GitHub.

Autenticación SASL/PLAIN

Managed Service para Apache Kafka admite la autenticación SASL/PLAIN con un archivo JSON de clave de cuenta de servicio o un token de acceso.

Archivo JSON de la clave de la cuenta de servicio

Este método se aplica a todos los clientes de Kafka.

  1. Descarga un archivo JSON de clave de cuenta de servicio para la cuenta de servicio que deseas usar para tu cliente.

  2. Codifica el archivo de la cuenta de servicio con base64-encode para usarlo como tu cadena de autenticación. Supón que el nombre del archivo es my_service_account_key.json.

    En sistemas Linux o macOS, usa el comando base64 (a menudo, se instala de forma predeterminada) de la siguiente manera:

    base64 -w 0 < my_service_account_key.json > password.txt
    

    Este comando realiza las siguientes acciones:

    • base64 < my_service_account_key.json: Lee el contenido del archivo llamado my_service_account_key.json.

    • Codifica el contenido del archivo con codificación Base64. La codificación Base64 es una forma de representar datos binarios (como los datos JSON en el archivo de tu cuenta de servicio) como texto ASCII. Esto se suele usar para transmitir datos a través de canales diseñados para texto.

    • > password.txt: Redirige el resultado del comando base64 (la versión codificada en base64 de tu archivo de cuenta de servicio) a un archivo nuevo llamado password.txt.

  3. Puedes usar el contenido del archivo de contraseñas para la autenticación con los siguientes parámetros.

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="SERVICE_ACCOUNT_EMAIL_ADDRESS" \
    password="CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE";
    

    Reemplaza lo siguiente:

    • SERVICE_ACCOUNT_EMAIL_ADDRESS: Es la dirección de correo electrónico de la cuenta de servicio que deseas usar para la autenticación.
    • CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE: Es el contenido del archivo de contraseña codificado en base64 que obtuviste en el paso anterior. Debe ser una sola línea.

Cuando se autentican las conexiones entrantes al clúster, Managed Service para Apache Kafka verifica lo siguiente:

  1. El nombre de usuario proporcionado coincide con la cuenta de servicio cuya clave se usa en la contraseña.

  2. La principal de la cuenta de servicio proporcionada tiene el permiso managedkafka.clusters.connect (incluido en el rol de IAM de roles/managedkafka.client) en el clúster.

Token de acceso

  1. Obtén un token de acceso para el principal que deseas usar para la autenticación. Por ejemplo, obtén un token de acceso para la entidad principal actual de gcloud CLI:

    gcloud auth print-access-token
    
  2. Puedes usar el token de acceso para la autenticación con los siguientes parámetros.

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="PRINCIPAL_EMAIL_ADDRESS" \
    password="ACCESS_TOKEN_VALUE";
    
    

    Reemplaza lo siguiente:

    • PRINCIPAL_EMAIL_ADDRESS: Es la dirección de correo electrónico del principal que usaste para obtener el token de acceso.
    • ACCESS_TOKEN_VALUE: Es el valor del token de acceso que obtuviste en el paso anterior.

Cuando se autentican las conexiones entrantes al clúster, Managed Service para Apache Kafka verifica lo siguiente:

  1. El token de acceso es válido y no venció.

  2. El nombre de usuario proporcionado coincide con el correo electrónico principal con el que se asocia el token de acceso.

  3. El principal del token de acceso tiene el permiso managedkafka.clusters.connect (incluido en el rol de IAM roles/managedkafka.client) en el clúster.

Workload Identity Federation for GKE

Managed Service para Apache Kafka admite la autenticación en la API de Apache Kafka de código abierto con la federación de identidades para cargas de trabajo para GKE. Se admite la autenticación para SASL/PLAIN y SASL/OAUTHBEARER.

Para usar Workload Identity Federation for GKE con Managed Service para Apache Kafka, debes cumplir con los siguientes requisitos:

  1. Usa la versión 1.31.1-gke.1241000 de GKE o una posterior.
  2. Anota tu cuenta de servicio de Kubernetes con iam.gke.io/return-principal-id-as-email: "true". Por ejemplo:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: kafka-service-account
      annotations:
        iam.gke.io/return-principal-id-as-email: "true"
    
  3. Si usas el servidor de autenticación local, verifica que también uses la versión 2.40.3 o posterior del paquete google-auth.

Verifica que la principal de GKE tenga el permiso managedkafka.clusters.connect (incluido en el rol de IAM roles/managedkafka.client).

Managed Service para Apache Kafka no admite la autenticación en la API de Apache Kafka de código abierto con la identidad de carga de trabajo de Fleet. Como alternativa, puedes vincular tu cuenta de servicio de Kubernetes a una cuenta de servicio de IAM.

Solucionar problemas

Para obtener información sobre cómo solucionar problemas de autenticación SASL, consulta Errores de autenticación.

¿Qué sigue?

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