メインコンテンツまでスキップ

Databricks アセット バンドル内のリソースに対するアクセス許可を設定する

この記事では、 Databricks アセット バンドル で Databricks ジョブ、DLT パイプライン、MLOps スタックのアクセス許可を設定する方法について説明します。「Databricks アセットバンドルとは」を参照してください。

Databricks バンドル構成ファイルでは、バンドルで定義されているすべてのリソースに適用するアクセス許可を定義することも、特定のリソースに適用する 1 つ以上のアクセス許可を定義することもできます。

注記

権限は重複できません。 つまり、ユーザー、グループ、またはサービスプリンシパルの権限は、最上位の permissions マッピングと resources マッピングの両方で定義することはできません。

すべてのリソースに適用する権限を定義する

最上位のpermissionsマッピングを使用して、resourcesで定義されているすべてのエクスペリメント、ジョブ、モデル、およびパイプラインに適用する権限を定義できます。「パーミッション」を参照してください。

Databricks では、Databricks Asset Bundles リソースのアクセス許可を管理するために、このアプローチをお勧めします。

特定のリソースに対する権限を定義する

エクスペリメント、ジョブ、モデル、またはresourcesのパイプライン定義でpermissionsマッピングを使用して、そのリソースに対する 1 つ以上の権限を定義できます。

permissionsマッピングの各権限には、次の 2 つのマッピングが含まれている必要があります。

  • user_namegroup_name、または service_principal_nameを、それぞれユーザー、グループ、またはサービスプリンシパルの名前に置き換えます。
  • levelは、権限レベルの名前に置き換えます。 各リソースに許可されるアクセス許可レベルは次のとおりです。
    • エクスペリメント: CAN_EDITCAN_MANAGECAN_READ
    • ジョブ:CAN_MANAGECAN_MANAGE_RUNCAN_VIEWIS_OWNER
    • モデル:CAN_EDITCAN_MANAGECAN_MANAGE_STAGING_VERSIONSCAN_MANAGE_PRODUCTION_VERSIONSCAN_READ
    • パイプライン: CAN_MANAGECAN_RUNCAN_VIEW、および IS_OWNER

特定のアクセス許可レベルに関する情報については、以下を参照してください。

注記

リソースに対して許可されたアクセス許可レベルは、必ずしも最上位の permissions マッピングを使用してリソースに適用できるとは限りません。 permissions マッピングの有効な権限レベルについては、権限を参照してください

次の構文は、最上位の resources マッピングまたはターゲット内の resources マッピングで、リソースタイプごとに複数の権限を宣言する方法を示しています(省略記号は簡潔にするために省略されたコンテンツを示します)。

YAML
# ...
resources:
experiments:
<some-programmatic-identifier-for-this-experiment>:
# ...
permissions:
- user_name: <user-name> # Or:
group_name: <group-name> # Or:
service_principal_name: <service-principal-name>
level: <permission-level>
# ...
jobs:
<some-programmatic-identifier-for-this-job>:
# ...
permissions:
- user_name: <user-name> # Or:
group_name: <group-name> # Or:
service_principal_name: <service-principal-name>
level: <permission-level>
# ...
models:
<some-programmatic-identifier-for-this-model>:
# ...
permissions:
- user_name: <user-name> # Or:
group_name: <group-name> # Or:
service_principal_name: <service-principal-name>
level: <permission-level>
# ...
pipelines:
<some-programmatic-identifier-for-this-pipeline>:
# ...
permissions:
- user_name: <user-name> # Or:
group_name: <group-name-1> # Or:
service_principal_name: <service-principal-name>
level: <permission-level>
# ...

targets:
<some-programmatic-identifier-for-this-target>:
resources:
experiments:
<some-programmatic-identifier-for-this-experiment>:
# ...
permissions:
- user_name: <user-name> # Or:
group_name: <group-name> # Or:
service_principal_name: <service-principal-name>
level: <permission-level>
# ...
jobs:
<some-programmatic-identifier-for-this-job>:
# ...
permissions:
- user_name: <user-name> # Or:
group_name: <group-name> # Or:
service_principal_name: <service-principal-name>
level: <permission-level>
# ...
models:
<some-programmatic-identifier-for-this-model>:
# ...
permissions:
- user_name: <user-name> # Or:
group_name: <group-name> # Or:
service_principal_name: <service-principal-name>
level: <permission-level>
# ...
pipelines:
<some-programmatic-identifier-for-this-pipeline>:
# ...
permissions:
- user_name: <user-name> # Or:
group_name: <group-name> # Or:
service_principal_name: <service-principal-name>
level: <permission-level>
# ...
# ...

最上位の resources マッピングのリソースに対して宣言されている権限は、個々のターゲットの同じ resources マッピングに対して宣言されている権限と組み合わされます。 たとえば、最上位レベルとターゲットの両方で同じリソースに対して次の resources マッピングがあるとします(省略記号は簡潔にするために省略されたコンテンツを示します)。

YAML
bundle:
name: my-bundle

resources:
jobs:
my-job:
# ...
permissions:
- user_name: someone@example.com
level: CAN_VIEW
# ...

targets:
dev:
# ...
resources:
jobs:
my-job:
# ...
permissions:
- user_name: someone@example.com
level: CAN_RUN
# ...

この例で databricks bundle validate を実行すると、結果のグラフは次のようになります (省略記号は簡潔にするために省略されたコンテンツを示します)。

JSON
{
"...": "...",
"resources": {
"jobs": {
"my-job": {
"permissions": [
{
"level": "CAN_VIEW",
"user_name": "someone@example.com"
},
{
"level": "CAN_RUN",
"user_name": "someone@example.com"
}
],
"...": "..."
}
}
}
}