Los clientes pueden conectarse a 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 simple. 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 autenticarte con el método SASL. Los clientes se autentican con las credenciales de un principal autorizado 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 roles/managedkafka.client
rol de IAM en el proyecto que contiene el clúster a la cuenta de servicio
que usarás para conectarte a él.
El rol de cliente de Kafka administrado incluye el permiso managedkafka.clusters.connect que se requiere para todas las conexiones.
Para otorgar el rol de cliente de Kafka administrado a la cuenta de servicio, sigue estos pasos:
Console
- En la Google Cloud consola de, dirígete a la página IAM.
Ir a IAM - Verifica que el proyecto esté configurado en el proyecto de consumidor al que accederá el cliente de Managed Service para Apache Kafka.
- Haz clic en Otorgar acceso.
- En la página nueva, en Agregar principales, ingresa la dirección de correo electrónico de la cuenta de servicio que usas.
- En Asignar roles, selecciona el rol Cliente de Kafka administrado.
- Haz clic en Guardar.
gcloud CLI
-
En la Google Cloud consola de, activa Cloud Shell.
En la parte inferior de la Google Cloud consola de 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.
-
Ejecuta el
gcloud projects add-iam-policy-bindingcomando: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 usando 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 puedan derivar de un archivo JSON de claves de cuenta de servicio o 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 autenticarte 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 claves de cuenta de servicio o un token de acceso.
Archivo JSON de claves de cuenta de servicio
Este método se aplica a todos los clientes de Kafka.
Descarga un archivo JSON de claves de cuenta de servicio para la cuenta de servicio que deseas usar para tu cliente.
Codifica el archivo de la cuenta de servicio con base64-encode para usarlo como cadena de autenticación. Supón que el nombre de archivo es
my_service_account_key.json.En sistemas Linux o macOS, usa el comando
base64(que suele estar instalado de forma predeterminada) de la siguiente manera:base64 -w 0 < my_service_account_key.json > password.txtEste comando realiza las siguientes acciones:
base64 < my_service_account_key.json: Lee el contenido del archivo llamadomy_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 datos JSON en el archivo de tu cuenta de servicio) como texto ASCII. Esto se usa a menudo para transmitir datos a través de canales diseñados para texto.
> password.txt: Redirige el resultado del comandobase64(la versión codificada en base64 de tu archivo de cuenta de servicio) a un archivo nuevo llamadopassword.txt.
Puedes usar el contenido del archivo de contraseña 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: 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: El contenido del archivo de contraseña codificado en base64 que obtuviste en el paso anterior. Debe ser una sola línea.
Cuando autentica las conexiones entrantes al clúster, Managed Service para Apache Kafka verifica lo siguiente:
El nombre de usuario proporcionado coincide con la cuenta de servicio cuya clave se usa en la contraseña.
El principal de la cuenta de servicio proporcionado tiene el permiso
managedkafka.clusters.connect(incluido en elroles/managedkafka.clientrol de IAM) en el clúster.
Token de acceso
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-tokenPuedes 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: La dirección de correo electrónico del principal que usaste para obtener el token de acceso.ACCESS_TOKEN_VALUE: El valor del token de acceso que obtuviste en el paso anterior.
Cuando autentica las conexiones entrantes al clúster, Managed Service para Apache Kafka verifica lo siguiente:
El token de acceso es válido y no venció.
El nombre de usuario proporcionado coincide con el correo electrónico principal con el que está asociado el token de acceso.
El principal del token de acceso tiene el permiso
managedkafka.clusters.connect(incluido en elroles/managedkafka.clientrol de IAM) 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. La autenticación es compatible con SASL/PLAIN y SASL/OAUTHBEARER.
Para usar Workload Identity Federation for GKE con Managed Service para Apache Kafka, debes cumplir con los siguientes requisitos:
- Usa la versión
1.31.1-gke.1241000de GKE o una posterior. 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"Si usas el servidor de autenticación local, verifica que también uses la versión
2.40.3o posterior del paquete google-auth.
Verifica que el principal de GKE tenga el permiso
managedkafka.clusters.connect (incluido en el roles/managedkafka.client
rol de IAM).
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 deFleet. 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.