Dela via


Konfigurera PolyBase för åtkomst till externa data i S3-kompatibel objektlagring

gäller för: SQL Server 2022 (16.x)

Den här artikeln beskriver hur du använder PolyBase för att fråga externa data i S3-kompatibel objektlagring.

SQL Server 2022 (16.x) introducerar möjligheten att ansluta till alla S3-kompatibla objektlagring, det finns två tillgängliga alternativ för autentisering: grundläggande autentisering eller direktauktorisering (kallas även STS-auktorisering).

Grundläggande autentisering, även kallat statiska autentiseringsuppgifter, kräver att användaren lagrar access key id och secret key id i SQL Server, det är upp till användaren att uttryckligen återkalla och rotera autentiseringsuppgifterna när det behövs. Detaljerad åtkomstkontroll skulle kräva att administratören konfigurerar statiska autentiseringsuppgifter för varje inloggning. Den här metoden kan vara utmanande när det gäller dussintals eller hundratals unika autentiseringsuppgifter.

Genomströmningsauktorisering (STS) ger en lösning på dessa problem genom att aktivera användningen av SQL Server-användarens identiteter för att få åtkomst till S3-kompatibel objektlagring. S3-kompatibel objektlagring har möjlighet att tilldela en tillfällig autentiseringsuppgift med hjälp av TJÄNSTEN för säker token (STS). Dessa autentiseringsuppgifter genereras kortsiktigt och dynamiskt.

Den här artikeln innehåller instruktioner för både grundläggande autentisering och sts-auktorisering (pass-through authorization).

Förutsättningar

Om du vill använda de S3-kompatibla objektlagringsintegreringsfunktionerna behöver du följande verktyg och resurser:

Behörigheter

För att proxyanvändaren ska kunna läsa innehållet i en S3-bucket måste användaren (Access Key ID) tillåtas utföra följande åtgärder mot S3-slutpunkten:

  • GetBucketLocation och GetObject behörigheter krävs för att läsa en specifik fil från S3-objektlagring.
    • ListBucket krävs för externa tabeller eller OPENROWSET-frågor som pekar på en S3-mappplats i stället för en enda fil. Utan ListBucket- behörigheter får du felet 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 behörighet krävs för att skriva till S3-objektlagring.

Tips

Din S3-kompatibla objektlagringsprovider kan kräva ytterligare API-åtgärdsbehörigheter eller använda olika namngivningar för roller som innehåller behörigheter till API-åtgärder. Läs produktdokumentationen.

Aktivera PolyBase

  1. Aktivera PolyBase i sp_configure:

    EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1;
    GO
    RECONFIGURE
    GO
    
  2. Bekräfta inställningen:

    EXEC sp_configure @configname = 'polybase enabled';
    

Autentisering

För att fortsätta väljer du Grundläggande autentisering eller direktauktorisering (STS).

Grundläggande autentisering

Innan du skapar en databasomfattande autentiseringsuppgift måste användardatabasen ha en huvudnyckel för att skydda autentiseringsuppgifterna. Mer information finns i CREATE MASTER KEY.

Skapa en databasomfattande autentiseringsuppgift med grundläggande autentisering

Följande exempelskript skapar en databasomfattande autentiseringsuppgift s3-dc i database_name-databasen i en SQL Server-instans. Mer information finns i 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

Kontrollera den nya databasomfattande autentiseringsuppgiften med sys.database_scoped_credentials (Transact-SQL):

SELECT * FROM sys.database_scoped_credentials;

Skapa en extern datakälla med grundläggande autentisering

Följande exempelskript skapar en extern datakälla s3_ds i källanvändardatabasen i SQL Server. Den externa datakällan refererar till s3_dc databasomfattande autentiseringsuppgifter. Mer information finns i CREATE EXTERNAL DATA SOURCE.

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

Verifiera den nya externa datakällan med sys.external_data_sources.

SELECT * FROM sys.external_data_sources;

Virtuella värdbaserade URL:er

Vissa S3-kompatibla lagringssystem (till exempel Amazon Web Services) använder url:er i virtual_hosted format för att implementera mappstrukturen i S3-bucketen. Lägg till följande CONNECTION_OPTIONS för att skapa externa tabeller som pekar på mappplatser i S3-bucketen, till exempel CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'.

Utan den CONNECTION_OPTIONS inställningen kan följande fel uppstå när du frågar efter externa tabeller som pekar på en mapp:

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

Begränsningar för grundläggande autentisering

  • För S3-kompatibel objektlagring får kunderna inte skapa sitt åtkomstnyckel-ID med ett : tecken i det.
  • Den totala URL-längden är begränsad till 259 tecken. Det innebär att s3://<hostname>/<objectkey> inte får överstiga 259 tecken. s3:// räknas in i den här gränsen, så sökvägens längd kan inte överstiga 259 - 5 = 254 tecken.
  • SQL-autentiseringsuppgifternas namn begränsas av 128 tecken i UTF-16-format.
  • Namnet på autentiseringsuppgifterna som skapas måste innehålla bucketnamnet om inte den här autentiseringsuppgiften är för en ny extern datakälla.
  • Åtkomstnyckel-ID och hemligt nyckel-ID får endast innehålla alfanumeriska värden.

Vidarebefordranstillstånd (STS)

S3-kompatibel objektlagring har möjlighet att tilldela en tillfällig autentiseringsuppgift med hjälp av Secure Token Service (STS). Dessa autentiseringsuppgifter genereras kortsiktigt och dynamiskt.

Direktauktorisering förlitar sig på Active Directory Federation Service (ADFS) som fungerar som identitetsprovider för OpenID Connect (OIDC). Det är ADFS som ansvarar för att kommunicera med S3-kompatibel objektlagrings-STS, begära STS och returnera den till SQL Server.

Använd STS-auktorisering (genomströmning) på SQL Server

  1. TLS måste konfigureras med certifikat mellan SQL Server och den S3-kompatibla värdservern. Det förutsätts att alla anslutningar överförs säkert via HTTPS, inte HTTP. Slutpunkten verifieras av ett certifikat som är installerat på SQL Server OS-värden. Offentliga eller självsignerade certifikat stöds.

  2. Skapa en databasomfattande autentiseringsuppgift som ska användas för att skicka identiteten till den S3-kompatibla objektlagringen. Mer information finns i CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Som följande exempel:

    CREATE DATABASE SCOPED CREDENTIAL CredName
    WITH IDENTITY = 'User Identity'
    
  3. Skapa en extern datakälla för åtkomst till den S3-kompatibla objektlagringen. Använd CONNECTION_OPTIONS, som JSON-format, för att informera den information som krävs för både ADFS och STS. Mer information finns i CREATE EXTERNAL DATA SOURCE. Som följande exempel:

    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-alternativen anger transportslutpunkten för Windows och relying_party-identifieraren för SQL Server i ADFS.
  • STS alternativ anger STS-slutpunkten för S3-kompatibel objektlagring och parametrar för AssumeRoleWithWebIdentity begäran. AssumeRoleWithWebIdentity är den metod som används för att hämta de tillfälliga säkerhetsautentiseringsuppgifter som används för att autentisera. Den fullständiga listan över parametrar, inklusive valfria, och information om standardvärden finns i STS API-referens.

Använda sts-auktorisering (genomströmning) med Active Directory

  • Markera egenskaper för SQL Server-användarkonton i AD som meningslösa för att tillåta direktströmning till S3-kompatibel lagring.
  • Tillåt Kerberos-begränsad delegering till ADFS-tjänster för användaren som är relaterad till SQL Server SPN (tjänstens huvudnamn).

Använda genomströmningsauktorisering (STS) med Active Directory Federation Service

  • Aktivera SQL Server för att vara ett tillitsförhållande för anspråksutfärdare i Active Directory.
  • Tillåt Windows-autentisering på intranät som autentiseringsmetoder för ADFS.
  • Aktivera windows transporttjänstslutpunkt i intranätet.
  • Aktivera OIDC-slutpunkter (OpenID Connect).
  • Registrera SQL Server som ett förlitande partförtroende.
    • Ange en unik identifierare.
    • Ange anspråksregler för JWT (JSON-webbtoken).
  • Anpassade anspråk – Dessa anspråk kan läggas till av kunder om dessa behövs för att fastställa åtkomstprincipen på lagringssidan.
  • Kontakta din S3-kompatibla plattformleverantör för mer leverantörsspecifik information.

Använda sts-auktorisering (pass-through) på S3-kompatibel objektlagring

  • Följ dokumentationen från en S3-kompatibel lagringsprovider för att konfigurera en extern OIDC-identitetsprovider. För att konfigurera identitetsprovidern behövs vanligtvis följande värden.

    • Konfigurationsslutpunkt för OIDC-provider.
    • Tumavtryck för OIDC-leverantören.
    • Direktauktorisering till S3-kompatibel objektlagring

Begränsningar för sts-auktorisering (pass-through)

  • Direktauktorisering (STS) till S3-kompatibel objektlagring stöds för SQL Server-inloggningar med Windows-autentisering.
  • STS-token kan inte användas för SÄKERHETSKOPIERING till URL för S3-kompatibel objektlagring.
  • ADFS och SQL Server måste finnas i samma domän. ADFS Windows-transportslutpunkten ska inaktiveras från extranätet.
  • ADFS bör ha samma AD (Active Directory) som SQL Server som anspråksförtroendeprovider.
  • S3-kompatibel lagring bör ha STS-slutpunktstjänst som gör det möjligt för klienter att begära tillfälliga autentiseringsuppgifter med hjälp av JWT för externa identiteter.
  • OPENROWSET- och CETAS-frågor (Skapa extern tabell som välj) stöds för parquet- och CSV-format.
  • Som standard är kerberos-biljettförnyelsetiden sju dagar och livslängden är 10 timmar i Windows och 2 timmar i Linux. SQL Server förnyar Kerberos-token för användaren upp till sju dagar. Efter sju dagar upphör användarens biljett att gälla, vilket leder till att vidarebefordran till S3-kompatibel lagring misslyckas. I det här fallet måste SQL Server autentisera användaren igen för att få en ny Kerberos-biljett.
  • ADFS 2019 med Windows Server 2019 stöds.
  • S3 REST API-anrop använder AWS-signatur version 4.

PolyBase på SQL Server i Linux

För PolyBase på SQL Server i Linux krävs mer konfiguration.

  • TLS måste konfigureras. Det förutsätts att alla anslutningar överförs säkert via HTTPS, inte HTTP. Slutpunkten godkänns av ett certifikat som är installerat på SQL Server-värdsnoden.
  • Certifikathantering skiljer sig från Linux. Granska och följ konfigurationen som beskrivs i Linux-stöd för S3-kompatibel lagring.