如何部署具有指定权限的Databricks集群?

时间:2019-09-16 11:40:48

标签: azure databricks azure-databricks

我正在使用powershell脚本部署一些Databricks集群,该脚本将输入的json文件与预定义的集群模板一起使用,例如:

{
    "cluster_name": "test1",
    "max_retries": 1,
    "spark_version": "5.3.x-scala2.11",
    "timeout_seconds": 3600,
    "autotermination_minutes": 60,
    "node_type_id": "Standard_DS3_v2",
    "driver_node_type_id": "Standard_DS3_v2",
    "spark_env_vars": {
      "PYSPARK_PYTHON": "/databricks/python3/bin/python3"
    },
    "spark_conf": {
      "spark.databricks.delta.preview.enabled": "true"
    },
    "autoscale": {
      "max_workers": 4,
      "min_workers": 2
    }
  }  

但是,我想给他们预分配一些数据块许可组。我可以使用这样的集群模板吗?我找不到任何可以指定这些组的属性。

我可以转到具有手动分配权限的集群之一,并将其​​导出为json。但是,在这种情况下,模板中也缺少这些内容。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

接下来的解决方法是如此无用,如果我知道另一种方法,我不建议任何人诉诸此方法。解决方法是创建一个Web会话,登录,获取CSRF令牌,然后向/acl/cluster/<cluster_id>发出POST请求,并提供一个user_id到所请求权限的映射。这是使用Python为单个用户(或组)在单个群集上设置所有权限的示例:

import json

import requests

DB_HOST = "db-cluster"
DB_USER = "user"
DB_PASS = "pass"

def change_acl(user_id, cluster_id):
    host = DB_HOST
    username = DB_USER
    password = DB_PASS
    session = requests.Session()
    login_request = session.post("https://{}/j_security_check".format(host),
                                 data={"j_username": username, "j_password": password})
    if login_request.status_code >= 400:
        raise Exception("login failed : {}".format(login_request.content))

    config_request = session.get("https://{}/config".format(host))

    if config_request.status_code >= 400:
        raise Exception("config request failed : {}".format(config_request.content))

    config = json.loads(config_request.content)
    csrf_token = config['csrfToken']

    acl_request = session.post(
        "https://{}/acl/cluster/{}".format(host, cluster_id),
        headers={
            "X-CSRF-Token": csrf_token,
            "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
        },
        data=json.dumps({
            "type": "set",
            'permissions': {user_id: ["*"]}
        })
    )
    if acl_request.status_code >= 400:
        raise Exception("acl request failed : {}".format(acl_request.content))

如果您找到更好的方法,请告诉我。最糟糕的是,您必须使用用户名和密码而不是承载令牌登录。第二坏的事情是,这可能会在没有任何通知的情况下中断。

我希望开发人员会在不久的将来找到时间来实现此功能。

答案 1 :(得分:0)

注意:使用Clusters API创建集群时,您无法指定权限。您应该使用“ 组API ”或“ 管理控制台

创建集群的请求结构如下:

enter image description here

可以将特权授予通过groups APIAdmin Console创建的用户或组。每个用户通过Databricks中的用户名(通常映射到其电子邮件地址)唯一标识。在Databricks中是工作区管理员的用户属于特殊的管理员角色,他们还可以访问未获得其明确访问权限的对象。

希望这会有所帮助。


如果这回答了您的查询,请同时单击“标记为答案”和“上投票”。而且,如果您还有其他疑问,请告诉我们。