Настройка 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) используют URL-адреса в стиле virtual_hosted
для реализации структуры папок в бакете 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, посредством STS, запрашивая у STS токен и передавая его обратно в 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
опции указывают конечную точку STS хранилища объектов, совместимого с S3, и параметры дляAssumeRoleWithWebIdentity
запроса. МетодAssumeRoleWithWebIdentity
используется для получения временных данных безопасности, необходимых для аутентификации. Полный список параметров, включая необязательные и сведения о значениях по умолчанию, см. в справочнике по API STS.
Использование сквозной авторизации (STS) с Active Directory
- Пометьте свойства учетных записей пользователей SQL Server в AD как нечувствительные, чтобы разрешить передачу данных в хранилище, совместимое с S3.
- Разрешить ограниченное делегирование Kerberos службам ADFS для пользователя, связанного с SPN (именами субъектов-служб) 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 нельзя использовать для резервного копирования на 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.