Autentikasi cluster pribadi

Saat membuat cluster Managed Service untuk Apache Spark, Anda dapat mengaktifkan Autentikasi Cluster Pribadi Managed Service untuk Apache Spark agar workload interaktif di cluster dapat berjalan dengan aman sebagai identitas pengguna Anda. Artinya, interaksi dengan resource lain seperti Cloud Storage akan diautentikasi sebagai Anda, bukan sebagai akun layanan cluster. Google Cloud

Pertimbangan

  • Saat Anda membuat cluster dengan Autentikasi Cluster Pribadi yang diaktifkan, cluster hanya dapat digunakan oleh identitas Anda. Pengguna lain tidak akan dapat menjalankan tugas di cluster atau mengakses Component Gateway endpoint 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 dengan Autentikasi Cluster Pribadi yang diaktifkan akan otomatis mengaktifkan dan mengonfigurasi Kerberos di cluster untuk komunikasi intra-cluster yang aman. Namun, semua identitas Kerberos di cluster akan berinteraksi dengan Google Cloud resource sebagai pengguna yang sama.

  • Cluster dengan Autentikasi Cluster Pribadi yang diaktifkan tidak mendukung image kustom.

  • Autentikasi Cluster Pribadi Managed Service untuk Apache Spark tidak mendukung alur kerja Managed Service for Apache Spark .

  • Autentikasi Cluster Pribadi Managed Service untuk Apache Spark 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 disebarkan diperkecil cakupannya dengan a Batas Akses Kredensial. Batas akses default dibatasi untuk membaca dan menulis objek Cloud Storage di bucket Cloud Storage yang dimiliki oleh project yang sama dengan cluster. Anda dapat menentukan batas akses non-default saat Anda enable_an_interactive_session.

  • Autentikasi Cluster Pribadi Managed Service untuk Apache Spark menggunakan atribut tamu Compute Engine. Jika fitur atribut tamu dinonaktifkan, Autentikasi Cluster Pribadi akan gagal.

Tujuan

  • Membuat cluster Managed Service untuk Apache Spark dengan Autentikasi Cluster Pribadi Managed Service untuk Apache Spark yang diaktifkan.

  • Memulai penyebaran kredensial ke cluster.

  • Menggunakan notebook Jupyter di cluster untuk menjalankan tugas Spark yang diautentikasi dengan kredensial Anda.

Sebelum Memulai

Buat Project

  1. Login keakun Anda. Google Cloud 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. Instal Google Cloud CLI.

  6. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  7. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Dataproc API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  11. Instal Google Cloud CLI.

  12. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  13. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init

Mengonfigurasi Lingkungan

Konfigurasi 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=JUPYTER \
        --region=REGION
    

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

    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 diperkecil cakupannya: Contoh berikut mengaktifkan sesi autentikasi pribadi yang lebih ketat daripada batas akses kredensial yang diperkecil cakupannya secara default. Sesi ini membatasi akses ke bucket staging cluster Managed Service untuk Apache Spark (lihat Memperkecil 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
      
  4. Biarkan perintah tetap berjalan dan beralihlah ke tab Cloud Shell atau sesi terminal baru. Klien akan memperbarui kredensial saat perintah berjalan.

  5. Ketik Ctrl-C untuk mengakhiri sesi.

Mengakses 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 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 aktif.
  4. Di terminal Jupyter, aktifkan Jupyter untuk melakukan autentikasi dengan Kerberos dan mengirimkan tugas Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab managed-spark/$(hostname -f)
    
    1. Jalankan klist untuk memverifikasi bahwa Jupyter mendapatkan TGT yang valid.
  5. 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/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. Mulai terminal Jupyter
    2. Jalankan gcloud auth list
    3. Pastikan nama pengguna Anda adalah satu-satunya akun aktif.
  3. Di terminal Jupyter, aktifkan Jupyter untuk melakukan autentikasi dengan Kerberos dan mengirimkan tugas Spark.
    kinit -kt /etc/security/keytab/dataproc.service.keytab managed-spark/$(hostname -f)
    
    1. Jalankan klist untuk memverifikasi bahwa Jupyter mendapatkan 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 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 berjalan dengan kredensial pengguna Anda.

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

Pembersihan

  1. Hapus cluster Managed Service untuk Apache Spark.
    gcloud dataproc clusters delete CLUSTER_NAME --region=REGION