Autentikasi Cluster Pribadi Dataproc

Saat membuat cluster Dataproc, Anda dapat mengaktifkan Autentikasi Cluster Pribadi Dataproc untuk mengizinkan workload interaktif di cluster berjalan dengan aman sebagai identitas pengguna Anda. Artinya, interaksi dengan resource Google Cloud lainnya seperti Cloud Storage akan diautentikasi sebagai Anda, bukan akun layanan cluster.

Pertimbangan

  • Saat Anda membuat cluster dengan mengaktifkan Autentikasi Cluster Pribadi, cluster hanya akan dapat digunakan oleh identitas Anda. Pengguna lain tidak akan dapat menjalankan tugas di cluster atau mengakses endpoint Component Gateway di cluster.

  • Cluster dengan Autentikasi Cluster Pribadi yang diaktifkan akan memblokir akses SSH dan fitur Compute Engine seperti skrip startup di semua VM dalam cluster.

  • Cluster yang mengaktifkan Autentikasi Cluster Pribadi akan otomatis mengaktifkan dan mengonfigurasi Kerberos di cluster untuk komunikasi intra-cluster yang aman. Namun, semua identitas Kerberos di cluster akan berinteraksi dengan resource Google Cloud sebagai pengguna yang sama.

  • Autentikasi Cluster Pribadi Dataproc saat ini tidak mendukung alur kerja Dataproc.

  • Autentikasi Cluster Pribadi Dataproc hanya ditujukan untuk tugas interaktif yang dijalankan oleh pengguna individu (manusia). Tugas dan operasi yang berjalan lama harus mengonfigurasi dan menggunakan identitas akun layanan yang sesuai.

  • Kredensial yang di-propagate diperkecil cakupannya dengan Batas Akses Kredensial. Batas akses default terbatas untuk membaca dan menulis objek Cloud Storage di bucket Cloud Storage yang dimiliki oleh project yang sama dengan yang berisi cluster. Anda dapat menentukan batas akses non-default saat enable_an_interactive_session.

Tujuan

  • Buat cluster Dataproc dengan Autentikasi Cluster Pribadi Dataproc diaktifkan.

  • Mulai penyebaran kredensial ke cluster.

  • Gunakan notebook Jupyter di cluster untuk menjalankan tugas Spark yang mengautentikasi dengan kredensial Anda.

Sebelum Memulai

Buat Project

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc API.

    Enable the API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Dataproc API.

    Enable the API

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

Mengonfigurasi Lingkungan

Konfigurasikan lingkungan dari Cloud Shell atau terminal lokal:

Cloud Shell

  1. Mulai sesi Cloud Shell.

Terminal lokal

  1. Jalankan gcloud auth login untuk mendapatkan kredensial pengguna yang valid.

Membuat cluster dan mengaktifkan sesi interaktif

  1. Temukan alamat email akun aktif Anda di gcloud.

    gcloud auth list --filter=status=ACTIVE --format="value(account)"
    

  2. Membuat cluster.

    gcloud dataproc clusters create cluster-name \
        --properties=dataproc:dataproc.personal-auth.user=your-email-address \
        --enable-component-gateway \
        --optional-components=ZEPPELIN \
        --region=region
    

  3. Aktifkan sesi penyebaran kredensial untuk cluster agar mulai menggunakan kredensial pribadi Anda saat berinteraksi dengan resource Google Cloud.

    gcloud dataproc clusters enable-personal-auth-session \
        --region=region \
        cluster-name
    

    Contoh output:

    Injecting initial credentials into the cluster cluster-name...done.
    Periodically refreshing credentials for cluster cluster-name. This will continue running until the command is interrupted...
    

    1. Contoh batas akses yang didownscope: Contoh berikut memungkinkan sesi autentikasi pribadi yang lebih ketat daripada batas akses kredensial yang didownscope secara default. Batas ini membatasi akses ke bucket staging cluster Dataproc (lihat Mempersempit Cakupan dengan Batas Akses Kredensial untuk mengetahui informasi selengkapnya).
gcloud dataproc clusters enable-personal-auth-session \
    --project=PROJECT_ID \
    --region=REGION \
    --access-boundary=<(echo -n "{ \
  \"access_boundary\": { \
    \"accessBoundaryRules\": [{ \
      \"availableResource\": \"//storage.googleapis.com/projects/_/buckets/$(gcloud dataproc clusters describe --project=PROJECT_ID --region=REGION CLUSTER_NAME --format="value(config.configBucket)")\", \
      \"availablePermissions\": [ \
        \"inRole:roles/storage.objectViewer\", \
        \"inRole:roles/storage.objectCreator\", \
        \"inRole:roles/storage.objectAdmin\", \
        \"inRole:roles/storage.legacyBucketReader\" \
      ] \
    }] \
  } \
}") \
   CLUSTER_NAME
  1. Biarkan perintah berjalan dan beralihlah ke tab Cloud Shell atau sesi terminal baru. Klien akan memuat ulang kredensial saat perintah berjalan.

  2. Ketik Ctrl-C untuk mengakhiri sesi.

Mengakses Jupyter di cluster

gcloud

  1. Mendapatkan detail cluster.
    gcloud dataproc clusters describe cluster-name --region=region
    

    URL antarmuka Web Jupyter tercantum dalam detail cluster.

    ...
    JupyterLab: https://UUID-dot-us-central1.dataproc.googleusercontent.com/jupyter/lab/
    ...
    
  2. Salin URL ke browser lokal Anda untuk meluncurkan UI Jupyter.
  3. Pastikan autentikasi cluster pribadi berhasil.
    1. Mulai terminal Jupyter.
    2. Jalankan gcloud auth list
    3. Pastikan nama pengguna Anda adalah satu-satunya akun yang aktif.
  4. Di terminal Jupyter, aktifkan Jupyter untuk melakukan autentikasi dengan Kerberos dan mengirimkan tugas Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Jalankan klist untuk memverifikasi bahwa Jupyter memperoleh TGT yang valid.
  5. Di terminal Juypter, gunakan gcloud CLI untuk membuat file rose.txt di bucket Cloud Storage dalam project Anda.
    echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
    

    gcloud storage cp /tmp/rose.txt gs://bucket-name/rose.txt
    
    1. Tandai file sebagai pribadi sehingga hanya akun pengguna Anda yang dapat membaca atau menulis ke file tersebut. Jupyter akan menggunakan kredensial pribadi Anda saat berinteraksi dengan Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. Verifikasi akses pribadi Anda.
      gcloud storage objects describe gs://$BUCKET/rose.txt
      

      acl:
  6. email: $USER entity: user-$USER role: OWNER

Konsol

  1. Klik link Component Gateway Jupyter untuk meluncurkan UI Jupyter.
  2. Pastikan autentikasi cluster pribadi berhasil.
    1. Memulai terminal Jupyter
    2. Jalankan gcloud auth list
    3. Pastikan nama pengguna Anda adalah satu-satunya akun yang aktif.
  3. Di terminal Jupyter, aktifkan Jupyter untuk melakukan autentikasi dengan Kerberos dan mengirimkan tugas Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Jalankan klist untuk memverifikasi bahwa Jupyter memperoleh TGT yang valid.
  4. Di terminal Jupyter, gunakan gcloud CLI untuk membuat file rose.txt di bucket Cloud Storage dalam project Anda.
    echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
    

    gcloud storage cp /tmp/rose.txt gs://bucket-name/rose.txt
    
    1. Tandai file sebagai pribadi sehingga hanya akun pengguna Anda yang dapat membaca atau menulis ke file tersebut. Jupyter akan menggunakan kredensial pribadi Anda saat berinteraksi dengan Cloud Storage.
      gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
      
    2. Verifikasi akses pribadi Anda.
      gcloud storage objects describe gs://bucket-name/rose.txt
      
      acl:
  5. email: $USER entity: user-$USER role: OWNER

Menjalankan tugas PySpark dari Jupyter

  1. Buka folder, lalu buat notebook PySpark.
  2. Jalankan tugas penghitungan kata dasar pada file rose.txt yang Anda buat di atas.

    text_file = sc.textFile("gs://bucket-name/rose.txt")
    counts = text_file.flatMap(lambda line: line.split(" ")) \
             .map(lambda word: (word, 1)) \
             .reduceByKey(lambda a, b: a + b)
    print(counts.collect())

    Spark dapat membaca file rose.txt di Cloud Storage karena berjalan dengan kredensial pengguna Anda.

    Anda juga dapat memeriksa Log Audit Bucket Cloud Storage untuk memverifikasi bahwa tugas mengakses Cloud Storage dengan identitas Anda (lihat Cloud Audit Logs dengan Cloud Storage untuk mengetahui informasi selengkapnya).

Pembersihan

  1. Hapus cluster Dataproc.
    gcloud dataproc clusters delete cluster-name --region=region