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

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

この記事では、Databricks Asset Bundles のリソースのアクセス許可を設定する方法について説明します。詳細については、 リソース バンドルでサポートされているリソースについては、「 Databricks Asset Bundles リソース」を参照してください。

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

注記

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

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

トップレベルのpermissionsマッピングを使用して、resourcesで定義されているすべてのサポートされているリソースに適用する権限を定義できます。Databricks では、Databricks Asset Bundles リソースのアクセス許可を管理するために、このアプローチをお勧めします。

権限は、 user_namegroup_name、または service_principal_nameに許可される権限レベルを定義します。許可される最上位の権限レベルは、 CAN_VIEWCAN_MANAGE、および CAN_RUNです。詳細については、 情報 トップレベルの permissions マッピングについては、「 権限」を参照してください。

次の例では、 dev ターゲットの最上位のアクセス許可を設定します。ユーザーsomeone@example.comには、my-jobに対するCAN_RUN権限があります。

YAML
bundle:
name: my-bundle

resources:
jobs:
my-job:
# ...

targets:
dev:
# ...
permissions:
- user_name: someone@example.com
level: CAN_RUN

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

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

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

  • user_namegroup_name、またはservice_principal_nameのいずれかを、それぞれユーザー、グループ、またはサービスプリンシパルの名前に設定します。
  • levelを権限レベルの名前に設定します。各リソースに許可される権限レベルは次のとおりです。
important

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

次の構文は、最上位の resources マッピングとターゲット内の resources マッピングでリソースの種類 (この例ではパイプライン) のアクセス許可を宣言する方法を示しています。

YAML
# ...
resources:
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>
# ...
YAML
targets:
<some-programmatic-identifier-for-this-target>:
resources:
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:
- group_name: test-group
level: CAN_VIEW
# ...

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

この例で databricks bundle validate を実行すると、結果のグラフは次のようになります。

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

権限の優先順位

バンドル構成の複数の場所で permissions を定義している場合、バンドルで指定されたリソース、ワークスペースディレクトリ、およびファイルに付与される権限は、次の順序になります。

  1. ターゲット・デプロイメントのリソースに対して定義されている権限
  2. ターゲットデプロイに対して定義されたアクセス許可
  3. バンドル内のリソースに対して定義されているアクセス許可
  4. バンドルの最上位の権限で定義されている権限

たとえば、次の構成では、グループ ID test-groupdev ターゲットのジョブに対して CAN_MANAGE のアクセス許可を持ちますが、prod ターゲットのジョブに対するアクセス許可はCAN_MANAGE_RUNます。

YAML
bundle:
name: my-bundle

permissions:
- group_name: test-group
level: CAN_VIEW

resources:
jobs:
my-job:
# ...
permissions:
- group_name: test-group
level: CAN_MANAGE_RUN
# ...

targets:
dev:
# ...
resources:
jobs:
my-job:
# ...
permissions:
- group_name: test-group
level: CAN_MANAGE
# ...
prod:
# ...
resources:
jobs:
my-job:
# ...