Plugin Cloud Storage Ranger Dataproc, yang tersedia dengan versi image Dataproc 1.5 dan 2.0, mengaktifkan layanan otorisasi di setiap VM cluster Dataproc. Layanan otorisasi mengevaluasi permintaan dari konektor Cloud Storage terhadap kebijakan Ranger dan, jika permintaan diizinkan, 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. Token delegasi disimpan di database MySQL di node master cluster. Sandi root untuk database ditentukan melalui properti cluster saat Anda membuat cluster Dataproc.
Sebelum memulai
Berikan peran Service Account Token Creator dan peran IAM Role Admin di akun layanan VM Dataproc dalam project Anda.
Menginstal plugin Cloud Storage Ranger
Jalankan perintah berikut di jendela terminal lokal atau di Cloud Shell untuk menginstal plugin Cloud Storage Ranger saat Anda membuat cluster Dataproc.
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:
- CLUSTER_NAME: Nama cluster baru.
- REGION: Region tempat
cluster akan dibuat, misalnya,
us-west1
. - KERBEROS_KMS_KEY_URI dan KERBEROS_PASSWORD_URI: Lihat Menyiapkan sandi akun utama root Kerberos.
- RANGER_ADMIN_PASSWORD_KMS_KEY_URI dan RANGER_ADMIN_PASSWORD_GCS_URI: Lihat Menyiapkan sandi admin Ranger.
- RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI dan RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI: Siapkan sandi MySQL dengan mengikuti prosedur yang sama dengan yang Anda gunakan untuk Menyiapkan sandi admin Ranger.
Membuat cluster Dataproc
Jalankan perintah berikut untuk membuat cluster Dataproc dan menginstal plugin Cloud Storage Ranger 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
, bernamagcs-dataproc
,
akan muncul di antarmuka web admin Ranger.
Kebijakan default plugin Cloud Storage Ranger
Layanan gcs-dataproc
default memiliki kebijakan berikut:
Kebijakan untuk membaca dari dan menulis ke bucket staging dan sementara cluster Dataproc
Kebijakan
all - bucket, object-path
, yang memungkinkan semua pengguna mengakses metadata untuk semua objek. Akses ini diperlukan agar konektor Cloud Storage dapat melakukan operasi HCFS (Hadoop Compatible Filesystem).
Tips 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 pengabaian plugin:
Berikan akses ke resource di bucket Cloud Storage kepada akun layanan VM agar dapat memberikan akses ke resource tersebut dengan token akses cakupan rendah (lihat Izin IAM untuk Cloud Storage). Selain itu, hapus akses pengguna ke resource bucket untuk menghindari akses bucket langsung oleh pengguna.
Nonaktifkan
sudo
dan cara lain untuk mendapatkan akses root di VM cluster, termasuk mengupdate filesudoer
, untuk mencegah peniruan identitas atau perubahan pada setelan autentikasi dan otorisasi. Untuk informasi selengkapnya, lihat petunjuk Linux untuk menambahkan/menghapus hak istimewa penggunasudo
.Gunakan
iptable
untuk memblokir permintaan akses langsung ke Cloud Storage dari VM cluster. Misalnya, Anda dapat memblokir akses ke server metadata VM untuk mencegah akses ke kredensial akun layanan VM atau token akses yang digunakan untuk mengautentikasi dan memberikan otorisasi akses ke Cloud Storage (lihatblock_vm_metadata_server.sh
, skrip inisialisasi yang menggunakan aturaniptable
untuk memblokir akses ke server metadata VM).
Tugas Spark, Hive-on-MapReduce, dan Hive-on-Tez
Untuk melindungi detail autentikasi pengguna yang 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 melakukan autentikasi ke plugin Ranger Cloud Storage, menukarnya 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 jumlah kata Spark gagal saat dijalankan dari jendela terminal di VM cluster Dataproc 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 mengaktifkan 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 Pengelola Akses di antarmuka web admin Ranger
untuk menambahkan username
ke daftar pengguna yang memiliki izin bucket List Objects
dan 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 memberi pengguna akses baca 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