Настройка PolyBase для доступа к внешним данным в совместимом с S3 хранилище объектов
Область применения: SQL Server 2022 (16.x)
В этой статье объясняется, как использовать PolyBase для запроса внешних данных в хранилище объектов, совместимом с S3.
SQL Server 2022 (16.x) представляет возможность подключения к любому хранилищу объектов, совместимого с S3, есть два доступных варианта проверки подлинности: обычная проверка подлинности или сквозная авторизация (также известная как авторизация STS).
Обычная проверка подлинности, также известная как статические учетные данные, требует, чтобы пользователь сохранял access key id
и secret key id
в SQL Server явно отменять и сменить учетные данные при необходимости. Для точного управления доступом администратору потребуется настроить статические учетные данные для каждого входа, этот подход может быть сложным при работе с десятками или сотнями уникальных учетных данных.
Сквозная авторизация (STS) предлагает решение для этих проблем, позволяя использовать удостоверения собственного пользователя SQL Server для доступа к хранилищу объектов, совместимого с S3. Хранилище объектов, совместимое с S3, может назначать временные учетные данные с помощью службы маркеров безопасности (STS). Эти учетные данные являются краткосрочными и динамически создаваемыми.
В этой статье содержатся инструкции для авторизации обычной проверки подлинности и сквозной авторизации (STS).
Необходимые компоненты
Чтобы использовать функции интеграции хранилища объектов, совместимых с S3, вам потребуются следующие средства и ресурсы:
- Установите компонент PolyBase для SQL Server.
- установленный SQL Server Management Studio (SSMS) или Azure Data Studio;
- совместимое с S3 хранилище;
- созданный контейнер S3. В SQL Server нельзя создавать и настраивать контейнеры.
- Пользователь (
Access Key ID
) и секрет (Secret Key ID
), известный вам. Необходимо выполнить проверку подлинности в конечной точке хранилища объектов S3. - Необходимо настроить протокол TLS. Предполагается, что все подключения будут безопасно передаваться по протоколу HTTPS, а не HTTP. Конечная точка будет проверяться с помощью сертификата, установленного на узле ОС SQL Server. Дополнительные сведения о TLS и сертификатах см. в разделе "Включение зашифрованных подключений к ядро СУБД".
Разрешения
Чтобы прокси-пользователь считывал содержимое контейнера S3, пользователю (Access Key ID
) необходимо разрешить выполнять следующие действия с конечной точкой S3:
- Разрешения GetBucketLocation и GetObject необходимы для чтения определенного файла из хранилища объектов S3.
- ListBucket требуется для внешних таблиц или запросов OPENROWSET, указывающих на расположение папки S3 вместо одного файла. Без разрешений ListBucket вы получите ошибку
Msg 4860, Level 16, State 7, Line 15 Cannot bulk load. The file "s3://<ip address>:9000/bucket/*.*" does not exist or you don't have file access rights.
- ListBucket требуется для внешних таблиц или запросов OPENROWSET, указывающих на расположение папки S3 вместо одного файла. Без разрешений ListBucket вы получите ошибку
- Разрешение PutObject необходимо для записи в хранилище объектов S3.
Совет
Поставщик хранилища объектов, совместимый с S3, может потребовать дополнительных разрешений на операции API или использовать другое именование для ролей, содержащих разрешения для операций API. Обратитесь к документации по продукту.
Включение PolyBase
Включите PolyBase в
sp_configure
:EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1; GO RECONFIGURE GO
Подтвердите параметр:
EXEC sp_configure @configname = 'polybase enabled';
Проверка подлинности
Чтобы продолжить, выберите обычную проверку подлинности или сквозную проверку подлинности (STS).
Обычная проверка подлинности
Перед созданием учетных данных на уровне базы данных в базе данных должен быть главный ключ для защиты учетных данных. Дополнительные сведения см. в статье CREATE MASTER KEY.
Создание учетных данных с областью действия базы данных с помощью базовой проверки подлинности
В следующем примере скрипта создается учетные данные s3-dc
базы данных в database_name
базе данных в экземпляре SQL Server. Дополнительные сведения см. в разделе Инструкция CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
USE [database_name];
GO
IF NOT EXISTS(SELECT * FROM sys.database_scoped_credentials WHERE name = 's3_dc')
BEGIN
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key',
SECRET = '<AccessKeyID>:<SecretKeyID>' ;
END
GO
Проверьте новые учетные данные на уровне базы данных с помощью sys.database_scoped_credentials (Transact-SQL):
SELECT * FROM sys.database_scoped_credentials;
Создание внешнего источника данных с помощью базовой проверки подлинности
Следующий пример скрипта создает внешний источник данных s3_ds
в исходной пользовательской базе данных в SQL Server. Внешний источник данных ссылается на учетные данные на уровне базы данных s3_dc
. Дополнительные сведения см. в разделе CREATE EXTERNAL DATA SOURCE.
CREATE EXTERNAL DATA SOURCE s3_ds
WITH
( LOCATION = 's3://<ip_address>:<port>/'
, CREDENTIAL = s3_dc
);
GO
Проверьте новый внешний источник данных с помощью sys.external_data_sources.
SELECT * FROM sys.external_data_sources;
Виртуальные РАЗМЕЩЕННЫе URL-адреса
Некоторые системы хранения, совместимые с S3 (например, Amazon Web Services), используют virtual_hosted
URL-адреса стилей для реализации структуры папок в контейнере S3. Добавьте следующее CONNECTION_OPTIONS
, чтобы разрешить создание внешних таблиц, указывающих на расположения папок в контейнере S3, например CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'
.
Без этого CONNECTION_OPTIONS
параметра при запросе внешних таблиц, указывающих на папку, может возникнуть следующая ошибка:
Msg 13807, Level 16, State 1, Line 23
Content of directory on path '/<folder_name>/' cannot be listed.
Ограничения базовой проверки подлинности
- Для хранилища объектов, совместимого с S3, клиенты не могут создавать идентификатор ключа доступа с символом
:
в нем. - Длина URL-адреса ограничена 259 символами. Это означает, что количество символов для
s3://<hostname>/<objectkey>
не должно превышать 259. Счетчикиs3://
по отношению к этому ограничению, поэтому длина пути не может превышать 259-5 = 254 символов. - Имя учетных данных SQL ограничено 128 символами в формате UTF-16.
- Созданное имя учетных данных должно содержать имя контейнера, если только эти учетные данные не предназначены для нового внешнего источника данных.
- Идентификатор ключа доступа и идентификатор секретного ключа должны содержать только буквы и цифры.
Сквозная авторизация (STS)
Хранилище объектов, совместимое с S3, имеет возможность назначать временные учетные данные с помощью службы маркеров безопасности (STS). Эти учетные данные являются краткосрочными и динамически создаваемыми.
Сквозная авторизация зависит от службы федерации Active Directory (ADFS), выступающей в качестве поставщика удостоверений OpenID Connect (OIDC), она зависит от ADFS для обмена данными со службой безопасности объектов, совместимых с S3, запрашивать службы безопасности и предоставлять ее обратно в SQL Server.
Использование сквозной авторизации (STS) в SQL Server
Протокол TLS должен быть настроен с сертификатами между SQL Server и сервером узла, совместимым с S3. Предполагается, что все подключения будут безопасно передаваться по протоколу HTTPS, а не ПО HTTP. Конечная точка будет проверяться с помощью сертификата, установленного на узле ОС SQL Server. Поддерживаются общедоступные или самозаверяемые сертификаты.
Создайте учетные данные базы данных, в которые будут использоваться для передачи удостоверения в хранилище объектов, совместимое с S3. Дополнительные сведения см. в разделе Инструкция CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). В следующем примере:
CREATE DATABASE SCOPED CREDENTIAL CredName WITH IDENTITY = 'User Identity'
Создайте внешний источник данных для доступа к хранилищу объектов, совместимого с S3. Используйте
CONNECTION_OPTIONS
формат JSON для информирования необходимых сведений для ADFS и STS. Дополнительные сведения см. в разделе CREATE EXTERNAL DATA SOURCE. В следующем примере:CREATE EXTERNAL DATA SOURCE EdsName WITH { LOCATION = 's3://<hostname>:<port>/<bucket_name>' , CREDENTIAL = <CredName> [ , CONNECTION_OPTIONS = ' { [ , "authorization": { "adfs": { "endpoint": "http[s]://hostname:port/servicepath", "relying_party": "SQL Server Relying Party Identifier" }, "sts": { "endpoint": "http[s]://hostname:port/stspath", "role_arn": "Role Arn" [ , "role_session_name": "AD user login" ] -- default value if not provided [ , "duration_seconds": 3600 ] -- default value if not provided [ , "version": "2011-06-15" ] -- default value if not provided [ , "request_parameters": "In request query string format" ] } } ] [ , "s3": { "url_style": "Path" } ] }' ] }
ADFS
параметры указывают конечную точку транспорта Windows иrelying_party
идентификатор SQL Server в ADFS.STS
Параметры указывают конечную точку хранилища объектов, совместимую с S3, и параметры дляAssumeRoleWithWebIdentity
запроса. ЭтоAssumeRoleWithWebIdentity
метод, используемый для получения временных учетных данных безопасности, используемых для проверки подлинности. Полный список параметров, включая необязательные и сведения о значениях по умолчанию, см. в справочнике по API STS.
Использование сквозной авторизации (STS) с Active Directory
- Пометьте свойства учетных записей пользователей SQL Server в AD как нечувствительные, чтобы разрешить сквозное хранилище, совместимое с S3.
- Разрешить ограниченное делегирование Kerberos службам ADFS для пользователя, связанного с именем субъекта-службы SQL Server (имена субъектов-служб).
Использование сквозной авторизации (STS) со службой федерации Active Directory
- Разрешить SQL Server быть поставщиком утверждений доверия в Active Directory.
- Разрешить проверку подлинности Windows интрасети в качестве методов проверки подлинности для ADFS.
- Включите конечную точку службы транспорта Windows в интрасети.
- Включите конечные точки OIDC (OpenID Connect).
- Зарегистрируйте SQL Server в качестве доверия проверяющей стороны.
- Укажите уникальный идентификатор.
- Задайте правила утверждений для JWT (веб-токен JSON).
- Пользовательские утверждения— эти утверждения можно добавить клиентами, если они необходимы для определения политики доступа на стороне хранилища.
- Дополнительные сведения о поставщиках см. в поставщике платформы, совместимом с S3.
Использование сквозной авторизации (STS) в хранилище объектов, совместимых с S3
Следуйте документации, предоставленной поставщиком хранилища, совместимым с S3, для настройки внешнего поставщика удостоверений OIDC. Для настройки поставщика удостоверений обычно требуются следующие значения.
- Конечная точка конфигурации поставщика OIDC.
- Отпечаток поставщика OIDC.
- Сквозная авторизация в хранилище объектов, совместимое с S3
Ограничения сквозной авторизации (STS)
- Сквозная авторизация (STS) в хранилище объектов, совместимое с S3, поддерживается для входа SQL Server с проверка подлинности Windows.
- Маркеры STS нельзя использовать для backup to URL-адрес для хранилища объектов, совместимых с S3.
- ADFS и SQL Server должны находиться в одном домене. Конечная точка транспорта Windows ADFS должна быть отключена из экстрасети.
- ADFS должен иметь тот же AD (Active Directory), что и SQL Server, что и поставщик доверия утверждений.
- Хранилище, совместимое с S3, должно иметь службу конечных точек STS, которая позволяет клиентам запрашивать временные учетные данные с помощью JWT внешних удостоверений.
- Запросы OPENROWSET и CETAS (Create External Table as Select) поддерживаются для формата parquet и CSV.
- По умолчанию срок продления билета Kerberos составляет семь дней и время существования составляет 10 часов в Windows и 2 часах в Linux. SQL Server обновляет маркер Kerberos пользователя до семи дней. Через семь дней срок действия билета пользователя истекает, поэтому сквозное хранилище, совместимое с S3, завершится ошибкой. В этом случае SQL Server должен повторно пройти проверку подлинности пользователя, чтобы получить новый билет Kerberos.
- Поддерживается ADFS 2019 с Windows Server 2019.
- Вызовы REST API S3 используют сигнатуру AWS версии 4.
PolyBase в SQL Server на Linux
Для PolyBase в SQL Server на Linux требуется дополнительная конфигурация.
- Необходимо настроить TLS. Предполагается, что все подключения будут безопасно передаваться по протоколу HTTPS, а не HTTP. Конечная точка проверяется сертификатом, установленным на узле ОС SQL Server.
- Управление сертификатами отличается в Linux. Просмотрите и следуйте инструкциям по конфигурации, подробно описанной в поддержке Linux для хранилища, совместимого с S3.