Ошибка «Отказано в разрешении» при запуске Azure Databricks Notebook через REST API с использованием субъекта-службы

Я пытаюсь запустить записную книжку на 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 создания заданий:

URL: https://myurl.azuredatabricks.net/api/2.1/jobs/create

Полезная нагрузка:

{
    "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 выполнения заданий:

URL: https://myurl.azuredatabricks.net/api/2.1/jobs/run-now

Полезная нагрузка:

{
    "job_id": 38022546101247
}

Все API используют токен носителя, созданный с помощью SPN.

Проблема:

Несмотря на то, что SPN предоставлен доступ к кластеру и репозиторию, проблема с разрешениями для самого задания все еще существует. Несмотря на двойную проверку всех разрешений и путей, проблема остается.

Я проверил, что SPN имеет доступ к кластеру, репозиториям и конкретному заданию, а также убедился, что путь к записной книжке правильный. Однако ошибка предполагает, что имя участника-службы не имеет достаточных разрешений для самого задания. Дайте мне знать, если потребуются какие-то другие подробности.

Примечание. Я удалил некоторые конфиденциальные данные.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш первый вызов 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 устарел, поэтому его можно удалить из полезных данных.

является ли имя группы обязательным, или я могу просто указать этот "access_control_list": [ { "service_principal_name": "my-spn", "permission_level": "CAN_MANAGE" }

Abhishek Singh 20.08.2024 14:21

К вашему сведению: я использую SPN для создания токена-носителя, а затем использую этот токен-носитель для запуска и отправки заданий.

Abhishek Singh 20.08.2024 14:21

Я попытался добавить вышеописанное к своему вызову API, но все равно сталкиваюсь с той же проблемой: сбой при запуске с сообщением об ошибке. Невозможно получить доступ к записной книжке "/Workspace/Repos/test.sql". Либо его не существует, либо удостоверению, используемому для запуска этого задания, my-spn (id), не хватает необходимых разрешений.

Abhishek Singh 20.08.2024 14:28

Привет, я думаю, проблема решена, я запускал файл Python как блокнот.

Abhishek Singh 20.08.2024 15:06

Другие вопросы по теме