Настройка 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

  1. Включите PolyBase в sp_configure:

    EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1;
    GO
    RECONFIGURE
    GO
    
  2. Подтвердите параметр:

    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;

Ограничения базовой проверки подлинности

  1. Для хранилища объектов, совместимого с S3, клиенты не могут создавать идентификатор ключа доступа с символом : в нем.
  2. Длина URL-адреса ограничена 259 символами. Это означает, что количество символов для s3://<hostname>/<objectkey> не должно превышать 259. Количество s3:// входит в это ограничение, поэтому длина пути не может превышать 259 – 5 = 254 символа.
  3. Имя учетных данных SQL ограничено 128 символами в формате UTF-16.
  4. Созданное имя учетных данных должно содержать имя контейнера, если только эти учетные данные не предназначены для нового внешнего источника данных.
  5. Идентификатор ключа доступа и идентификатор секретного ключа должны содержать только буквы и цифры.

Сквозная авторизация (STS)

Хранилище объектов, совместимое с S3, имеет возможность назначать временные учетные данные с помощью службы маркеров безопасности (STS). Эти учетные данные являются краткосрочными и динамически создаваемыми.

Сквозная авторизация зависит от службы федерации Active Directory (ADFS), выступающей в качестве поставщика удостоверений OpenID Подключение (OIDC), для связи С ADFS с S3-совместимым хранилищем объектов, запросить stS и предоставить его обратно в SQL Server.

Использование сквозной авторизации (STS) в SQL Server

  1. Протокол TLS должен быть настроен с сертификатами между SQL Server и сервером узла, совместимым с S3. Предполагается, что все подключения будут безопасно передаваться по протоколу HTTPS, а не ПО HTTP. Конечная точка будет проверяться с помощью сертификата, установленного на узле ОС SQL Server. Поддерживаются общедоступные или самозаверяемые сертификаты.

  2. Создайте учетные данные область базы данных, в которую будет использоваться для передачи удостоверения в хранилище объектов, совместимое с S3. Дополнительные сведения см. в разделе Инструкция CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). В следующем примере:

    CREATE DATABASE SCOPED CREDENTIAL CredName
    WITH IDENTITY = 'User Identity'
    
  3. Создайте внешний источник данных для доступа к хранилищу объектов, совместимого с 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.