Dataproc 個人用クラスタ認証

Dataproc クラスタを作成するときに Dataproc 個人用クラスタ認証を有効にすると、クラスタ上のインタラクティブなワークロードをユーザー ID として安全に実行できるようになります。つまり、Cloud Storage などの他の Google Cloud リソースとのやり取りは、クラスタのサービス アカウントではなくユーザー自身として認証されます。

考慮事項

  • 個人用クラスタ認証を有効にしてクラスタを作成すると、クラスタは ユーザーのID でのみ使用できるようになります。他のユーザーは、クラスタでジョブを実行したり、クラスタ上のコンポーネント ゲートウェイのエンドポイントにアクセスしたりできなくなります。

  • 個人用クラスタ認証が有効になっているクラスタでは、SSH アクセスと Compute Engine の機能(クラスタ内のすべての VM の起動スクリプトなど)が使えなくなります。

  • 個人用クラスタ認証が有効になっているクラスタでは、クラスタ内で安全な通信を行うために Kerberos が自動的に有効になり、クラスタ上に構成されます。ただし、クラスタのすべての Kerberos ID は、同じユーザーとして Google Cloud リソースとやり取りします。

  • Dataproc 個人用クラスタ認証は現在、Dataproc ワークフローをサポートしていません。

  • Dataproc 個人y法クラスタ認証は、個人(人間の)ユーザーが実行するインタラクティブ ジョブのみを対象としています。長時間実行されるジョブとオペレーションでは、適切なサービス アカウント ID を構成して使用する必要があります。

  • 伝播される認証情報は、認証情報アクセス境界によって範囲が限定されます。デフォルトのアクセス境界は、クラスタを含む同じプロジェクトが所有する Cloud Storage バケット内の Cloud Storage オブジェクトの読み取りと書き込みに限定されます。

目標

  • Dataproc 個人用クラスタ認証を有効にして Dataproc クラスタを作成します。

  • クラスタへの認証情報の伝播を開始します。

  • クラスタで Jupyter ノートブックを使用して、認証情報で認証された Spark ジョブを実行します。

始める前に

プロジェクトを作成

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Dataproc API を有効にします。

    API を有効にする

  5. Cloud SDK をインストールして初期化します。
  6. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  7. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  8. Dataproc API を有効にします。

    API を有効にする

  9. Cloud SDK をインストールして初期化します。

環境を構成する

Cloud Shell またはローカル ターミナルから環境を構成します。

Cloud Shell

  1. Cloud Shell セッションを開始します。

ローカル ターミナル

  1. gcloud auth login を実行して、有効なユーザー認証情報を取得します。

クラスタを作成してインタラクティブ セッションを有効にする

  1. gcloud でアクティブなアカウントのメールアドレスを確認します。

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

  2. クラスタを作成します。

    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. Google Cloud リソースとやり取りするときに、クラスタの認証情報伝播セッションを有効にして、自身の個人用認証情報の使用を開始します。

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

    出力例:

    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...
    

  4. コマンドを実行したまま、新しい Cloud Shell タブかターミナル セッションに切り替えます。クライアントがコマンドの実行中に認証情報を更新します。

  5. Ctrl-C」と入力してセッションを終了します。

クラスタ上の Jupyter にアクセスする

gcloud

  1. クラスタの詳細を取得します。
    gcloud dataproc clusters describe cluster-name --region=region
    

    Jupyter のウェブ インターフェース URL はクラスタの詳細に掲載されています。

    ...
    JupyterLab: https://UUID-dot-us-central1.dataproc.googleusercontent.com/jupyter/lab/
    ...
    
  2. ローカル ブラウザに URL をコピーして、Jupyter UI を起動します。
  3. 個人用クラスタ認証が成功したことを確認します。
    1. Jupyter ターミナルを起動します。
    2. gcloud auth list を実行します。
    3. ユーザー名が唯一のアクティブなアカウントであることをご確認ください。
  4. Jupyter のターミナルで、Jupyter による Kerberos での認証と Spark ジョブの送信を有効化します。
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. klist を実行して、Jupyter が有効な TGT を取得したことを確認します。
  5. Juypter ターミナルで gsutil を使用して、プロジェクトの Cloud Storage バケットに rose.txt ファイルを作成します。
    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. ファイルを非公開に指定すると、自分のユーザー アカウントからのみファイルの読み取りやファイルへの書き込みができるようになります。Jupyterは、Cloud Storage とやり取りするときには個人の認証情報を使用します。
      gsutil acl set private gs://bucket-name/rose.txt
      
    2. プライベート アクセスを確認します。
      gsutil acl get gs://$BUCKET/rose.txt
      

      [
      {
      "email": "$USER",
      "entity": "user-$USER",
      "role": "OWNER"
      }
      ]
      

Console

  1. コンポーネント ゲートウェイの Jupyter リンクをクリックして Jupyter UI を起動します。
  2. 個人用クラスタ認証が成功したことを確認します。
    1. Jupyter ターミナルを起動します。
    2. gcloud auth list を実行します。
    3. ユーザー名が唯一のアクティブなアカウントであることをご確認ください。
  3. Jupyter のターミナルで、Jupyter による Kerberos での認証と Spark ジョブの送信を有効化します。
    kinit -kt /etc/security/keytab/dataproc.service.keytab dataproc/$(hostname -f)
    
    1. klist を実行して、Jupyter が有効な TGT を取得したことを確認します。
  4. Jupyter ターミナルで gsutil を使用して、プロジェクトの Cloud Storage バケットに rose.txt ファイルを作成します。
    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. ファイルを非公開に指定すると、自分のユーザー アカウントからのみファイルの読み取りやファイルへの書き込みができるようになります。Jupyterは、Cloud Storage とやり取りするときには個人の認証情報を使用します。
      gsutil acl set private gs://bucket-name/rose.txt
      
    2. プライベート アクセスを確認します。
      gsutil acl get gs://bucket-name/rose.txt
      
      [
      {
      "email": "$USER",
      "entity": "user-$USER",
      "role": "OWNER"
      }
      ]
      

Jupyter から PySpark ジョブを実行する

  1. 任意のフォルダに移動して、PySpark ノートブックを作成します。
  2. 上記で作成した rose.txt ファイルに対して、基本的な文字数カウント ジョブを実行します。

    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 はユーザーの認証情報で実行されるため、Cloud Storage 内の rose.txt ファイルを読み取ることができます。

    また、Cloud Storage バケットの監査ログを調べると、ジョブが ID を使用して Cloud Storage にアクセスしていることを確認できます。

クリーンアップ

  1. Dataproc クラスタを削除します。
    gcloud dataproc clusters delete cluster-name --region=region