Dataproc 個人用クラスタ認証

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

考慮事項

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

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

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

  • 個人用クラスタ認証が有効になっているクラスタでは、カスタム イメージはサポートされません。

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

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

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

  • Dataproc 個人用クラスタ認証では、Compute Engine のゲスト属性を使用します。ゲスト属性機能が無効になっている場合、個人用クラスタ認証は失敗します。

目標

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

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

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

始める前に

プロジェクトを作成する

  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. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

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

  10. Enable the Dataproc API.

    Enable the API

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. 環境を構成する

    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=JUPYTER \
          --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...
      

      1. 範囲が限定されたアクセス境界の例: 次の例では、範囲が限定されたデフォルトのアクセス境界よりも制限が厳しい個人用認証セッションを有効にしています。これによって、Dataproc クラスタのステージング バケットへのアクセスが制限されます(詳細については、認証情報アクセス境界によるダウンスコープをご覧ください)。

         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. コマンドを実行したまま、新しい 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. Jupyter ターミナルで gcloud CLI を使用して、プロジェクトの Cloud Storage バケットに rose.txt ファイルを作成します。
      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. ファイルを非公開に指定すると、自分のユーザー アカウントからのみファイルの読み取りやファイルへの書き込みができるようになります。Jupyter は、Cloud Storage とやり取りするときには個人の認証情報を使用します。
        gcloud storage objects update gs://bucket-name/rose.txt --predefined-acl=private
        
      2. プライベート アクセスを確認します。
        gcloud storage objects describe gs://$BUCKET/rose.txt
        

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