Настройка 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 хранилища объектов. - Разрешение ListBucket для пользователя S3 для привилегий обзора.
- Разрешение ReadOnly для пользователя S3 для привилегий чтения.
- Разрешение WriteOnly для пользователя S3 для привилегий записи.
- Необходимо настроить протокол TLS. Предполагается, что все подключения будут безопасно передаваться по протоколу HTTPS, а не HTTP. Конечная точка будет проверяться с помощью сертификата, установленного на узле ОС SQL Server. Дополнительные сведения о TLS и сертификатах см. в разделе "Включение зашифрованных подключений к ядро СУБД".
Разрешения
Чтобы прокси-пользователь считывал содержимое контейнера S3, пользователю необходимо разрешить выполнять следующие действия с конечной точкой S3:
- В AWS S3 создайте пользовательскую роль и конкретное состояние, для которого требуется доступ к API S3.
- Для резервного копирования требуются следующие разрешения: ListBucket (Обзор), PutObject (запись — для резервного копирования).
- Для восстановления требуются следующие разрешения: ListBucket (Обзор), GetObject (чтение — для восстановления), GetObject (чтение — для восстановления).
- В другом хранилище, совместимом с S3:
- Для резервного копирования требуется, чтобы у пользователя (
Access Key ID
) были разрешения ListBucket и WriteOnly. - Для восстановления требуется, чтобы у пользователя (
Access Key ID
) были разрешения ListBucket и ReadOnly .
- Для резервного копирования требуется, чтобы у пользователя (
Включение 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;
Ограничения базовой проверки подлинности
- Для хранилища объектов, совместимого с S3, клиенты не могут создавать идентификатор ключа доступа с символом
:
в нем. - Длина URL-адреса ограничена 259 символами. Это означает, что количество символов для
s3://<hostname>/<objectkey>
не должно превышать 259. Количествоs3://
входит в это ограничение, поэтому длина пути не может превышать 259 – 5 = 254 символа. - Имя учетных данных SQL ограничено 128 символами в формате UTF-16.
- Созданное имя учетных данных должно содержать имя контейнера, если только эти учетные данные не предназначены для нового внешнего источника данных.
- Идентификатор ключа доступа и идентификатор секретного ключа должны содержать только буквы и цифры.
Сквозная авторизация (STS)
Хранилище объектов, совместимое с S3, имеет возможность назначать временные учетные данные с помощью службы маркеров безопасности (STS). Эти учетные данные являются краткосрочными и динамически создаваемыми.
Сквозная авторизация зависит от службы федерации Active Directory (ADFS), выступающей в качестве поставщика удостоверений OpenID Подключение (OIDC), для связи С ADFS с S3-совместимым хранилищем объектов, запросить 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
Параметры указывают конечную точку хранилища объектов, совместимую с 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 Подключение).
- Зарегистрируйте 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 см. в разделе Обзор PolyBase SQL Server
- Настройка PolyBase для доступа к внешним данным в хранилище объектов, совместимом с S3
- Виртуализация файла Parquet в совместимом с S3 хранилище объектов с помощью PolyBase
- Дополнительные руководства по созданию внешних источников данных и внешних таблиц в различных источниках данных см . в справочнике по PolyBase Transact-SQL.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по