es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Trabajo de GCP Dataproc no encuentra los certificados SSL almacenados en los buckets.

Tengo un clúster GCP Dataproc y estoy tratando de implementar un trabajo pyspark que produce a un tema usando SSL.

Los archivos pem están almacenados en el bucket gs://dataprockafkacode/code, y estoy accediendo a los archivos pem en el código que se muestra a continuación.
Sin embargo, el código no puede encontrar los archivos pem, el error es el siguiente:

%3|1638738651.097|SSL|rdkafka#producer-1| [thrd:app]: error:02001002:system library:fopen:No such file or directory: fopen('gs://dataproc<em>kafka</em>code/code/caroot.pem','r')
%3|1638738651.097|SSL|rdkafka#producer-1| [thrd:app]: error:2006D080:BIO routines:BIO<em>new</em>file:no such file
Traceback (most recent call last):
  File "/tmp/my-job6/KafkaProducer.py", line 21, in <module>
    producer = Producer(conf)
cimpl.KafkaException: KafkaError{code=<em>INVALID</em>ARG,val=-186,str="Failed to create producer: ssl.ca.location failed: error:0B084002:x509 certificate routines:X509<em>load</em>cert<em>crl</em>file:system lib"}

Código:

from confluent_kafka import Producer

kafkaBrokers='<host>:<port>'

<h1>CA Root certificate ca.crt</h1>

caRootLocation='gs://dataproc<em>kafka</em>code/code/caroot.pem'

<h1>user public (user.crt)</h1>

certLocation='gs://dataproc<em>kafka</em>code/code/my-bridge-user-crt.pem'

<h1>user.key</h1>

keyLocation='gs://dataproc<em>kafka</em>code/code/user-with-certs.pem'
password='<password>'

conf = {'bootstrap.servers': kafkaBrokers,
        'security.protocol': 'SSL',
        'ssl.ca.location':caRootLocation,
        'ssl.certificate.location': certLocation,
        'ssl.key.location':keyLocation,
        'ssl.key.password' : password
}
topic = 'my-topic'

producer = Producer(conf)

for n in range(100):
        producer.produce(topic, key=str(n), value=" val -> "+str(n*(-1)) + " on dec 5 from dataproc ")

producer.flush()

¿Qué se debe hacer para solucionar esto?
Además, ¿es esta la forma correcta de proporcionar el acceso del código a los certificados SSL?

¡Gracias anticipadas!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código no puede encontrar los archivos pem porque la ruta del directorio gs://dataproc_kafka_code/code no es accesible directamente desde la máquina donde se ejecuta el código. Una forma de solucionar esto es descargar los archivos pem del bucket al sistema de archivos local de la máquina donde se ejecuta el código y señalar las ubicaciones SSL a la ruta de archivo local en lugar de la ruta de almacenamiento en la nube.

    Otra forma es crear una cuenta de servicio con los permisos necesarios para acceder al bucket y autenticar la cuenta de servicio en la máquina donde se ejecuta el código. Luego, utilizar las bibliotecas de cliente de Google Cloud Storage o la herramienta de línea de comandos gsutil para acceder a los archivos pem del bucket de manera programática.

    En cuanto a la forma correcta de proporcionar al código acceso a los certificados SSL, depende del caso de uso específico y los requisitos de seguridad. Almacenar los certificados SSL en un bucket puede simplificar la gestión y el intercambio de los certificados en múltiples clústeres y proyectos. Sin embargo, puede introducir latencia adicional en la red y riesgos de seguridad si no está configurado correctamente. Almacenar los certificados en el sistema de archivos local de la máquina donde se ejecuta el código puede proporcionar un mejor rendimiento y seguridad, pero puede requerir esfuerzos adicionales para administrar y sincronizar los certificados en múltiples máquinas.

Comments are closed.