Udostępnij za pośrednictwem


Konfigurowanie programu PolyBase w celu uzyskiwania dostępu do danych zewnętrznych w magazynie obiektów zgodnym z usługą S3

Dotyczy: SQL Server 2022 (16.x)

W tym artykule wyjaśniono, jak używać technologii PolyBase do wykonywania zapytań dotyczących danych zewnętrznych w magazynie obiektów zgodnym z usługą S3.

Program SQL Server 2022 (16.x) wprowadza możliwość nawiązywania połączenia z dowolnym magazynem obiektów zgodnym z usługą S3. Istnieją dwie dostępne opcje uwierzytelniania: uwierzytelnianie podstawowe lub autoryzacja przekazywane (znana również jako autoryzacja STS).

Uwierzytelnianie podstawowe, nazywane również poświadczeniami statycznymi, wymaga od użytkownika przechowywania access key id i secret key id w programie SQL Server. W razie potrzeby użytkownik musi jawnie odwołać i obrócić poświadczenia. Szczegółowa kontrola dostępu wymagałaby od administratora skonfigurowania poświadczeń statycznych dla każdego logowania. Takie podejście może być trudne w przypadku czynienia z dziesiątkami lub setkami unikatowych poświadczeń.

Autoryzacja z przekazywaniem (STS) oferuje rozwiązanie tych problemów, umożliwiając korzystanie z tożsamości użytkownika programu SQL Server w celu uzyskania dostępu do magazynu obiektów zgodnego z programem S3. Magazyn obiektów zgodny z usługą S3 umożliwia przypisywanie poświadczeń tymczasowych przy użyciu usługi bezpiecznego tokenu (STS). Te poświadczenia są krótkoterminowe i dynamicznie generowane.

Ten artykuł zawiera instrukcje dotyczące zarówno uwierzytelniania podstawowego, jak i autoryzacji przepływowej (STS).

Warunki wstępne

Do korzystania z funkcji integracji magazynu obiektów zgodnego z usługą S3 potrzebne są następujące narzędzia i zasoby:

  • Zainstaluj funkcję PolyBase dla programu SQL Server.
  • Zainstaluj program SQL Server Management Studio (SSMS) lub azure Data Studio.
  • Magazyn zgodny z protokołem S3.
  • Utworzono zasobnik S3. Nie można utworzyć ani skonfigurować bucketów w programie SQL Server.
  • Użytkownik (Access Key ID) oraz tajemnica (Secret Key ID) znana tobie. Oba te elementy są wymagane do uwierzytelnienia względem punktu końcowego magazynu obiektów S3.
  • Należy skonfigurować protokół Transport Layer Security (TLS). Zakłada się, że wszystkie połączenia będą bezpiecznie przesyłane za pośrednictwem protokołu HTTPS, a nie HTTP. Punkt końcowy zostanie zweryfikowany przez certyfikat zainstalowany na hoście systemu operacyjnego programu SQL Server. Aby uzyskać więcej informacji na temat protokołu TLS i certyfikatów, zobacz Włączanie szyfrowanych połączeń z aparatem bazy danych.

Uprawnienia

Aby użytkownik proxy mógł odczytać zawartość zasobnika S3, użytkownik (Access Key ID) musi mieć możliwość wykonywania następujących akcji względem punktu końcowego S3:

  • GetBucketLocation i uprawnienia GetObject są potrzebne do odczytu określonego pliku z magazynu obiektów S3.
    • ListBucket jest wymagany w przypadku tabel zewnętrznych lub zapytań OPENROWSET wskazujących lokalizację folderu S3 zamiast pojedynczego pliku. Bez uprawnień ListBucket zostanie wyświetlony błąd 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.
  • Uprawnienie PutObject jest wymagane do zapisu w magazynie obiektów S3.

Napiwek

Dostawca magazynu obiektów zgodny ze standardem S3 może wymagać dodatkowych uprawnień operacji interfejsu API lub użyć innego nazewnictwa dla ról zawierających uprawnienia do operacji interfejsu API. Zapoznaj się z dokumentacją produktu.

Włączanie programu PolyBase

  1. Włącz PolyBase w sp_configure:

    EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1;
    GO
    RECONFIGURE
    GO
    
  2. Potwierdź ustawienie:

    EXEC sp_configure @configname = 'polybase enabled';
    

Uwierzytelnianie

Aby kontynuować, wybierz uwierzytelnianie podstawowe lub autoryzacja przekazywana (STS).

Uwierzytelnianie podstawowe

Przed utworzeniem poświadczenia o zakresie bazy danych, baza danych musi mieć klucz główny, aby chronić to poświadczenie. Aby uzyskać więcej informacji, zobacz CREATE MASTER KEY.

Utwórz poświadczenie o zakresie bazy danych z użyciem uwierzytelniania podstawowego

Poniższy przykładowy skrypt tworzy poświadczenie o zakresie bazy danych s3-dc w bazie danych database_name na instancji serwera SQL Server. Aby uzyskać więcej informacji, zobacz 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

Zweryfikuj nowe poświadczenie ograniczone do zakresu bazy danych przy użyciu sys.database_scoped_credentials (Transact-SQL):

SELECT * FROM sys.database_scoped_credentials;

Tworzenie zewnętrznego źródła danych przy użyciu uwierzytelniania podstawowego

Poniższy przykładowy skrypt tworzy zewnętrzne źródło danych s3_ds w źródłowej bazie danych użytkownika w programie SQL Server. Zewnętrzne źródło danych odwołuje się do poświadczenia o zakresie bazy danych s3_dc. Aby uzyskać więcej informacji, zobacz CREATE EXTERNAL DATA SOURCE.

CREATE EXTERNAL DATA SOURCE s3_ds
WITH
(   LOCATION = 's3://<ip_address>:<port>/'
,   CREDENTIAL = s3_dc
);
GO

Sprawdź nowe zewnętrzne źródło danych przy użyciu sys.external_data_sources.

SELECT * FROM sys.external_data_sources;

Wirtualne hostowane adresy URL

Niektóre systemy magazynowania zgodne ze standardem S3 (takie jak Amazon Web Services) wykorzystują adresy URL w stylu virtual_hosted w celu zaimplementowania struktury folderów w zasobniku S3. Dodaj następujące CONNECTION_OPTIONS, aby umożliwić tworzenie tabel zewnętrznych wskazujących lokalizacje folderów w zasobniku S3, na przykład CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'.

Bez tego ustawienia CONNECTION_OPTIONS podczas wykonywania zapytań dotyczących tabel zewnętrznych wskazujących folder może wystąpić następujący błąd:

Msg 13807, Level 16, State 1, Line 23  
Content of directory on path '/<folder_name>/' cannot be listed. 

Ograniczenia uwierzytelniania podstawowego

  • W przypadku magazynu obiektów zgodnego z usługą S3 klienci nie mogą tworzyć identyfikatora klucza dostępu z znakiem : w nim.
  • Łączna długość adresu URL jest ograniczona do 259 znaków. Oznacza to, że s3://<hostname>/<objectkey> nie powinny przekraczać 259 znaków. s3:// liczy się w kierunku tego limitu, więc długość ścieżki nie może przekraczać 259–5 = 254 znaki.
  • Nazwa poświadczeń SQL jest ograniczona o 128 znaków w formacie UTF-16.
  • Utworzona nazwa poświadczenia musi zawierać nazwę zasobnika, chyba że to poświadczenie jest przeznaczone dla nowego zewnętrznego źródła danych.
  • Identyfikator klucza dostępu i identyfikator klucza tajnego muszą zawierać tylko wartości alfanumeryczne.

Autoryzacja przepuszczająca (STS)

Magazyn obiektów zgodny z usługą S3 umożliwia przypisanie tymczasowego poświadczenia przy użyciu usługi bezpiecznego tokenu (STS). Te poświadczenia są krótkoterminowe i dynamicznie generowane.

Autoryzacja z przekazywaniem opiera się na usłudze Active Directory Federation Service (ADFS), która działa jako dostawca tożsamości OpenID Connect (OIDC). To ADFS należy komunikacja z usługą STS zgodną z S3, złożenie żądania do STS oraz przekazanie go z powrotem do SQL Server.

Używanie autoryzacji przekazywanej (STS) w programie SQL Server

  1. Protokół TLS należy skonfigurować przy użyciu certyfikatów między programem SQL Server i serwerem hosta zgodnym z protokołem S3. Zakłada się, że wszystkie połączenia będą bezpiecznie przesyłane za pośrednictwem protokołu HTTPS, a nie HTTP. Punkt końcowy zostanie zweryfikowany przez certyfikat zainstalowany na hoście systemu operacyjnego programu SQL Server. Obsługiwane są certyfikaty z podpisem publicznym lub własnym.

  2. Utwórz poświadczenie w zakresie bazy danych, które będzie używane do przekazywania tożsamości do magazynu obiektów zgodnego z usługą S3. Więcej informacji znajdziesz w CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). W poniższym przykładzie:

    CREATE DATABASE SCOPED CREDENTIAL CredName
    WITH IDENTITY = 'User Identity'
    
  3. Utwórz zewnętrzne źródło danych w celu uzyskania dostępu do magazynu obiektów zgodnego z programem S3. Użyj CONNECTION_OPTIONSw formacie JSON, aby przekazać wymagane informacje zarówno dla ADFS, jak i STS. Aby uzyskać więcej informacji, zobacz CREATE EXTERNAL DATA SOURCE (UTWÓRZ ZEWNĘTRZNE ŹRÓDŁO DANYCH). W poniższym przykładzie:

    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 opcje określają punkt końcowy transportu systemu Windows i identyfikator relying_party serwera SQL w ADFS.
  • STS opcje określają punkt końcowy stS magazynu obiektów zgodny z usługą S3 i parametry dla żądania AssumeRoleWithWebIdentity. AssumeRoleWithWebIdentity to metoda używana do uzyskania tymczasowego poświadczenia zabezpieczeń używanego do uwierzytelniania. Pełną listę parametrów, w tym opcjonalnych, oraz informacje o wartościach domyślnych, można znaleźć w Dokumentacja interfejsu API STS.

Używanie uwierzytelniania typu pass-through (STS) z usługą Active Directory

  • Oznacz właściwości kont użytkowników programu SQL Server w usłudze AD jako niewrażliwe, aby zezwolić na przekazywanie do magazynu zgodnego z usługą S3.
  • Zezwalaj na ograniczone delegowanie protokołu Kerberos do usług ADFS dla użytkownika powiązanego z SPN dla SQL Server.

Używanie autoryzacji przekazywanej (STS) z usługą federacyjną Active Directory

  • Włącz program SQL Server jako zaufania dostawcy oświadczeń w usłudze Active Directory.
  • Zezwalaj na uwierzytelnianie intranetowe systemu Windows jako metody uwierzytelniania dla usług AD FS.
  • Włącz punkt końcowy usługi transportowej systemu Windows w intranecie.
  • Włącz punkty końcowe OIDC (OpenID Connect).
  • Zarejestruj SQL Server jako zaufanie strony zależnej .
    • Podaj unikatowy identyfikator.
    • Ustaw reguły oświadczeń dla tokenu internetowego JWT (JSON Web Token).
  • Oświadczenia niestandardowe — te oświadczenia mogą być dodawane przez klientów, jeśli są one potrzebne do określenia zasad dostępu po stronie magazynu.
  • Aby uzyskać więcej informacji specyficznych dla dostawcy, zapoznaj się z dostawcą platformy zgodnym z usługą S3.

Używanie autoryzacji przepustkowej (STS) w magazynie obiektów zgodnym z usługą S3

  • Postępuj zgodnie z dokumentacją dostarczaną przez dostawcę magazynu zgodnego z usługą S3, aby skonfigurować zewnętrznego dostawcę tożsamości OIDC. Aby skonfigurować dostawcę tożsamości, najczęściej potrzebne są następujące wartości.

    • Konfiguracja punktu końcowego dostawcy OIDC.
    • Odcisk palca dostawcy OIDC.
    • Przekazywanie autoryzacji do magazynu obiektów zgodnego ze standardem S3

Ograniczenia autoryzacji passthrough (STS)

  • Autoryzacja typu pass-through (STS) do magazynu obiektów zgodnego z S3 jest obsługiwana dla logowań do SQL Server z uwierzytelnianiem Windows.
  • Tokeny STS nie mogą być używane do BACKUP na adres URL dla magazynów obiektów zgodnych z S3.
  • Usługi ADFS i program SQL Server muszą znajdować się w tej samej domenie. Punkt końcowy transportu AD FS w systemie Windows powinien być wyłączony z ekstranetu.
  • Usługi ADFS powinny mieć tę samą usługę AD (Active Directory) co SQL Server, jako dostawca zaufania oświadczeń.
  • Magazyn zgodny z usługą S3 powinien mieć usługę punktu końcowego STS, która umożliwia klientom żądanie poświadczeń tymczasowych przy użyciu JWT tożsamości zewnętrznych.
  • Zapytania OPENROWSET i CETAS (Create External Table as Select) są obsługiwane dla formatów parquet i CSV.
  • Domyślnie czas odnawiania biletu Protokołu Kerberos wynosi siedem dni, a okres istnienia to 10 godzin w systemie Windows i 2 godziny w systemie Linux. Program SQL Server odnawia token Protokołu Kerberos użytkownika do siedmiu dni. Po siedmiu dniach bilet użytkownika wygasa, dlatego przekazywanie do magazynu zgodnego z S3 zakończy się niepowodzeniem. W takim przypadku program SQL Server musi ponownie uwierzytelnić użytkownika, aby uzyskać nowy bilet protokołu Kerberos.
  • Obsługiwane są usługi ADFS 2019 z systemem Windows Server 2019.
  • Wywołania interfejsu API REST S3 używają sygnatury platformy AWS w wersji 4.

Program PolyBase w programie SQL Server w systemie Linux

W przypadku programu PolyBase w programie SQL Server w systemie Linux wymagana jest większa konfiguracja.

  • Należy skonfigurować protokół TLS. Zakłada się, że wszystkie połączenia będą bezpiecznie przesyłane za pośrednictwem protokołu HTTPS, a nie HTTP. Punkt końcowy jest weryfikowany przez certyfikat zainstalowany na hoście systemu operacyjnego programu SQL Server.
  • Zarządzanie certyfikatami różni się w systemie Linux. Przejrzyj i postępuj zgodnie z konfiguracją szczegółową w temacie obsługa systemu Linux dla magazynu zgodnego z protokołem S3.