限制 Databricks Workspace 中非管理员用户的权限
Restrict rights of Non Admin Users within Databricks Workspace
我们目前的设置中,数据探索和生产作业(来自生产工作流的 运行)位于单个数据工作区中。
生产作业都指的是 Databricks 工作区内特定文件夹中的笔记本,我们对其访问权限有限制,并且此文件夹中的笔记本是使用 CI/CD 进程部署的。 Databricks 作业也是从相同的 CI/CD 管道创建的。基本上,作业以 json 格式描述,连接到数据湖(存储数据的地方)的身份验证信息是(动态)创建的集群信息的一部分。
这些作业的权限设置也是同一 CI/CD 过程的一部分,该过程设置这些作业的权限,以便非管理员用户只有“查看”权限。
现在,一切都很好。
现在,“建议”非用户通过管道创建工作,但如果他们愿意,他们可以很好地以临时方式自己创建工作,并且没有办法阻止他们这样做。 自己创建工作使他们成为所有者。结果,发生的事情是:他们可以“潜在地”复制相同的 spark 配置,该配置对数据湖中的策划区域具有“写入”权限,这是一种安全威胁。我们在数据湖中定义了 ACL,因此非管理员只能对“沙盒”文件系统进行写访问。
但是因为他们可以查看生产作业的 spark 配置(他们可以查看),所以他们可以很好地复制相同的配置作为集群配置的一部分,用于临时他们可以“潜在创造”的工作。
我现在决定为生产作业提供一个单独的工作区,以便实现职责分离。早些时候我们有这个,但后来出现在 ML Flow 中,过去,我们无法共享 MLFLow Registry,但现在我们可以,这很棒。
但问题仍然是相同的用户仍然需要访问这个新工作区,因为我们希望他们自己监控作业。此外,他们需要访问权限以从 CI/CD 管道获取已部署作业的“job_id”,以便他们可以使用它包含在 Airflow 管道中(从我们编排作业管道的地方)。
所以,基本上回到了某种“方形”(尽管我仍然想要一个单独的工作区来处理生产作业)。
我看过这个,但这显然没有足够的选票(我仍然赞成这个):here
只是举个例子,更清楚地说明我们的回购中如何定义作业以及如何定义 spark 配置,这些最终通过我们的 CI/CD 流程推出(创建时可能会被复制)非管理员用户的临时作业)-
{
"name": "ClientStateVector",
"new_cluster": {
"spark_version": "7.3.x-scala2.12",
"node_type_id": "Standard_F32s_v2",
"driver_node_type_id": "Standard_DS4_v2",
"num_workers": 3,
"spark_conf": {
"spark.hadoop.fs.azure.account.oauth2.client.endpoint.datalakename.dfs.core.windows.net": "https://login.microsoftonline.com/tenantid/oauth2/token",
"spark.databricks.delta.preview.enabled": "true",
"spark.hadoop.fs.azure.account.auth.type.datalakename.dfs.core.windows.net": "OAuth",
"spark.hadoop.fs.azure.account.oauth.provider.type.datalakename.dfs.core.windows.net": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
"spark.hadoop.fs.azure.account.oauth2.client.secret.datalakename.dfs.core.windows.net": "{{secrets/DatalakeKeySec/clientSecret}}",
"spark.hadoop.fs.azure.account.oauth2.client.id.datalakename.dfs.core.windows.net": "{{secrets/DatalakeKeySec/clientID}}"
}
},
"libraries": [
{ "whl": "dbfs:/artifacts/client-state-vector/1.0.47/client_state_vector-1.0.0-py3-none-any.whl" }
],
"notebook_task": {
"notebook_path": "/JobNotebooks/DataScienceNotebooks/ClientStateVector/bootstrap"
}
}
允许非管理员查看权限但仍然确保他们无法使用相同的 spark 配置创建作业或根本无法创建作业的最佳方法是什么?
我知道使用 webhook 是有可能的,但肯定它必须更简单。还是我 missing/unaware 是什么东西?
好的,在过去的几天里,我发现作业总是在创建者/所有者的凭据上运行。因此,即使有人复制配置,如果他们无权访问这些秘密范围,他们创建的相应或潜在工作也会失败。它会失败,即使它是由管理员或管理员令牌触发的。
因此,虽然限制创造就业机会会很好,但如果上述说法成立,则可以避免无意访问。
我们目前的设置中,数据探索和生产作业(来自生产工作流的 运行)位于单个数据工作区中。
生产作业都指的是 Databricks 工作区内特定文件夹中的笔记本,我们对其访问权限有限制,并且此文件夹中的笔记本是使用 CI/CD 进程部署的。 Databricks 作业也是从相同的 CI/CD 管道创建的。基本上,作业以 json 格式描述,连接到数据湖(存储数据的地方)的身份验证信息是(动态)创建的集群信息的一部分。
这些作业的权限设置也是同一 CI/CD 过程的一部分,该过程设置这些作业的权限,以便非管理员用户只有“查看”权限。
现在,一切都很好。
现在,“建议”非用户通过管道创建工作,但如果他们愿意,他们可以很好地以临时方式自己创建工作,并且没有办法阻止他们这样做。 自己创建工作使他们成为所有者。结果,发生的事情是:他们可以“潜在地”复制相同的 spark 配置,该配置对数据湖中的策划区域具有“写入”权限,这是一种安全威胁。我们在数据湖中定义了 ACL,因此非管理员只能对“沙盒”文件系统进行写访问。
但是因为他们可以查看生产作业的 spark 配置(他们可以查看),所以他们可以很好地复制相同的配置作为集群配置的一部分,用于临时他们可以“潜在创造”的工作。
我现在决定为生产作业提供一个单独的工作区,以便实现职责分离。早些时候我们有这个,但后来出现在 ML Flow 中,过去,我们无法共享 MLFLow Registry,但现在我们可以,这很棒。
但问题仍然是相同的用户仍然需要访问这个新工作区,因为我们希望他们自己监控作业。此外,他们需要访问权限以从 CI/CD 管道获取已部署作业的“job_id”,以便他们可以使用它包含在 Airflow 管道中(从我们编排作业管道的地方)。
所以,基本上回到了某种“方形”(尽管我仍然想要一个单独的工作区来处理生产作业)。
我看过这个,但这显然没有足够的选票(我仍然赞成这个):here
只是举个例子,更清楚地说明我们的回购中如何定义作业以及如何定义 spark 配置,这些最终通过我们的 CI/CD 流程推出(创建时可能会被复制)非管理员用户的临时作业)-
{
"name": "ClientStateVector",
"new_cluster": {
"spark_version": "7.3.x-scala2.12",
"node_type_id": "Standard_F32s_v2",
"driver_node_type_id": "Standard_DS4_v2",
"num_workers": 3,
"spark_conf": {
"spark.hadoop.fs.azure.account.oauth2.client.endpoint.datalakename.dfs.core.windows.net": "https://login.microsoftonline.com/tenantid/oauth2/token",
"spark.databricks.delta.preview.enabled": "true",
"spark.hadoop.fs.azure.account.auth.type.datalakename.dfs.core.windows.net": "OAuth",
"spark.hadoop.fs.azure.account.oauth.provider.type.datalakename.dfs.core.windows.net": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
"spark.hadoop.fs.azure.account.oauth2.client.secret.datalakename.dfs.core.windows.net": "{{secrets/DatalakeKeySec/clientSecret}}",
"spark.hadoop.fs.azure.account.oauth2.client.id.datalakename.dfs.core.windows.net": "{{secrets/DatalakeKeySec/clientID}}"
}
},
"libraries": [
{ "whl": "dbfs:/artifacts/client-state-vector/1.0.47/client_state_vector-1.0.0-py3-none-any.whl" }
],
"notebook_task": {
"notebook_path": "/JobNotebooks/DataScienceNotebooks/ClientStateVector/bootstrap"
}
}
允许非管理员查看权限但仍然确保他们无法使用相同的 spark 配置创建作业或根本无法创建作业的最佳方法是什么?
我知道使用 webhook 是有可能的,但肯定它必须更简单。还是我 missing/unaware 是什么东西?
好的,在过去的几天里,我发现作业总是在创建者/所有者的凭据上运行。因此,即使有人复制配置,如果他们无权访问这些秘密范围,他们创建的相应或潜在工作也会失败。它会失败,即使它是由管理员或管理员令牌触发的。
因此,虽然限制创造就业机会会很好,但如果上述说法成立,则可以避免无意访问。