Я пытаюсь запустить записную книжку на Azure Databricks, используя API REST Databricks. У меня есть сценарий Python, который запускает выполнение записной книжки на основе определенного пути с аутентификацией, обрабатываемой субъектом службы (SPN).
Я предоставил SPN доступ к соответствующим репозиториям и кластеру, чтобы убедиться, что у него есть необходимые разрешения для запуска записной книжки. Однако, когда я пытаюсь запустить блокнот, я сталкиваюсь со следующим
Ошибка почтальона:
{
"error_code": "PERMISSION_DENIED",
"message": "User 'my-spn' does not have Manage Run or Owner or Admin permissions on job 246372968680205"
}
Когда я использую Python для написания кода для запуска блокнота, я получаю следующую ошибку:
"error":"run failed with error message\n Unable to access the notebook \"/Repos/test\". Either it does not exist, or the identity used to run this job, Databricks-POC, lacks the required permissions."
Используемые API: API создания заданий:
Полезная нагрузка:
{
"format": "MULTI_TASK",
"max_concurrent_runs": 1,
"name": "TEST-1",
"tasks": [
{
"notebook_task": {
"notebook_path": "/Workspace/Repos/test"
},
"task_key": "Test_1",
"existing_cluster_id" : "vattkymf"
}
],
"webhook_notifications": {}
}
Этот API создает задание и возвращает идентификатор задания.
{
"job_id": 38022546101247
}
API выполнения заданий:
Полезная нагрузка:
{
"job_id": 38022546101247
}
Все API используют токен носителя, созданный с помощью SPN.
Проблема:
Несмотря на то, что SPN предоставлен доступ к кластеру и репозиторию, проблема с разрешениями для самого задания все еще существует. Несмотря на двойную проверку всех разрешений и путей, проблема остается.
Я проверил, что SPN имеет доступ к кластеру, репозиториям и конкретному заданию, а также убедился, что путь к записной книжке правильный. Однако ошибка предполагает, что имя участника-службы не имеет достаточных разрешений для самого задания. Дайте мне знать, если потребуются какие-то другие подробности.
Примечание. Я удалил некоторые конфиденциальные данные.
Ваш первый вызов API для создания задания прошел успешно. Но вы не назначили своему SPN разрешения на выполнение этого нового задания.
Если вы посмотрите документацию API , вы увидите объект access_control_list, который представляет собой массив.
Помимо прочего, он имеет имя_принципа_службы и уровень_разрешений, которые могут быть CAN_MANAGE | IS_OWNER | CAN_MANAGE_RUN | CAN_VIEW, что, похоже, является именно той ошибкой, которую вы получаете.
При создании задания попробуйте также добавить разрешения в полезные данные.
"access_control_list":["user_name":"my-spn","group_name":"","service_principal_name":"your_app_id","permission_level":"CAN_MANAGE_RUN"]
Кроме того, «формат» в API версии 2.1 устарел, поэтому его можно удалить из полезных данных.
К вашему сведению: я использую SPN для создания токена-носителя, а затем использую этот токен-носитель для запуска и отправки заданий.
Я попытался добавить вышеописанное к своему вызову API, но все равно сталкиваюсь с той же проблемой: сбой при запуске с сообщением об ошибке. Невозможно получить доступ к записной книжке "/Workspace/Repos/test.sql". Либо его не существует, либо удостоверению, используемому для запуска этого задания, my-spn (id), не хватает необходимых разрешений.
Привет, я думаю, проблема решена, я запускал файл Python как блокнот.
является ли имя группы обязательным, или я могу просто указать этот "access_control_list": [ { "service_principal_name": "my-spn", "permission_level": "CAN_MANAGE" }