# 概要
DatabricksからAzure Data Lake Storage (ADLS gen2) へのアクセス手順についてまとめたいと思います。
1. Azure上での認証方式の選択
ストレージアクセスの際の認証方式をまずは決めます。主に以下の3つがあります。
- ストレージアカウントキー
- SAS Token
- サービスプリンシパル (今回はこちら)
どの認証方式を利用するべきか、簡単な比較を作ってみました。(個人的主観が含まれます)
認証方式 | 設定対象範囲 | 設定の容易さ | お勧め用途 | 概要 |
---|---|---|---|---|
ストレージアカウントキー | ストレージアカウント全体 | ◎ | 個人利用・検証環境 | ストレージアカウントに発行されるキーを利用 |
SAS Token | コンテナ | ○ | 検証環境・小規模環境 | コンテナあるいはストレージアカウント毎に発行ができ、有効期限も設定できるため検証環境での利用が便利 |
サービスプリンシパル | コンテナ | △ | 本番環境 | 設定は少し複雑だが、アプリケーションに権限ロールを付与して運用するため、複数コンテナの管理などが可能 |
今回はサービスプリンシパル認証を利用した設定手順をご紹介します。
2. Azure Data Lake Storage の作成
それでは、早速ストレージ(Azure Data Lake Storage) を作成します。
作成手順については、こちらをご覧ください。
3. サービスプリンシパルの設定
## サービスプリンシパルとは?
サービスプリンシパルとは、Application用のIDで、アプリケーションがアクセスできるための権限を付与することができます。またサービスプリンシパルをOAuthの認証認可で利用することで、データブリックスではストレージオブジェクトにアクセスできたり、Jobを特定の権限を付与した状態で実行できたりします。またストレージオブジェクトとサービスプリンシパルを紐づけるため、複数のストレージオブジェクトを一括で管理できるようになります。
## サービスプリンシパルの作成
サービスプリンシパルの作成については、こちらの記事をご覧ください。
大まかな作業の流れは以下のとおりです。
- Azure Active Directoryサービスで、アプリケーションIDの新規登録
- クライアントシークレットの発行
- 対象ストレージ(ADLSコンテナ)から、上記のアプリケーションIDに対して、アクセスロールを付与する
この後、データブリックス側で利用するサービスプリンシパルの情報は以下になります。
- application_id: Service PrincipalのApplication ID
- directory_id: Service PrincipalのDirectory ID
- client Secret Key: Service Principalで作成したシークレットキー
参考:
- Azure サービスプリンシパルで OAuth 2.0 を使用して Azure Data Lake Storage Gen2 にアクセスする
- Azure Data Lake StorageのContainerレベルでのアクセス制御
- Azure Databricks: 3-2. DBFSにAzure Data Lake Storage Gen2をマウント
Databricksからのアクセス方法
Databricksからのアクセス方法としては、DBFS経由とDirect Accessの2つのアクセス方法があります。
またDirectAccessの場合、ノートブック上のセッション資格とクラスターに設定するクラスター資格の2つの設定方法があります。それぞれの特徴は以下の通りです。
|アクセス方法|資格|設定箇所|有効期間|アクセスユーザー対象範囲|
|:--------------------+---+---+-------+---+----------:|
|DBFS経由||Notebook(一度誰かがすればOK)|umountするまで永続|ワークスペース内の全ユーザー|
|Direct|セッション資格|Notebook(毎回実行)|Notebookセッション中|ノートブック利用者|
|Direct|クラスター資格|Cluster設定|Cluster起動中|Cluster利用者|
また、設定時にはアカウントキーがそのまま見えないように、シークレット設定することが可能です。これによりキーを安全に管理することができます。シークレット設定をする場合は、追加でシークレットスコープ設定が必要になります。詳細はこちらの手順をご覧ください
サンプルノートブック
DBFS経由でのアクセス設定
DBFS経由でアクセスさせる場合は、DBFSの /mnt 配下にストレージがマウントされます。これによりワークスペース利用者は誰でもこのストレージにアクセスすることが可能になります。また一度設定すれば umount しない限りノートブックを閉じても、クラスターが切り替わってもアクセスすることができるため、全員で利用するストレージを設定する際にお勧めな方法です。
Directアクセス(セッション資格)設定
DBFSを利用せずに、Directアクセスさせることも勿論可能です。この場合2つの方法があり、ノートブック上で認証設定を行いアクセスするセッション資格設定と、クラスター上で設定することでクラスター利用者全員が利用できるようにするクラスター資格設定です。
Directアクセス(クラスター資格)設定
アクセスキーをクラスター上のSpark Configにて設定することで、クラスターを利用するユーザーは簡単にストレージにアクセスできるようになります。この場合クラスターのアクセス権限にてユーザーのパーミッション管理を行えます。