El complemento Dataproc Ranger de Cloud Storage, disponible con Las versiones de imagen 1.5 y 2.0 de Dataproc activan un servicio de autorización. en cada VM del clúster de Dataproc. El servicio de autorización evalúa solicitudes del conector de Cloud Storage con las políticas de guardaparques y, si se permite la solicitud, devuelve un token de acceso para el clúster Cuenta de servicio de VM.
El complemento Ranger de Cloud Storage se basa en Kerberos para la autenticación y se integra con la compatibilidad del conector de Cloud Storage para los tokens de delegación. Los tokens de delegación se almacenan en un MySQL en el nodo de la instancia principal del clúster. La contraseña raíz de la base de datos es especificadas a través de las propiedades del clúster cuando Crea el clúster de Dataproc.
Antes de comenzar
Otorga el Creador de tokens de cuenta de servicio y el rol de administrador de roles de IAM Cuenta de servicio de VM de Dataproc en tu proyecto.
Instala el complemento Ranger de Cloud Storage
Ejecuta los siguientes comandos en una ventana de terminal local o en Cloud Shell para instalar Ranger Complemento de Cloud Storage cuando creas un clúster de Dataproc.
Configura variables de entorno
export CLUSTER_NAME=new-cluster-name \ export REGION=region \ export KERBEROS_KMS_KEY_URI=Kerberos-KMS-key-URI \ export KERBEROS_PASSWORD_URI=Kerberos-password-URI \ export RANGER_ADMIN_PASSWORD_KMS_KEY_URI=Ranger-admin-password-KMS-key-URI \ export RANGER_ADMIN_PASSWORD_GCS_URI=Ranger-admin-password-GCS-URI \ export RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI=MySQL-root-password-KMS-key-URI \ export RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI=MySQL-root-password-GCS-URI
Notas:
- CLUSTER_NAME: El nombre del clúster nuevo
- REGION: La región donde se
clúster, por ejemplo,
us-west1
. - KERBEROS_KMS_KEY_URI y KERBEROS_PASSWORD_URI: Consulta Configura tu contraseña principal raíz de Kerberos.
- RANGER_ADMIN_PASSWORD_KMS_KEY_URI y RANGER_ADMIN_PASSWORD_GCS_URI: consultar Configura la contraseña de administrador de Ranger.
- RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI y RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI: establece crear una contraseña de MySQL mediante el mismo procedimiento que usaste Configura una contraseña de administrador de Ranger.
Crea un clúster de Dataproc
Ejecuta el siguiente comando para crear un clúster de Dataproc y, luego, instalar Ranger Complemento de Cloud Storage en el clúster.
gcloud dataproc clusters create ${CLUSTER_NAME} \ --region=${REGION} \ --scopes cloud-platform \ --enable-component-gateway \ --optional-components=SOLR,RANGER \ --kerberos-kms-key=${KERBEROS_KMS_KEY_URI} \ --kerberos-root-principal-password-uri=${KERBEROS_PASSWORD_URI} \ --properties="dataproc:ranger.gcs.plugin.enable=true, \ dataproc:ranger.kms.key.uri=${RANGER_ADMIN_PASSWORD_KMS_KEY_URI}, \ dataproc:ranger.admin.password.uri=${RANGER_ADMIN_PASSWORD_GCS_URI}, \ dataproc:ranger.gcs.plugin.mysql.kms.key.uri=${RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI}, \ dataproc:ranger.gcs.plugin.mysql.password.uri=${RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI}"
Notas:
- Versión con imágenes 1.5: si estás creando un clúster de versión con imagen 1.5 (consulta
Selecciona versiones),
agrega la marca
--metadata=GCS_CONNECTOR_VERSION="2.2.6" or higher
para instalar la versión del conector requerida.
Verifica la instalación del complemento de Cloud Storage para Ranger
Cuando se completa la creación del clúster, un tipo de servicio GCS
, llamado gcs-dataproc
,
Aparece en la interfaz web de administrador de guarda rangos.
Políticas predeterminadas del complemento de Cloud Storage para guardabosques
El servicio gcs-dataproc
predeterminado tiene las siguientes políticas:
Políticas para leer y escribir en Dataproc etapa de pruebas y buckets temporales del clúster
Una política
all - bucket, object-path
, que permite que todos los usuarios accedan a los metadatos de todos los objetos. Se requiere este acceso para permitir que el conector de Cloud Storage para realizar HCFS (Sistema de archivos compatible con Hadoop) las operaciones.
Sugerencias de uso
Acceso de apps a carpetas de bucket
Para alojar apps que crean archivos intermedios en el bucket de Cloud Storage,
puedes otorgar Modify Objects
, List Objects
y Delete Objects
permisos en la ruta del bucket de Cloud Storage y, luego, selecciona
Modo recursive
para extender los permisos a rutas secundarias en la ruta especificada.
Medidas de protección
Para evitar la elusión del complemento, haz lo siguiente:
Otorga el Cuenta de servicio de VM acceso a los recursos en tu Cloud Storage buckets para permitirle otorgar acceso a esos recursos con tokens de acceso de alcance reducido (consulta Permisos de IAM para Cloud Storage). Además, quitar el acceso de los usuarios a los recursos del bucket para evitar el acceso directo al bucket de los usuarios
Inhabilitar
sudo
y otros medios de acceso raíz en las VMs del clúster, incluida la actualización el archivosudoer
para evitar el robo de identidad o los cambios en la autenticación y la configuración de autorización. Para obtener más información, consulta las instrucciones para Linux. para agregar o quitar privilegios de usuario desudo
.Usa
iptable
para bloquear las solicitudes de acceso directo a Cloud Storage desde VMs del clúster. Por ejemplo, puedes bloquear el acceso al servidor de metadatos de la VM para impedir el acceso a la credencial de la cuenta de servicio de VM o al token de acceso que se usa para autenticar y autorizar el acceso a Cloud Storage (consultablock_vm_metadata_server.sh
, un secuencia de comandos de inicialización que usa reglasiptable
para bloquear el acceso al servidor de metadatos de la VM).
Trabajos de Spark, Hive-on-MapReduce y Hive-on-Tez
Para proteger los detalles sensibles de autenticación del usuario y reducir la carga en la Key Distribution Center (KDC), el controlador Spark no distribuye Kerberos credenciales a los ejecutores. En su lugar, el controlador de Spark obtiene una delegación token del complemento Ranger de Cloud Storage y, luego, distribuye la delegación token a los ejecutores. Los ejecutores usan el token de delegación para autenticarse en la el complemento Ranger de Cloud Storage, lo cambia por un token de acceso de Google que permite el acceso a Cloud Storage.
Los trabajos de Hive-on-MapReduce y Hive-on-Tez también usan tokens para acceder en Google Cloud Storage. Usa las siguientes propiedades para obtener tokens para acceder a buckets de Cloud Storage especificados cuando envíes los siguientes tipos de trabajo:
Trabajos de Spark:
--conf spark.yarn.access.hadoopFileSystems=gs://bucket-name,gs://bucket-name,...
Trabajos de Hive-on-MapReduce:
--hiveconf "mapreduce.job.hdfs-servers=gs://bucket-name,gs://bucket-name,..."
Trabajos de Hive-on-Tez:
--hiveconf "tez.job.fs-servers=gs://bucket-name,gs://bucket-name,..."
Situación de trabajo de Spark
Un trabajo de conteo de palabras de Spark falla cuando se ejecuta desde una ventana de terminal en una VM de clúster de Dataproc que instalado el complemento Ranger de Cloud Storage.
spark-submit \ --conf spark.yarn.access.hadoopFileSystems=gs://${FILE_BUCKET} \ --class org.apache.spark.examples.JavaWordCount \ /usr/lib/spark/examples/jars/spark-examples.jar \ gs://bucket-name/wordcount.txt
Notas:
- FILE_BUCKET: Bucket de Cloud Storage para el acceso a Spark.
Resultado del error:
Caused by: com.google.gcs.ranger.client.shaded.io.grpc.StatusRuntimeException: PERMISSION_DENIED: Access denied by Ranger policy: User: '<USER>', Bucket: '<dataproc_temp_bucket>', Object Path: 'a97127cf-f543-40c3-9851-32f172acc53b/spark-job-history/', Action: 'LIST_OBJECTS'
Notas:
- El campo
spark.yarn.access.hadoopFileSystems=gs://${FILE_BUCKET}
es obligatorio en Kerberos entorno habilitado.
Resultado del error:
Caused by: java.lang.RuntimeException: Failed creating a SPNEGO token. Make sure that you have run `kinit` and that your Kerberos configuration is correct. See the full Kerberos error message: No valid credentials provided (Mechanism level: No valid credentials provided)
Se edita una política con el Administrador de acceso en la interfaz web de administrador de rangos.
para agregar username
a la lista de usuarios que tienen List Objects
y otro bucket de temp
permisos.
Cuando ejecutas el trabajo, se genera un error nuevo.
Resultado del error:
com.google.gcs.ranger.client.shaded.io.grpc.StatusRuntimeException: PERMISSION_DENIED: Access denied by Ranger policy: User: <USER>, Bucket: '<file-bucket>', Object Path: 'wordcount.txt', Action: 'READ_OBJECTS'
Se agrega una política para otorgar al usuario acceso de lectura a wordcount.text
.
Ruta de acceso de Cloud Storage.
El trabajo se ejecuta y se completa de forma correcta.
INFO com.google.cloud.hadoop.fs.gcs.auth.GcsDelegationTokens: Using delegation token RangerGCSAuthorizationServerSessionToken owner=<USER>, renewer=yarn, realUser=, issueDate=1654116824281, maxDate=0, sequenceNumber=0, masterKeyId=0 this: 1 is: 1 a: 1 text: 1 file: 1 22/06/01 20:54:13 INFO org.sparkproject.jetty.server.AbstractConnector: Stopped