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


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

При доступе к внешним источникам данных через 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.

Требования

Примечание

Creating an Azure Key Vault-backed secret scope requires the Contributor or Owner role on the Azure key vault instance even if the Azure Databricks service has previously been granted access to the key vault.

Если ключевое хранилище находится в ином клиенте, чем рабочее пространство 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. Установите модель разрешений на политику доступа к хранилищу.

    Note

    Creating an Azure Key Vault-backed secret scope role grants the Get and List permissions to the application ID for the Azure Databricks service using key vault access policies. Модель разрешений управления доступом на основе ролей Azure не поддерживается в Azure Databricks.

  4. Under Settings, select Networking.

  5. In Firewalls and virtual networks set Allow access from: to Allow public access from specific virtual networks and IP addresses.

    Under Exception, check Allow trusted Microsoft services to bypass this firewall.

    Примечание

    You can also set Allow access from: to Allow public access from all networks.

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

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

    Create scope

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

  3. In Manage Principal select Creator or All workspace users to specify which users have the MANAGE permission on the secret scope.

    Разрешение 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. Click Create.

  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.

Manage secrets

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

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

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

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

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

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

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

This section describes how to create a secret using the Databricks CLI (version 0.205 and above) or in a notebook using the Databricks SDK for Python. Вы также можете использовать Secrets API. Названия секретов нечувствительны к регистру.

Databricks CLI

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

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

For example:

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

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

(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. You can use jq to extract the value and base --decode to decode it:

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) в записной книжке или задании можно перечислить эти метаданные. For example:

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

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

To delete a secret from a scope with the Databricks CLI:

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

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

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

Manage secret scope permissions

По умолчанию, пользователь, который создает секретные области, получает разрешение на управление. This allows the scope creator to read secrets in the scope, write secrets to the scope, and manage permissions on the scope.

Примечание

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

This section describes how to manage secret access control using the Databricks CLI (version 0.205 and above). Вы также можете использовать 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>

To get the secret scope permissions applied to a principal for a given secret scope:

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

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

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

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

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

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

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

Чтобы предотвратить это, Azure Databricks скрывает все секретные значения, которые читаются с помощью dbutils.secrets.get(). When displayed in notebook cell output, the secret values are replaced with [REDACTED].

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

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

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