Поделиться через


Управление секретами

При доступе к внешним источникам данных через JDBC часто требуется проверка подлинности. Вместо ввода учетных данных непосредственно в записные книжки можно безопасно хранить учетные данные с помощью секретов Databricks и ссылаться на них в записных книжках и заданиях. Этот подход повышает безопасность и упрощает управление учетными данными. На этой странице представлен обзор секретов Databricks.

Заметка

Databricks рекомендует использовать каталог Unity для настройки доступа к данным в облачном хранилище. См. статью "Подключение к облачному хранилищу объектов" с помощью каталога Unity.

Обзор секретов

Чтобы настроить и использовать секреты, вы:

  1. Создать секретную область. Секретная область — это коллекция секретов, которая идентифицируется по имени.
  2. Добавьте секреты в область видимости
  3. Назначьте разрешения на секретную область.
  4. Ссылки на секреты в коде.

Для получения полного примера того, как использовать секреты в ваших рабочих процессах, см. Учебник: Создание и использование секрета Databricks. Чтобы использовать секрет в свойстве конфигурации Spark или переменной окружения, см. раздел Use a secret in a Spark configuration property or environment variable.

Предупреждение

Администраторы рабочей области, создатели секретов и пользователи, которым предоставлено разрешение, могут получать доступ к секретам Databricks и читать их. Хотя Databricks пытается изменить значения секретов в выходных данных записной книжки, невозможно полностью предотвратить просмотр содержимого секрета этими пользователями. Всегда следует тщательно назначать разрешения на доступ к секретам для защиты конфиденциальной информации.

Управление секретными областями

Секретная область — это коллекция секретов, которая идентифицируется по имени. Databricks рекомендует соотносить области секретов с ролями или приложениями, а не с отдельными людьми.

Существует два типа области действия секретов:

  • Azure Key Vault-backed: Вы можете ссылаться на секреты, хранящиеся в Azure Key Vault, используя секретные области, поддерживаемые Azure Key Vault. Область секретов на основе Azure Key Vault является интерфейсом только для чтения к Key Vault. Вы должны управлять секретами в секретных областях Azure, поддерживаемых Azure Key Vault.
  • Databricks-backed: Область секретов, поддерживаемая Databricks, хранится в зашифрованной базе данных, принадлежащей и управляемой Azure Databricks.

После создания области секрета можно назначить разрешения для предоставления пользователям доступа к областям секретов для чтения, записи и управления ими.

Создать область секретов с поддержкой Azure Key Vault

Этот раздел описывает, как создать область секретов с поддержкой Azure Key Vault, используя портал Azure и интерфейс рабочего пространства Azure Databricks. Вы также можете создать область секретов, поддерживаемую Azure Key Vault, используя Databricks CLI.

Требования

  • У вас должен быть экземпляр хранилища ключей Azure. Если у вас нет экземпляра хранилища ключей, следуйте инструкциям в Создание хранилища ключей с использованием портала Azure.
  • У вас должна быть роль Key Vault Contributor, Contributor, или Owner в экземпляре хранилища ключей Azure, который вы хотите использовать для поддержки области секрета.

Заметка

Для создания области секрета, поддерживаемой Azure Key Vault, требуется роль участника или владельца в экземпляре хранилища ключей Azure, даже если служба Azure Databricks ранее была предоставлена доступ к хранилищу ключей.

Если хранилище ключей существует в другом клиенте, отличном от рабочей области Azure Databricks, пользователь Azure AD, создающий область секрета, должен иметь разрешение на создание субъектов-служб в клиенте хранилища ключей. В противном случае возникает следующая ошибка:

Unable to grant read/list permission to Databricks service principal to KeyVault 'https://xxxxx.vault.azure.net/': Status code 403, {"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete the operation."},"requestId":"XXXXX","date":"YYYY-MM-DDTHH:MM:SS"}}

Настройте экземпляр хранилища ключей Azure для Azure Databricks

  1. Войдите на портал Azure, найдите и выберите экземпляр хранилища ключей Azure.

  2. В разделе Settings нажмите вкладку Access configuration.

  3. Установите модель разрешений на политику доступа к хранилищу.

    Заметка

    Создание роли области секретов, поддерживаемой Azure Key Vault, предоставляет Get и разрешение List идентификатору приложения службы Azure Databricks, используя политики доступа к хранилищу ключей. Модель разрешений управления доступом на основе ролей Azure не поддерживается в Azure Databricks.

  4. В разделе Параметры выберите Сеть.

  5. В брандмауэрах и виртуальных сетях установите Разрешить доступ из: на Разрешить общедоступный доступ из определённых виртуальных сетей и IP-адресов.

    В разделе Исключение установите флажок Разрешить доверенным службам Microsoft обходить этот брандмауэр.

    Заметка

    Вы также можете задать Разрешить доступ от: до Разрешить общедоступный доступ из всех сетей.

Создайте область секретов с поддержкой Azure Key Vault

  1. Перейдите к https://<databricks-instance>#secrets/createScope. Замените <databricks-instance> на URL-адрес рабочей области вашего развертывания Azure Databricks. Этот URL чувствителен к регистру. Например, scope в createScope должен использовать заглавную S.

    Создать область

  2. Введите имя секретной области. Названия области секретов нечувствительны к регистру.

  3. В Управление принципалом выберите Creator или Все пользователи рабочей области, чтобы указать, какие пользователи имеют разрешение MANAGE в секретной области.

    Разрешение MANAGE позволяет пользователям читать, записывать и предоставлять разрешения на область. Ваш аккаунт должен иметь тариф Premium, чтобы выбрать Creator.

  4. Введите DNS Name (например, https://databrickskv.vault.azure.net/) и Resource ID, например:

    /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/databricks-rg/providers/Microsoft.KeyVault/vaults/databricksKV
    

    Эти свойства доступны на вкладке Свойства > настроек в хранилище ключей Azure на вашем портале Azure.

  5. Нажмите кнопку Создать.

  6. Используйте команду Databricks CLIdatabricks secrets list-scopes для проверки того, что область была успешно создана.

Создать секретное пространство, поддерживаемое Databricks

В этом разделе описывается, как создать область секрета с помощью CLI Databricks (версия 0.205 и выше). Вы также можете использовать Secrets API.

Имена секретных областей:

  • Должен быть уникальным в рамках рабочего пространства.
  • Должен состоять из буквенно-цифровых символов, дефисов, подчеркиваний, @ и точек, и не превышать 128 символов.
  • Не чувствительны к регистру.

Названия секретных областей считаются не конфиденциальными и доступны для прочтения всеми пользователями в рабочем пространстве.

Чтобы создать область с использованием Databricks CLI, выполните следующие действия:

databricks secrets create-scope <scope-name>

По умолчанию области создаются с разрешением MANAGE для пользователя, который создал область. После того как вы создадите область секретов с поддержкой Databricks, вы сможете добавлять в неё секреты.

Список секретных областей

Чтобы получить список существующих областей в рабочей области с помощью интерфейса командной строки:

databricks secrets list-scopes

Вы также можете перечислить области секретов с помощью API секретов .

Удалить область секретов

Удаление области секретов приводит к удалению всех секретов и списков управления доступом, примененных к этой области. Чтобы удалить область с помощью интерфейса командной строки (CLI), выполните следующее:

databricks secrets delete-scope <scope-name>

Вы также можете удалить область конфиденциальности, используя Secrets API.

Управление секретами

Тайный ключ - это пара "ключ-значение", которая хранит конфиденциальную информацию, используя имя ключа, уникальное в пределах области тайны.

В этом разделе описывается, как создать область секрета с помощью CLI Databricks (версия 0.205 и выше). Вы также можете использовать Secrets API. Названия секретов нечувствительны к регистру.

Создать секрет

Метод создания секрета зависит от того, используете ли вы область с поддержкой Azure Key Vault или область с поддержкой Databricks.

Создать секрет в области, поддерживаемой Azure Key Vault

Чтобы создать секрет в Azure Key Vault, вы используете портал Azure или Azure Set Secret REST API. Для примера, см. Шаг 4: Добавьте клиентский секрет в Azure Key Vault.

Создайте секрет в области, поддерживаемой Databricks.

В этом разделе описывается, как создать секрет с помощью Интерфейса командной строки Databricks (версия 0.205 и более поздней) или в записной книжке с помощью пакета Databricks SDK для Python. Вы также можете использовать Secrets API. Названия секретов нечувствительны к регистру.

Databricks CLI (интерфейс командной строки)

При создании секрета в области Databricks, вы можете задать значение секрета одним из трех способов:

  • Задайте значение в виде строки, используя флаг –string-value.
  • Введите секрет, когда будет предложено сделать это интерактивно (секреты в одну строку).
  • Передайте секрет через стандартный ввод (многострочные секреты).

Рассмотрим пример.

databricks secrets put-secret --json '{
  "scope": "<scope-name>",
  "key": "<key-name>",
  "string_value": "<secret>"
}'

Если вы создаете многострочный секрет, вы можете передать этот секрет, используя стандартный ввод. Рассмотрим пример.

(cat << EOF
this
is
a
multi
line
secret
EOF
) | databricks secrets put-secret <scope-name> <key-name>

Пакет SDK Databricks для Python

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

w.secrets.put_secret("<secret_scope>","<key-name>",string_value ="<secret>")

Прочитайте секрет

Этот раздел объясняет, как считать секрет с помощью Databricks CLI (версия 0.205 и выше) или в блокноте с использованием утилиты для работы с секретами (dbutils.secrets).

Databricks CLI (интерфейс командной строки)

Чтобы прочитать значение секрета, используя Databricks CLI, нужно декодировать значение, закодированное в base64. Вы можете использовать jq для извлечения значения и base --decode декодирования:

databricks secrets get-secret <scope-name> <key-name> | jq -r .value | base64 --decode

Утилита Secrets (dbutils.secrets)

password = dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")

Список секретов

Перечисление секретов в заданной области:

databricks secrets list-secrets <scope-name>

В ответе отображаются метаданные о секретах, таких как имена ключей секретов. С помощью служебной программы секретов (dbutils.secrets) в записной книжке или задании можно перечислить эти метаданные. Рассмотрим пример.

dbutils.secrets.list('my-scope')

Удалить секрет

Чтобы удалить секретный ключ из области с использованием командной строки Databricks:

databricks secrets delete-secret <scope-name> <key-name>

Вы также можете использовать Secrets API.

Чтобы удалить секрет из области, поддерживаемой Azure Key Vault, используйте REST API Azure SetSecret или интерфейс Azure portal UI.

Управление разрешениями области секретов

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

Заметка

Секретные списки контроля доступа находятся на уровне области. Если вы используете диапазоны, поддерживаемые Azure Key Vault, пользователи, которым предоставлен доступ к диапазону, получают доступ ко всем секретам в Azure Key Vault. Чтобы ограничить доступ, используйте отдельные экземпляры хранилища ключей Azure.

В этом разделе описано, как управлять доступом к секретам с помощью Databricks CLI (версия 0.205 и выше). Вы также можете использовать Secrets API. Для уровней секретного доступа см. Secret ACLs

Предоставление пользователям разрешений на область секрета

Чтобы предоставить пользователю разрешения на секретную область с помощью CLI Databricks:

databricks secrets put-acl <scope-name> <principal> <permission>

Отправка PUT-запроса для субъекта, у которого уже есть примененное разрешение, перезаписывает существующий уровень разрешения.

Поле principal указывает на существующий объект безопасности Azure Databricks. Пользователь указывается с использованием его адреса электронной почты, служебный объект — с помощью его значения applicationId, а группа — с использованием имени группы. Для получения дополнительной информации см. Principal.

Просмотр разрешений области секретов

Чтобы просмотреть все разрешения на доступ к секретной области для определенной секретной области:

databricks secrets list-acls <scope-name>

Чтобы получить разрешения на доступ к секретной области, примененные к субъекту для данной секретной области:

databricks secrets get-acl <scope-name> <principal>

Если для указанного субъекта и области нет ACL, то этот запрос завершится неудачей.

Удаление разрешения на диапазон секретов

Чтобы удалить разрешение на доступ к области секретов, применённое к объекту для данной области секретов:

databricks secrets delete-acl <scope-name> <principal>

Секретная редакция

Хранение учетных данных в виде секретов Azure Databricks упрощает защиту учетных данных при запуске записных книжек и заданий. Однако легко случайно вывести секрет на стандартные буферы вывода или отобразить значение при присваивании переменной.

Чтобы предотвратить это, Azure Databricks скрывает все значения секретов, которые считываются с помощью dbutils.secrets.get() и упоминаются в свойстве конфигурации Spark. При отображении секретные значения заменяются на [REDACTED].

Например, если задать для переменной значение секрета с помощью dbutils.secrets.get(), а затем распечатать эту переменную, эта переменная заменяется [REDACTED].

Предупреждение

Секретное редактирование вывода данных ячейки блокнота применяется только к литералам. Функциональность редактирования секретов не предотвращает преднамеренные и произвольные преобразования секретного текста. Чтобы обеспечить надлежащий контроль секретов, следует использовать списки управления доступом , чтобы ограничить разрешения для выполнения команд. Это предотвращает несанкционированный доступ к общим контекстам записной книжки.