Delen via


PolyBase configureren voor toegang tot externe gegevens in S3-compatibele objectopslag

van toepassing op: SQL Server 2022 (16.x)

In dit artikel wordt uitgelegd hoe u PolyBase gebruikt om query's uit te voeren op externe gegevens in S3-compatibele objectopslag.

SQL Server 2022 (16.x) introduceert de mogelijkheid om verbinding te maken met een S3-compatibele objectopslag. Er zijn twee beschikbare opties voor verificatie: basisverificatie of passthrough-autorisatie (ook wel STS-autorisatie genoemd).

Basisverificatie, ook wel statische referenties genoemd, vereist dat de gebruiker de access key id en secret key id opslaat in SQL Server, het is aan de gebruiker om de referenties expliciet in te trekken en te roteren wanneer dat nodig is. Voor fijnmazige toegangsbeheer moet de beheerder statische referenties instellen voor elke aanmelding. Deze aanpak kan lastig zijn bij het omgaan met tientallen of honderden unieke referenties.

PassThrough-autorisatie (STS) biedt een oplossing voor deze problemen door het gebruik van de identiteiten van de eigen SQL Server-gebruiker in te schakelen voor toegang tot de S3-compatibele objectopslag. S3-compatibele objectopslag heeft de mogelijkheid om een tijdelijke referentie toe te wijzen met behulp van de Secure Token Service (STS). Deze inloggegevens zijn kortlopend en worden dynamisch gegenereerd.

Dit artikel bevat instructies voor zowel basisverificatie- als passthrough-autorisatie (STS).

Voorwaarden

Als u de S3-compatibele functies voor objectopslagintegratie wilt gebruiken, hebt u de volgende hulpprogramma's en resources nodig:

Machtigingen

Om de proxygebruiker de inhoud van een S3-bucket te laten lezen, moet de gebruiker (Access Key ID) de volgende acties uitvoeren op het S3-eindpunt:

  • GetBucketLocation- en GetObject-machtigingen zijn nodig om een specifiek bestand uit S3-objectopslag te lezen.
    • ListBucket- is vereist voor externe tabellen of OPENROWSET-query's die verwijzen naar een S3-maplocatie, in plaats van één bestand. Zonder ListBucket--machtigingen krijgt u de foutmelding 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.
  • PutObject machtiging is nodig om naar S3-objectopslag te schrijven.

Tip

Uw S3-compatibele objectopslagprovider vereist mogelijk aanvullende API-bewerkingsmachtigingen of gebruik verschillende namen voor rollen die machtigingen voor API-bewerkingen bevatten. Raadpleeg de productdocumentatie.

PolyBase inschakelen

  1. PolyBase inschakelen in sp_configure:

    EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1;
    GO
    RECONFIGURE
    GO
    
  2. Bevestig de instelling:

    EXEC sp_configure @configname = 'polybase enabled';
    

Authenticatie

Als u wilt doorgaan, kiest u basisverificatie of passthrough-autorisatie (STS).

Basisverificatie

Voordat u een database-scope referentie maakt, moet de gebruikersdatabase een hoofdcode hebben om de referentie te beschermen. Zie CREATE MASTER KEYvoor meer informatie.

Een databasescope-referentie met basisverificatie maken

Met het volgende voorbeeldscript wordt een referentie met databasebereik gemaakt s3-dc in de database_name-database in een SQL Server-exemplaar. Zie CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)voor meer informatie.

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

Controleer de nieuwe referentie binnen de scope van de database met sys.database_scoped_credentials (Transact-SQL):

SELECT * FROM sys.database_scoped_credentials;

Een externe gegevensbron maken met basisverificatie

Met het volgende voorbeeldscript maakt u een externe gegevensbron s3_ds in de brongebruikersdatabase in SQL Server. De externe gegevensbron verwijst naar de gegevensreferentie van het s3_dc databasebereik. Zie CREATE EXTERNAL DATA SOURCEvoor meer informatie.

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

Controleer de nieuwe externe gegevensbron met sys.external_data_sources.

SELECT * FROM sys.external_data_sources;

Virtueel gehoste URLs

Sommige S3-compatibele opslagsystemen (zoals Amazon Web Services) maken gebruik van virtual_hosted stijl-URL's om mapstructuur in de S3-bucket te implementeren. Voeg de volgende CONNECTION_OPTIONS toe voor de creatie van externe tabellen die wijzen naar maplocaties in de S3-bucket, bijvoorbeeld CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'.

Zonder dat CONNECTION_OPTIONS instelling ziet u mogelijk de volgende fout bij het uitvoeren van query's op externe tabellen die naar een map verwijzen:

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

Beperkingen van basisverificatie

  • Voor S3-compatibele objectopslag mogen klanten hun toegangssleutel-id niet maken met een : teken erin.
  • De totale URL-lengte is beperkt tot 259 tekens. Dit betekent dat s3://<hostname>/<objectkey> niet langer mag zijn dan 259 tekens. De s3:// telt mee voor deze limiet, dus de padlengte mag niet langer zijn dan 259-5 = 254 tekens.
  • De naam van de SQL-referentie wordt beperkt door 128 tekens in UTF-16-indeling.
  • De naam van de referentie die is gemaakt, moet de naam van de bucket bevatten, tenzij deze referentie voor een nieuwe externe gegevensbron is.
  • Toegangssleutel-id en geheime sleutel-id mogen alleen alfanumerieke waarden bevatten.

PassThrough-autorisatie (STS)

S3-compatibele objectopslag heeft de mogelijkheid om een tijdelijke referentie toe te wijzen met behulp van Secure Token Service (STS). Deze referenties zijn kortstondig en worden dynamisch gegenereerd.

Passthrough-autorisatie is afhankelijk van ADFS (Active Directory Federation Service) die fungeert als id-provider van OpenID Connect (OIDC), het is aan de ADFS om te communiceren met de S3-compatibele objectopslag STS, de STS aan te vragen en deze terug te geven aan SQL Server.

PassThrough-autorisatie (STS) gebruiken op SQL Server

  1. TLS moet worden geconfigureerd met certificaten tussen de SQL Server en de hostserver die compatibel is met S3. Er wordt van uitgegaan dat alle verbindingen veilig worden verzonden via HTTPS, niet http. Het eindpunt wordt gevalideerd door een certificaat dat is geïnstalleerd op de SQL Server-besturingssysteemhost. Openbare of zelfondertekende certificaten worden ondersteund.

  2. Maak een database-credential aan die zal worden gebruikt om de identiteit door te geven aan de S3-compatibele objectopslag. Zie CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)voor meer informatie. Zoals in het volgende voorbeeld:

    CREATE DATABASE SCOPED CREDENTIAL CredName
    WITH IDENTITY = 'User Identity'
    
  3. Maak een externe gegevensbron voor toegang tot de S3-compatibele objectopslag. Gebruik CONNECTION_OPTIONS, als JSON-indeling, om de vereiste informatie voor zowel de ADFS als STS te informeren. Zie CREATE EXTERNAL DATA SOURCEvoor meer informatie. Zoals in het volgende voorbeeld:

    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 opties geven het Windows-transporteindpunt en relying_party-id van SQL Server in ADFS op.
  • STS opties geven S3-compatibele objectopslag STS-eindpunten en -parameters voor AssumeRoleWithWebIdentity verzoek. De AssumeRoleWithWebIdentity is de methode die wordt gebruikt voor het verkrijgen van de tijdelijke beveiligingsreferentie die wordt gebruikt voor verificatie. Raadpleeg STS API Referencevoor de volledige lijst met parameters, inclusief optionele parameters en informatie over standaardwaarden.

Pass Through-autorisatie (STS) gebruiken met Active Directory

  • Markeer eigenschappen van SQL Server-gebruikersaccounts in AD als niet-gevoelig om passthrough naar S3-compatibele opslag toe te staan.
  • Sta beperkte Kerberos-delegering toe aan ADFS-services voor de gebruiker met betrekking tot SQL Server SPN (Service Principal Names).

PassThrough-autorisatie (STS) gebruiken met Active Directory Federation Service

  • Schakel sql Server in als vertrouwensrelatie van claimprovider in Active Directory.
  • Intranet windows-verificatie toestaan als verificatiemethoden voor ADFS.
  • Schakel het Windows Transport-service-eindpunt in uw intranet in.
  • Schakel OIDC-eindpunten (OpenID Connect) in.
  • Registreer SQL Server als een vertrouwensrelatie van een relying party.
    • Geef een unieke id op.
    • Regels voor claims instellen voor JWT (JSON-webtoken).
  • Aangepaste claims: deze claims kunnen door klanten worden toegevoegd als deze nodig zijn om het toegangsbeleid aan de opslagzijde te bepalen.
  • Neem contact op met uw S3-compatibele platformprovider voor meer leverancierspecifieke informatie.

PassThrough-autorisatie (STS) gebruiken voor S3-compatibele objectopslag

  • Volg de documentatie van de S3-compatibele opslagprovider om een externe OIDC-id-provider in te stellen. Voor het instellen van de id-provider zijn meestal de volgende waarden nodig.

    • Configuratie-eindpunt van OIDC-provider.
    • Vingerafdruk van OIDC-provider.
    • Passthrough-autorisatie voor S3-compatibele objectopslag

Beperkingen van doorvoerautorisatie (STS)

  • Passthrough-autorisatie (STS) voor S3-compatibele objectopslag wordt ondersteund voor SQL Server-aanmeldingen met Windows-verificatie.
  • STS-tokens kunnen niet worden gebruikt voor BACKUP naar URL voor S3-compatibele objectopslag.
  • ADFS en SQL Server moeten zich in hetzelfde domein bevinden. ADFS Windows-transporteindpunt moet worden uitgeschakeld vanuit het extranet.
  • ADFS moet dezelfde AD (Active Directory) hebben als SQL Server als claimvertrouwensprovider.
  • S3-compatibele opslag moet een STS-eindpuntservice hebben waarmee clients tijdelijke referenties kunnen aanvragen met behulp van JWT van externe identiteiten.
  • OPENROWSET- en CETAS-queries (Create External Table as Select) worden ondersteund voor het parquet- en CSV-formaat.
  • Kerberos-ticketvernieuwingstijd is standaard zeven dagen en de levensduur is 10 uur in Windows en 2 uur op Linux. SQL Server verlengt het Kerberos-token van de gebruiker tot zeven dagen. Na zeven dagen verloopt het ticket van de gebruiker, waardoor pass-through naar S3-compatibele opslag mislukt. In dit geval moet SQL Server de gebruiker opnieuw verifiëren om een nieuw Kerberos-ticket op te halen.
  • ADFS 2019 met Windows Server 2019 wordt ondersteund.
  • S3 REST API-aanroepen maken gebruik van AWS Signature versie 4.

PolyBase op SQL Server in Linux

Voor PolyBase op SQL Server in Linux is meer configuratie nodig.

  • TLS moet worden geconfigureerd. Er wordt vanuit gegaan dat alle verbindingen veilig via HTTPS worden verzonden, niet via HTTP. Het eindpunt wordt gevalideerd door een certificaat dat is geïnstalleerd op de SQL Server OS Host.
  • Certificaatbeheer verschilt in Linux. Controleer en volg de configuratie die wordt beschreven in Linux-ondersteuning voor S3-compatibele opslag.