Autentikasi Cluster Pribadi Dataproc

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

Pertimbangan

  • Jika Anda membuat cluster dengan Autentikasi Cluster Pribadi yang diaktifkan, cluster hanya akan dapat digunakan berdasarkan identitas Anda. Pengguna lain tidak akan dapat menjalankan tugas di cluster atau mengakses endpoint Gateway Komponen di cluster.

  • Cluster yang mengaktifkan Autentikasi Cluster Pribadi akan memblokir akses SSH dan fitur Compute Engine seperti skrip startup pada semua VM di 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 perorangan (manusia). Tugas dan operasi yang berjalan lama harus mengonfigurasi dan menggunakan identitas akun layanan yang sesuai.

  • Kredensial yang disebarkan diturunkan cakupannya dengan Batas Akses Kredensial. Batas akses default terbatas pada pembacaan dan penulisan objek Cloud Storage di bucket Cloud Storage yang dimiliki oleh project yang sama yang berisi cluster tersebut. Anda dapat menentukan batas akses non-default saat enable_an_interactive_session.

Tujuan

  • Buat cluster Dataproc dengan Authentication Cluster Pribadi Dataproc yang diaktifkan.

  • Memulai propagasi kredensial ke cluster.

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

Sebelum Memulai

Buat Project

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API Dataproc.

    Mengaktifkan API

  5. Menginstal Google Cloud CLI.
  6. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  7. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  8. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  9. Aktifkan API Dataproc.

    Mengaktifkan API

  10. Menginstal Google Cloud CLI.
  11. Untuk initialize gcloud CLI, jalankan perintah berikut:

    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 yang aktif 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=ANACONDA,JUPYTER,ZEPPELIN \
        --region=region
    

  3. Aktifkan sesi propagasi 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 diturunkan: Contoh berikut memungkinkan sesi autentikasi pribadi yang lebih ketat daripada batas akses kredensial yang diturunkan cakupannya secara default. Tindakan ini membatasi akses ke bucket staging cluster Dataproc (lihat Downscope 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. Tetap jalankan perintah dan beralihlah ke tab atau sesi terminal Cloud Shell yang baru. Klien akan me-refresh kredensial saat perintah sedang berjalan.

  2. Ketik Ctrl-C untuk mengakhiri sesi.

Contoh berikut membuat cluster dengan batas akses kredensial yang di-downscope.

Akses Jupyter di cluster

gcloud

  1. Dapatkan 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 untuk meluncurkan UI Jupyter.
  3. Pastikan autentikasi cluster pribadi berhasil.
    1. Mulai terminal Jupyter.
    2. Jalankan gcloud auth list
    3. Verifikasi bahwa nama pengguna Anda adalah satu-satunya akun yang aktif.
  4. Di terminal Jupyter, aktifkan Jupyter untuk mengautentikasi dengan Kerberos dan kirimkan tugas Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Jalankan klist untuk memverifikasi bahwa Jupyter mendapatkan TGT yang valid.
  5. Di terminal Juypter, gunakan gsutil untuk membuat file rose.txt di bucket Cloud Storage di project Anda.
    echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
    

    gsutil cp /tmp/rose.txt gs://bucket-name/rose.txt
    
    1. Menandai 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.
      gsutil acl set private gs://bucket-name/rose.txt
      
    2. Verifikasi akses pribadi Anda.
      gsutil acl get gs://$BUCKET/rose.txt
      

      [
      {
      "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. Mulai terminal Jupyter
    2. Jalankan gcloud auth list
    3. Verifikasi bahwa nama pengguna Anda adalah satu-satunya akun yang aktif.
  3. Di terminal Jupyter, aktifkan Jupyter untuk mengautentikasi dengan Kerberos dan kirimkan tugas Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. Jalankan klist untuk memverifikasi bahwa Jupyter mendapatkan TGT yang valid.
  4. Di terminal Jupyter, gunakan gsutil untuk membuat file rose.txt di bucket Cloud Storage di project Anda.
    echo "A rose by any other name would smell as sweet" > /tmp/rose.txt
    

    gsutil cp /tmp/rose.txt gs://bucket-name/rose.txt
    
    1. Menandai 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.
      gsutil acl set private gs://bucket-name/rose.txt
      
    2. Verifikasi akses pribadi Anda.
      gsutil acl get gs://bucket-name/rose.txt
      
      [
      {
      "email": "$USER",
      "entity": "user-$USER",
      "role": "OWNER"
      }
      ]
      

Menjalankan tugas PySpark dari Jupyter

  1. Buka folder, lalu buat notebook PySpark.
  2. Jalankan tugas jumlah kata dasar terhadap 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 dijalankan 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