Databricks共有クラスターにおけるライブラリとinitスクリプトの許可

[Allowlisting libraries and init scripts on shared compute \| Databricks on AWS](https://docs.databricks.com/en/data-governance/unity-catalog/manage-privileges/allowlist.html) [2023/8/23時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

Databricksランタイム13.3以降では、Unity Catalogの`allowlist`にライブラリとinitスクリプトを追加することができます。これによって、共有アクセスモードに設定されたクラスターでこれらのアーティファクトを活用できるようになります。

ディレクトリやファイルが作成される前に、ディレクトリやファイルパスを許可リストに追加することができます。[Unity Catalog ボリュームへのファイルのアップロード](https://docs.databricks.com/ja/ingestion/add-data/upload-to-volume.html)をご覧ください。

:::note
**注意**
許可リストを変更するにはメタストア管理者である必要があります。
:::

# 許可リストへのアイテムの追加方法

データエクスプローラあるいはREST APIを用いて、`allowlist`にアイテムを追加することができます。

データエクスプローラで許可リストにアイテムを追加するダイアログを表示するには、以下を行います:

1. Databricksワークスペースで![](https://docs.databricks.com/en/_images/data-icon.png)**Data**をクリックします。
1. メタストアの詳細と権限のUIを開くために![](https://docs.databricks.com/en/_images/gear-icon.png)をクリックします。
1. **Allowed JARs/Init Scripts**を選択します。
1. **Add**をクリックします。

:::note warn
**重要！**
このオプションは十分な権限を持つユーザーに対してのみ表示されます。許可リストのUIにアクセスできない場合には、ライブラリやinitスクリプトを許可するためにメタストア管理者にコンタクトしてください。
:::

# 許可リストにinitスクリプトを追加

許可リストにinitスクリプトを追加するには、以下のステップを完了します:

1. **Type**で**Init Script**を選択します。
1. **Source Type**で**Volume**かオブジェクトストレージのプロトコルを選択します。
1. 許可リストに追加するソースパスを指定します。[許可リストで強制されるパスの権限はどうなっているのか？](#許可リストで強制されるパスの権限はどうなっているのか)をご覧ください。

# 許可リストにJARを追加

許可リストにJARを追加するには、以下のステップを完了します:

1. **Type**で**JAR**を選択します。
1. **Source Type**で**Volume**かオブジェクトストレージのプロトコルを選択します。
1. 許可リストに追加するソースパスを指定します。[許可リストで強制されるパスの権限はどうなっているのか？](#許可リストで強制されるパスの権限はどうなっているのか)をご覧ください。

# 許可リストにMavenコーディネートを追加

許可リストにMavenコーディネートを追加するには、以下のステップを完了します:

1. **Type**で**Maven**を選択します。
1. **Source Type**で**Coordinates**を選択します。
1. フォーマット`groudId:artifactId:version`でコーディネートを入力します。
    - フォーマット`groudId:artifactId`を許可することで、あるライブラリのすべてのバージョンを含めることができます。
    - フォーマット`groudId`を許可することで、あるグループにあるすべてのアーティファクトを含めることができます。

# 許可リストで強制されるパスの権限はどうなっているのか？

Unity Catalogのボリュームやオブジェクトストレージに格納されているJARやinitスクリプトへのアクセスを許可するために、許可リストを活用することができます。ファイルではなくディレクトリへのパスを追加する場合、許可リストの権限は格納されるファイルやディレクトリにも伝播します。

Unity Catalogのボリュームやオブジェクトストレージに格納されているすべてのアーティファクトでプレフィックスのマッチングが使用されます。特定のディレクトリレベルでプレフィックスのマッチングを行わないようにするには、`/Volumes/prod-libraries/`のように、末尾にスラッシュ(`/`)を含めます。

以下のレベルで権限を定義することができます:

1. ボリュームやストレージコンテナのベースパス。
1. ベースパスから任意の深さにネストされているディレクトリ。
1. 単体のファイル。

許可リストにパスを追加することは、initスクリプトやJARのインストールで使用することができるパスであるということのみを意味します。依然として、Databricksは指定された場所にあるデータへのアクセス権があるかどうかをチェックします。

使用されるプリンシパルは、指定されたボリュームに対する`READ VOLUME`権限を持っている必要があります。[READ VOLUME](https://docs.databricks.com/ja/data-governance/unity-catalog/manage-privileges/privileges.html)をご覧ください。

アサインアクセスモードでは、割り当てられているプリンシパル(ユーザーあるいはサービスプリンシパル)のアイデンティティが使用されます。

共有アクセスモードでは:

- ライブラリは、ライブラリをインストールしたアイデンティティを使用します。
- Initスクリプトは、クラスター所有者のアイデンティティを使用します。

:::note
**注意**
分離なし共有アクセスモードはボリュームをサポートしていませんが、共有アクセスモードで同じアイデンティを使用します。
:::

initスクリプトやライブラリに関連するすべてのストレージ権限を読み取り専用に設定することをお勧めします。これらのロケーションに対する書き込み権限を持つユーザーが誤ってライブラリファイルやinitスクリプトを変更してしまう可能性があります。

S3に格納されているJARやinitスクリプトへのアクセスの管理にはインスタンスプロファイルを使用することをお勧めします。このセットアップを完了するには以下のドキュメントを参照ください:

1. 使用するバケットに対する読み込み、一覧権限を持つIAMロールの作成。[インスタンスプロファイルを使用してS3に対するアクセス権を設定する](https://docs.databricks.com/ja/aws/iam/instance-profile-tutorial.html)をご覧ください。
1. 作成したインスタンスプロファイルを用いてクラスターを起動します。[インスタンスプロファイルを使用したコンピュートリソースの起動](https://docs.databricks.com/ja/compute/instance-profiles.html)をご覧ください。

:::note
**注意**
JARとinitスクリプトに対する権限の許可は別個に管理されます。両方のタイプのオブジェクトを格納するのに同じロケーションを使用している場合には、それぞれの許可リストにロケーションを追加する必要があります。
:::

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)