Plugin Ranger Cloud Storage

Plugin Ranger Cloud Storage Managed Service untuk Apache Spark, yang tersedia dengan versi image Managed Service untuk Apache Spark 1.5 dan 2.0, mengaktifkan layanan otorisasi di setiap VM cluster Managed Service untuk Apache Spark. Layanan otorisasi mengevaluasi permintaan dari konektor Cloud Storage terhadap kebijakan Ranger dan, jika permintaan diizinkan, akan menampilkan token akses untuk akun layanan VM cluster.

Plugin Ranger Cloud Storage mengandalkan Kerberos untuk autentikasi, dan terintegrasi dengan dukungan konektor Cloud Storage untuk token delegasi. MySQL Sandi root untuk database ditentukan melalui properti cluster saat Anda membuat cluster Managed Service untuk Apache Spark.

Sebelum memulai

Berikan peran Service Account Token Creator dan peran IAM Role Admin pada akun layanan Managed Service untuk Apache Spark VM di project Anda.

Menginstal plugin Ranger Cloud Storage

Jalankan perintah berikut di jendela terminal lokal atau di Cloud Shell untuk menginstal plugin Ranger Cloud Storage saat Anda membuat cluster Managed Service untuk Apache Spark.

Menetapkan variabel lingkungan

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

Catatan:

Membuat cluster Managed Service untuk Apache Spark

Jalankan perintah berikut untuk membuat cluster Managed Service untuk Apache Spark dan menginstal plugin Ranger Cloud Storage di cluster.

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}"

Catatan:

  • Versi image 1.5: Jika Anda membuat cluster versi image 1.5 (lihat Memilih versi), tambahkan flag --metadata=GCS_CONNECTOR_VERSION="2.2.6" or higher untuk menginstal versi konektor yang diperlukan.

Memverifikasi penginstalan plugin Ranger Cloud Storage

Setelah pembuatan cluster selesai, jenis layanan GCS, yang diberi namagcs-dataproc, akan muncul di antarmuka web admin Ranger.

Kebijakan default plugin Ranger Cloud Storage

Layanan gcs-dataproc default memiliki kebijakan berikut:

  • Kebijakan untuk membaca dari dan menulis ke cluster Managed Service untuk Apache Spark bucket staging dan temp

  • Kebijakan all - bucket, object-path, yang memungkinkan semua pengguna mengakses metadata untuk semua objek. Akses ini diperlukan untuk memungkinkan konektor Cloud Storage melakukan operasi HCFS (Hadoop Compatible Filesystem)

Kiat penggunaan

Akses aplikasi ke folder bucket

Untuk mengakomodasi aplikasi yang membuat file perantara di bucket Cloud Storage, Anda dapat memberikan izin Modify Objects, List Objects, dan Delete Objects di jalur bucket Cloud Storage, lalu memilih mode recursive untuk memperluas izin ke sub-jalur di jalur yang ditentukan.

Tindakan perlindungan

Untuk membantu mencegah pengelakan plugin:

Tugas Spark, Hive-on-MapReduce, dan Hive-on-Tez

Untuk melindungi detail autentikasi pengguna sensitif dan mengurangi beban pada Key Distribution Center (KDC), driver Spark tidak mendistribusikan kredensial Kerberos ke eksekutor. Sebagai gantinya, driver Spark mendapatkan token delegasi dari plugin Ranger Cloud Storage, lalu mendistribusikan token delegasi ke eksekutor. Eksekutor menggunakan token delegasi untuk mengautentikasi ke plugin Ranger Cloud Storage, menukarkannya dengan token akses Google yang memungkinkan akses ke Cloud Storage.

Tugas Hive-on-MapReduce dan Hive-on-Tez juga menggunakan token untuk mengakses Cloud Storage. Gunakan properti berikut untuk mendapatkan token guna mengakses bucket Cloud Storage yang ditentukan saat Anda mengirimkan jenis tugas berikut:

  • Tugas Spark:

    --conf spark.yarn.access.hadoopFileSystems=gs://bucket-name,gs://bucket-name,...
    
  • Tugas Hive-on-MapReduce:

    --hiveconf "mapreduce.job.hdfs-servers=gs://bucket-name,gs://bucket-name,..."
    
  • Tugas Hive-on-Tez:

    --hiveconf "tez.job.fs-servers=gs://bucket-name,gs://bucket-name,..."
    

Skenario tugas Spark

Tugas wordcount Spark gagal saat dijalankan dari jendela terminal di VM cluster Managed Service untuk Apache Spark yang telah menginstal plugin Ranger 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

Catatan:

  • FILE_BUCKET: Bucket Cloud Storage untuk akses Spark.

Output 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'

Catatan:

  • spark.yarn.access.hadoopFileSystems=gs://${FILE_BUCKET} diperlukan di lingkungan yang mendukung Kerberos.

Output 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)

Kebijakan diedit menggunakan Access Manager di antarmuka web admin Ranger untuk menambahkan username ke daftar pengguna yang memiliki izin List Objects dan izin bucket temp lainnya.

Menjalankan tugas akan menghasilkan error baru.

Output 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'

Kebijakan ditambahkan untuk memberikan akses baca kepada pengguna ke jalur Cloud Storage wordcount.text.

Tugas berjalan dan berhasil diselesaikan.

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