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


Управление внешними расположениями

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

Примечание.

Databricks рекомендует управлять доступом к файлам с помощью томов. См. статью Что такое тома каталога Unity?.

Описание внешнего расположения

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

Обозреватель каталогов

  1. На боковой панели щелкните значок Каталог.
  2. На странице быстрого доступа нажмите кнопку "Внешние данные>", чтобы перейти на вкладку "Внешние расположения".
  3. Щелкните имя внешнего расположения, чтобы просмотреть его свойства.

SQL

Выполните следующую команду в записной книжке или в SQL-редакторе Databricks. Замените <location-name> на имя внешнего расположения.

DESCRIBE EXTERNAL LOCATION <location-name>;

Отображение грантов во внешнем расположении

Чтобы посмотреть разрешения для внешнего расположения, используйте следующую команду. При необходимости можно отфильтровать результаты, чтобы посмотреть только разрешения для указанного субъекта.

SHOW GRANTS [<principal>] ON EXTERNAL LOCATION <location-name>;

Замените значения по умолчанию:

  • <location-name>: имя внешнего расположения, которое разрешает чтение и запись в контейнер хранилища или контейнер в клиенте облака.
  • <principal>: адрес электронной почты пользователя на уровне учетной записи или имя группы на уровне учетных записей.

Примечание.

Если группа или имя пользователя содержит пробел или символ @, используйте обратные кавычки (` `) вокруг них, а не апострофы.

Предоставление разрешений во внешнем расположении

В этом разделе описывается предоставление и отмена разрешений на внешнее расположение с помощью обозревателя каталогов и команд SQL в записной книжке или SQL-запросе. Дополнительные сведения об использовании интерфейса командной строки Databricks или Terraform см . в документации по Databricks Terraform и о том, что такое Интерфейс командной строки Databricks?.

Вы можете предоставить следующие разрешения во внешнем расположении:

  • CREATE EXTERNAL TABLE
  • CREATE EXTERNAL VOLUME
  • CREATE MANAGED STORAGE

необходимые разрешения: привилегия CREATE EXTERNAL LOCATION как в метахранилище, так и на учетные данные хранения, упомянутые во внешнем местоположении, или привилегия MANAGE на внешнее местоположение. Администраторы хранилища метаданных имеют CREATE EXTERNAL LOCATION хранилище метаданных по умолчанию.

Чтобы предоставить разрешение на использование внешнего расположения, выполните следующие действия.

Обозреватель каталогов

  1. На боковой панели щелкните значок Каталог.
  2. На странице быстрого доступа нажмите кнопку "Внешние данные>", чтобы перейти на вкладку "Внешние расположения".
  3. Щелкните имя внешнего расположения, чтобы открыть его свойства.
  4. Щелкните Разрешения.
  5. Чтобы предоставить разрешение пользователям или группам, выберите каждую учетную запись, а затем щелкните Grant.
  6. Чтобы отозвать разрешения у пользователей или групп, выберите каждый идентификатор, затем нажмите Отозвать.

SQL

Выполните следующую команду SQL в редакторе запросов записной книжки или SQL. В этом примере предоставляется возможность создания внешней таблицы, ссылающейся на внешнее расположение:

GRANT CREATE EXTERNAL TABLE ON EXTERNAL LOCATION <location-name> TO <principal>;

Замените значения по умолчанию:

  • <location-name>: имя внешнего расположения, которое разрешает чтение и запись в контейнер хранилища или контейнер в клиенте облака.
  • <principal>: адрес электронной почты пользователя на уровне учетной записи или имя группы на уровне учетных записей.

Примечание.

Если группа или имя пользователя содержит пробел или @ символ, используйте обратные галочки вокруг него (а не апострофы). Например , финансовая команда .

Изменение владельца внешнего расположения

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

Требуемые разрешения: владелец внешней локации или пользователь с привилегией MANAGE.

Замените значения по умолчанию:

  • <location-name>: имя учетной записи.
  • <principal>: адрес электронной почты пользователя на уровне учетной записи или имя группы на уровне учетных записей.
ALTER EXTERNAL LOCATION <location-name> OWNER TO <principal>

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

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

Создание внешних расположений только для чтения:

  • Запрещает пользователям записывать файлы в эти внешние расположения независимо от разрешений на запись, предоставленных управляемым удостоверением Azure, которое лежит в основе учетных данных хранения, и независимо от разрешений каталога Unity, предоставленных в этом внешнем расположении.
  • Запрещает пользователям создавать управляемые таблицы или тома в этих внешних расположениях.
  • Блокирует создание каталога при использовании внешних расположений, доступных только для чтения.
  • Позволяет системе правильно проверять внешнее расположение во время создания.

Внешние расположения можно пометить как доступные только для чтения при их создании.

Обозреватель каталогов также можно использовать для изменения состояния только для чтения после создания внешнего расположения:

  1. На боковой панели щелкните значок Каталог.
  2. На странице быстрого доступа нажмите кнопку "Внешние данные>", чтобы перейти на вкладку "Внешние расположения".
  3. Выберите внешнее расположение, щелкните значок меню «Кебаб» рядом с кнопкой «Проверить подключение» и выберите «Изменить».
  4. В диалоговом окне редактирования нажмите кнопку "Дополнительные параметры " и выберите параметр "Ограничить только для чтения".
  5. Нажмите кнопку "Обновить".

Настройте алгоритм шифрования на внешней локации (только AWS S3)

AWS поддерживает шифрование на стороне сервера (SSE) с управляемыми ключами Amazon S3 (SSE-S3) или ключами AWS KMS (SSE-KMS) для защиты данных в S3. Если в контейнере S3 требуется шифрование SSE, можно настроить алгоритм шифрования во внешнем расположении, чтобы разрешить внешним таблицам и томам в каталоге Unity доступ к данным в контейнере S3. SSE не поддерживается с внешними таблицами, общими через Delta Sharing. Дополнительные сведения см. в разделе "Настройка шифрования для S3 с помощью KMS".

  1. На боковой панели щелкните значок Каталог.

  2. В верхней части области каталога щелкните значок шестеренки и выберите внешние расположения.

  3. Выберите внешнее расположение. Внешняя локация должна использовать роль IAM для получения учетных данных хранения.

  4. Щелкните значок Kebab-меню рядом с кнопкой "Проверить подключение" и выберите "Изменить".

  5. В диалоговом окне редактирования нажмите кнопку "Дополнительные параметры".

  6. В разделе "Алгоритм шифрования " выберите SSE-SE или SSE-KMS в зависимости от ключа шифрования.

    Для SSE-KMS в разделе Ключ KMS шифрования вставьте ARN ключа KMS, на который ссылаются клиенты при доступе к расположению S3.

  7. Нажмите кнопку "Обновить".

Если вы хотите получать уведомления об изменениях, отправляемых поставщиком облачных услуг, активация событий файлов для внешней локации имеет следующие преимущества:

Перед тем как начать

Если вы хотите, чтобы Azure Databricks настраивал очереди Azure Data Lake Storage или очереди SQS от вашего имени, ваше внешнее местоположение должно ссылаться на учетные данные хранилища, которые предоставляют соответствующие разрешения для этого. Дополнительные инструкции см. на следующем шаге.

Если вы хотите создать собственную очередь хранения Azure Data Lake, удостоверение, связанное с учетными данными хранилища, должно иметь следующие разрешения на эти очереди хранения Azure Data Lake.

  • Специалист по данным очереди хранения

Если вы хотите создать собственные очереди SQS, идентификация, предоставляемая учетными данными хранилища, должна иметь следующие разрешения для этих очередей SQS:

  • sqs:ReceiveMessage
  • sqs:DeleteMessage
  • sqs:PurgeQueue

Шаг 1. Убедитесь, что Azure Databricks имеет доступ к событиям файлов в Azure Data Lake Storage или AWS S3

Прежде чем включить события файлов для защищаемого объекта внешнего расположения, необходимо убедиться, что учетная запись Azure Data Lake Storage или AWS S3 настроена, чтобы предоставить Azure Databricks доступ к событиям файла, которые он выдает. Если вы хотите, чтобы Azure Databricks настраивал события файлов в Azure Data Lake Storage или AWS S3, необходимо также убедиться, что Azure Databricks имеет правильный доступ.

Назначение этого доступа — это рекомендуемый шаг при настройке учетных данных хранилища.

Для контейнеров Azure Data Lake Storage

Чтобы убедиться, что управляемое удостоверение, которое предоставляет доступ к внешнему расположению, настроено правильно:

  1. Получите идентификатор управляемого удостоверения Azure.

    1. На боковой панели щелкните значок Каталог.

    2. На странице быстрого доступа нажмите кнопку "Внешние данные>", чтобы перейти на вкладку "Внешние расположения".

    3. Выберите внешнее расположение.

    4. На вкладке [Обзор] выберите имя учетной записи.

    5. На вкладке "Обзор учетных данных хранилища" скопируйте идентификатор соединителя или идентификатор управляемого удостоверения, назначаемого пользователем.

      Вы будете использовать это на следующем шаге.

  2. Войдите в учетную запись Azure Data Lake Storage.

  3. Перейдите к элементу управления доступом (IAM) и нажмите кнопку "Проверить доступ ".

  4. В Управляемом удостоверении выберите управляемое удостоверение, назначенное пользователем или Access Connector for Azure Databricks, в зависимости от типа удостоверения.

  5. Найдите управляемое удостоверение, которое вы скопировали на шаге 1.

  6. Проверьте, что у управляемого удостоверения есть следующие роли:

    • Соавтор учетной записи хранения
    • Сотрудник по работе с BLOB-данными хранилища
    • Соавтор EventGrid EventSubscription
    • Участник данных очереди хранилища: требуется только в том случае, если вы хотите, чтобы Azure Databricks создавал подписку и события в Azure Data Lake Storage. Если эта роль не включена, необходимо создать очередь хранилища Azure самостоятельно).
  7. Если какая-либо из этих ролей отсутствует, перейдите на вкладку "Подходящие назначения " и добавьте их.

Дополнительные сведения о назначении этих ролей см. в шаге 3: Предоставление управляемому удостоверению доступа к событиям файлов и шаге 4: Предоставление Azure Databricks доступа к настройке событий файлов от вашего имени.

Для контейнеров S3

Чтобы убедиться, что Databricks может настроить и подписаться на уведомления о событиях в контейнере:

  1. Получите роль IAM.

    1. На боковой панели щелкните значок Каталог.

    2. На странице быстрого доступа нажмите кнопку "Внешние данные>", чтобы перейти на вкладку "Внешние расположения".

    3. Выберите внешнее расположение.

    4. На вкладке [Обзор] выберите имя учетной записи.

    5. На вкладке "Обзор учетных данных хранилища" скопируйте роль IAM (ARN).

      Вы будете использовать это на следующем шаге.

  2. Войдите в учетную запись AWS.

  3. Перейдите к IAM и найдите роль, скопированную на шаге 1.

  4. В разделе "Политики разрешений" найдите политику или политики IAM, связанные с ролью IAM, и откройте ее.

  5. Откройте политику или политики и убедитесь, что она содержит следующие свойства.

    Эта политика позволяет учетной записи Azure Databricks обновить конфигурацию уведомлений о событиях контейнера, создать раздел SNS, создать очередь SQS и подписать очередь SQS на раздел SNS.

    Замените <BUCKET> именем контейнера S3.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ManagedFileEventsSetupStatement",
          "Effect": "Allow",
          "Action": [
            "s3:GetBucketNotification",
            "s3:PutBucketNotification",
            "sns:ListSubscriptionsByTopic",
            "sns:GetTopicAttributes",
            "sns:SetTopicAttributes",
            "sns:CreateTopic",
            "sns:TagResource",
            "sns:Publish",
            "sns:Subscribe",
            "sqs:CreateQueue",
            "sqs:DeleteMessage",
            "sqs:ReceiveMessage",
            "sqs:SendMessage",
            "sqs:GetQueueUrl",
            "sqs:GetQueueAttributes",
            "sqs:SetQueueAttributes",
            "sqs:TagQueue",
            "sqs:ChangeMessageVisibility",
            "sqs:PurgeQueue"
          ],
          "Resource": ["arn:aws:s3:::<BUCKET>", "arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"]
        },
        {
          "Sid": "ManagedFileEventsListStatement",
          "Effect": "Allow",
          "Action": ["sqs:ListQueues", "sqs:ListQueueTags", "sns:ListTopics"],
          "Resource": ["arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"]
        },
        {
          "Sid": "ManagedFileEventsTeardownStatement",
          "Effect": "Allow",
          "Action": ["sns:Unsubscribe", "sns:DeleteTopic", "sqs:DeleteQueue"],
          "Resource": ["arn:aws:sqs:*:*:csms-*", "arn:aws:sns:*:*:csms-*"]
        }
      ]
    }
    

    См. также шаг 1. Создание роли IAM.

  6. Если эта политика отсутствует, добавьте ее в роль IAM.

Шаг 2. Включение событий файлов для внешнего расположения с помощью обозревателя каталогов

Чтобы включить события файлов:

  1. На боковой панели щелкните значок Каталог.

  2. На странице быстрого доступа нажмите кнопку "Внешние данные>", чтобы перейти на вкладку "Внешние расположения".

  3. Выберите внешнее расположение.

  4. Щелкните значок Kebab-меню рядом с кнопкой "Проверить подключение" и выберите "Изменить".

  5. В диалоговом окне редактирования нажмите кнопку "Дополнительные параметры".

  6. Выберите "Включить события файла".

  7. Выберите тип события "Файл":

    Автоматически: (Рекомендуется) выберите это, если вы хотите, чтобы Azure Databricks настроили подписки и события.

    Предоставлено. Выберите это, если вы уже настроили очередь хранилища Azure или очередь SQS самостоятельно.

  8. Если выбран тип события предоставленного файла, введите URL-адрес очереди существующей очереди хранилища:.

    • Очередь хранилища Azure: https://<storage account>.queue.core.windows.net/<queue>

    • Очередь AWS SQS: https://sqs.<region>.amazonaws.com/<account-ID>/<queue-name>

  9. Нажмите кнопку "Обновить".

  10. Подождите несколько секунд и нажмите "Проверить подключение" на главной странице редактирования внешнего источника, чтобы убедиться, что события файла успешно активированы.

Ограничения событий файлов

События файлов в внешних расположениях имеют следующие ограничения:

  • Скорость обработки событий ограничена 2000 файлами в секунду.

  • Невозможно пометить облачные ресурсы с помощью опции resourceTags. Вместо этого пометьте ресурсы с помощью облачной консоли после того, как служба автозагрузчика создает ресурсы очереди и подписки.

  • Вы не можете настроить события для корневого хранилища Unity Catalog, если для этого хранилища не определено внешнее расположение.

    Невозможно настроить события файлов в местах хранения, не имеющих объекта внешнего расположения, определенного в каталоге Unity. Некоторые реализации каталога Unity включают корневое расположение хранилища метаданных, которое не связано с внешним расположением. Чтобы определить, относится ли это к вашему местоположению корневого хранилища метаданных:

    1. Войдите в консоль учетной записи с правами администратора учетных записей.

    2. Щелкните значок данных.Каталог.

    3. Щелкните имя метахранилища.

    4. Перейдите на вкладку "Конфигурация".

    5. Если есть значение пути ADLS второго поколения, то для вашего корневого каталога хранилища метаданных не задан объект внешнего расположения.

      Чтобы обновить корневое хранилище метаданных для использования внешнего расположения, нажмите кнопку "Удалить ". Для вас будет создана внешняя локация. Дополнительные сведения см. в разделе "Удаление хранилища уровня метастора".

  • Хранилище BLOB-объектов Azure не поддерживается.

Изменение внешнего расположения

Владелец внешнего расположения или пользователь с MANAGE привилегией может переименовать, изменить URI и изменить учетные данные хранения внешнего расположения.

Чтобы переименовать внешнее расположение, сделайте следующее:

Выполните следующую команду в записной книжке или в SQL-редакторе Databricks. Замените значения по умолчанию:

  • <location-name>: имя расположения.
  • <new-location-name>: новое имя расположения.
ALTER EXTERNAL LOCATION <location-name> RENAME TO <new-location-name>;

Чтобы изменить универсальный код ресурса (URI), на который указывает внешнее расположение в вашем облачном клиенте, выполните следующие действия:

Выполните следующую команду в записной книжке или в SQL-редакторе Databricks. Замените значения по умолчанию:

  • <location-name>: имя внешнего расположения.
  • <url> — новый URL-адрес хранилища в вашем облачном клиенте, к которому расположение должно авторизовать доступ.
ALTER EXTERNAL LOCATION location_name SET URL '<url>' [FORCE];

Параметр FORCE изменяет URL-адрес, даже если внешние таблицы зависят от внешнего расположения.

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

Выполните следующую команду в записной книжке или в SQL-редакторе Databricks. Замените значения по умолчанию:

  • <location-name>: имя внешнего расположения.
  • <credential-name>: имя учетных данных хранилища, которые предоставляют доступ к URL-адресу расположения в вашем облачном клиенте.
ALTER EXTERNAL LOCATION <location-name> SET STORAGE CREDENTIAL <credential-name>;

Удаление внешнего расположения

Чтобы удалить внешнее расположение, необходимо быть его владельцем или иметь привилегии MANAGE на внешнее расположение. Чтобы удалить внешнее расположение, сделайте следующее:

Выполните следующую команду в записной книжке или в SQL-редакторе Databricks. Элементы в квадратных скобках являются необязательными. Замените <location-name> на имя внешнего расположения.

DROP EXTERNAL LOCATION [IF EXISTS] <location-name>;