Sdílet prostřednictvím


Konfigurace PolyBase pro přístup k externím datům v úložišti objektů kompatibilních s S3

platí pro: SQL Server 2022 (16.x)

Tento článek vysvětluje, jak pomocí PolyBase dotazovat externí data v úložišti objektů kompatibilním s S3.

SQL Server 2022 (16.x) zavádí možnost připojit se k libovolnému úložišti objektů kompatibilnímu s S3, existují dvě možnosti ověřování: základní ověřování nebo předávací autorizace (označovaná také jako autorizace STS).

Základní ověřování, označované také jako statické přihlašovací údaje, vyžaduje, aby uživatel ukládal access key id a secret key id na SQL Serveru, je až na uživatele, aby přihlašovací údaje explicitně odvolal a obměnuje, kdykoli je to potřeba. Podrobné řízení přístupu by vyžadovalo, aby správce nastavil statické přihlašovací údaje pro každé přihlášení. Tento přístup může být náročný při práci s desítkami nebo stovkami jedinečných přihlašovacích údajů.

Předávací autorizace (STS) nabízí řešení těchto problémů povolením použití identit vlastních uživatelů SQL Serveru pro přístup k úložišti objektů kompatibilním s S3. Úložiště objektů kompatibilní s S3 má schopnost přiřazovat dočasné přihlašovací údaje pomocí služby tokenů zabezpečení (STS). Tyto přihlašovací údaje jsou krátkodobé a dynamicky generované.

Tento článek obsahuje pokyny pro Základní autentizaci i průchozí autorizaci (STS).

Požadavky

Pokud chcete používat funkce integrace úložiště objektů kompatibilní s S3, potřebujete následující nástroje a prostředky:

  • Nainstalovat funkci PolyBase pro SQL Server.
  • Nainstalujte SQL Server Management Studio (SSMS) nebo Azure Data Studio.
  • Úložiště kompatibilní s S3.
  • Vytvořil se kontejner S3. Buckety nelze vytvářet ani konfigurovat prostřednictvím SQL Serveru.
  • Uživatel (Access Key ID) a tajemství (Secret Key ID) známé vám. K ověření na koncovém bodu úložiště objektů S3 potřebujete obojí.
  • Je nutné nakonfigurovat protokol TLS (Transport Layer Security). Předpokládá se, že všechna připojení budou bezpečně přenášena přes PROTOKOL HTTPS, nikoli PŘES PROTOKOL HTTP. Koncový bod bude ověřen certifikátem nainstalovaným na hostiteli operačního systému SQL Serveru. Další informace o protokolu TLS a certifikátech najdete v tématu Povolení šifrovaných připojení k databázovému stroji.

Dovolení

Aby mohl uživatel proxy serveru číst obsah kbelíku S3, musí mít uživatel (Access Key ID) povoleno provádět s koncovým bodem S3 následující akce:

  • oprávnění GetBucketLocation a GetObject jsou potřeba ke čtení konkrétního souboru z úložiště objektů S3.
    • ListBucket se vyžaduje pro externí tabulky nebo dotazy OPENROWSET, které odkazují na umístění složky S3 místo jednoho souboru. Bez oprávnění ListBucket se zobrazí chyba 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.
  • oprávnění PutObject je potřeba k zápisu do úložiště objektů S3.

Spropitné

Poskytovatel úložiště objektů kompatibilní s S3 může vyžadovat další oprávnění operace rozhraní API nebo pro role obsahující oprávnění k operacím rozhraní API použít jiné názvy. Projděte si dokumentaci k produktu.

Povolení PolyBase

  1. Povolení PolyBase v sp_configure:

    EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1;
    GO
    RECONFIGURE
    GO
    
  2. Potvrďte nastavení:

    EXEC sp_configure @configname = 'polybase enabled';
    

Autentizace

Chcete-li pokračovat, zvolte základní ověřování nebo autorizaci předáním (STS).

Základní ověřování

Před vytvořením přihlašovacích údajů s vymezeným oborem databáze musí mít uživatelská databáze hlavní klíč pro ochranu přihlašovacích údajů. Další informace naleznete v tématu CREATE MASTER KEY.

Vytvoření přihlašovacích údajů s vymezeným oborem databáze pomocí základního ověřování

Následující ukázkový skript vytvoří přihlašovací údaje s vymezeným oborem databáze s3-dc v databázi database_name v instanci SQL Serveru. Další informace naleznete v tématu 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

Ověřte nové přihlašovací údaje s oborem působnosti databáze pomocí sys.database_scoped_credentials (Transact-SQL):

SELECT * FROM sys.database_scoped_credentials;

Vytvoření externího zdroje dat se základním ověřováním

Následující ukázkový skript vytvoří externí zdroj dat s3_ds ve zdrojové uživatelské databázi na SQL Serveru. Externí zdroj dat odkazuje na přihlašovací údaje s3_dc databáze s vymezeným oborem. Další informace naleznete v tématu CREATE EXTERNAL DATA SOURCE.

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

Ověřte nový externí zdroj dat pomocí sys.external_data_sources.

SELECT * FROM sys.external_data_sources;

Virtuální hostované adresy URL

Některé systémy úložiště kompatibilní se S3 (například Amazon Web Services) využívají k implementaci struktury složek v kontejneru S3 adresy URL stylu virtual_hosted. Přidejte následující CONNECTION_OPTIONS, aby bylo možné vytvářet externí tabulky odkazující na umístění složek v kontejneru S3, například CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'.

Bez tohoto nastavení CONNECTION_OPTIONS se při dotazování externích tabulek odkazujících na složku může zobrazit následující chyba:

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

Omezení základního ověřování

  • V případě úložiště objektů kompatibilního s S3 nemají zákazníci povoleno vytvářet ID přístupového klíče se znakem :.
  • Celková délka adresy URL je omezená na 259 znaků. To znamená, že s3://<hostname>/<objectkey> nesmí překročit 259 znaků. s3:// počítá do tohoto limitu, takže délka cesty nesmí překročit 259–5 = 254 znaků.
  • Název přihlašovacích údajů SQL je omezený 128 znaky ve formátu UTF-16.
  • Vytvořený název přihlašovacích údajů musí obsahovat název kontejneru, pokud se nejedná o nový externí zdroj dat.
  • ID přístupového klíče a ID tajného klíče musí obsahovat pouze alfanumerické hodnoty.

Prostupová autorizace (STS)

Úložiště objektů kompatibilní s S3 má možnost přiřadit dočasné přihlašovací údaje pomocí služby tokenů zabezpečení (STS). Tyto přihlašovací údaje jsou krátkodobé a dynamicky generované.

Prostupná autorizace spoléhá na službu Active Directory Federation Service (ADFS) fungující jako poskytovatel identity OpenID Connect (OIDC); služba ADFS má za úkol komunikovat se službou STS kompatibilní se S3, požádat službu STS a poskytnout ji zpět serveru SQL Server.

Použití předávacího ověřování (STS) na SQL Serveru

  1. Protokol TLS musí být nakonfigurovaný s certifikáty mezi SQL Serverem a hostitelským serverem kompatibilním s S3. Předpokládá se, že všechna připojení budou bezpečně přenášena přes PROTOKOL HTTPS, nikoli HTTP. Koncový bod bude ověřen certifikátem nainstalovaným na hostiteli operačního systému SQL Serveru. Podporují se veřejné certifikáty nebo certifikáty podepsané svým držitelem.

  2. Vytvořte přihlašovací údaje s vymezeným oborem databáze, které se použijí k předání identity do úložiště objektů kompatibilního s S3. Další informace naleznete v tématu CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Jako následující příklad:

    CREATE DATABASE SCOPED CREDENTIAL CredName
    WITH IDENTITY = 'User Identity'
    
  3. Vytvořte externí zdroj dat pro přístup k úložišti objektů kompatibilním s S3. K poskytnutí potřebných informací pro ADFS a STS použijte formát JSON CONNECTION_OPTIONS. Další informace naleznete v tématu CREATE EXTERNAL DATA SOURCE. Jako následující příklad:

    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 možnosti určují koncový bod přenosu Windows a identifikátor relying_party SQL Serveru v ADFS.
  • STS možnosti určují S3-kompatibilní koncový bod a parametry úložiště objektů STS pro žádost AssumeRoleWithWebIdentity. AssumeRoleWithWebIdentity je metoda použitá k získání dočasných přihlašovacích údajů zabezpečení používaných k ověření. Úplný seznam parametrů, včetně nepovinných hodnot, a informace o výchozích hodnotách najdete v referenčních informacích k rozhraní STS API.

Použití předávací autorizace (STS) se službou Active Directory

  • Označte vlastnosti uživatelských účtů SQL Serveru v AD jako nesmyslné, aby bylo možné předávat do úložiště kompatibilního s S3.
  • Povolit omezené delegování Kerberos na služby ADFS pro uživatele souvisejícího s názvy hlavních služeb (SPN) SQL Serveru.

Použití předávací autorizace (STS) se službou Active Directory Federation Service

  • Povolte, aby se SQL Server stal důvěryhodným zprostředkovatelem deklarací ve službě Active Directory.
  • Povolte ověřování intranetových oken jako metody ověřování pro ADFS.
  • Povolte koncový bod služby Windows Transport Service ve vaší intranetové síti.
  • Povolte koncové body OIDC (OpenID Connect).
  • Zaregistrujte SQL Server jako důvěryhodnou spolehlivou stranu .
    • Zadejte jedinečný identifikátor.
    • Nastavte pravidla deklarací identity pro JWT (webový token JSON).
  • Vlastní deklarace identity – Tyto deklarace identity můžou přidat zákazníci, pokud jsou potřeba k určení zásad přístupu na straně úložiště.
  • Pokud potřebujete další informace specifické pro dodavatele, obraťte se na svého poskytovatele platformy kompatibilního s S3.

Použití předávací autorizace (STS) v úložišti objektů kompatibilním s S3

  • Postupujte podle dokumentace od zprostředkovatele úložiště kompatibilního s S3 a nastavte externího zprostředkovatele identity OIDC. K nastavení zprostředkovatele identity jsou obvykle potřeba následující hodnoty.

    • Koncový bod konfigurace zprostředkovatele OIDC
    • Kryptografický otisk zprostředkovatele OIDC.
    • Předávací autorizace do úložiště objektů kompatibilního se S3

Omezení předávací autorizace (STS - Systém přenosu)

  • Předávací autorizace (STS) pro objektové úložiště kompatibilní s S3 je podporována pro přihlášení k SQL Serveru s ověřováním ve Windows.
  • Tokeny služby STS nelze použít pro BACKUP k URL pro úložiště objektů kompatibilní s formátem S3.
  • ADFS a SQL Server musí být ve stejné doméně. Koncový bod přenosu ADFS pro Windows by měl být zakázán z extranetu.
  • Služba AD FS by měla mít stejný AD (Active Directory) jako SQL Server jako poskytovatel důvěry.
  • Úložiště kompatibilní se S3 by mělo mít službu koncových bodů STS, která klientům umožňuje požadovat dočasné přístupové údaje pomocí JWT externích identit.
  • Dotazy OPENROWSET a CETAS (Vytvořit externí tabulku jako výběr) jsou podporované pro formát Parquet a CSV.
  • Ve výchozím nastavení je doba prodloužení lístku Kerberos sedm dní a životnost je 10 hodin na Windows a 2 hodiny na Linuxu. SQL Server prodlouží token Kerberos uživatele až sedm dní. Po sedmi dnech vyprší platnost lístku uživatele, takže průchozí úložiště kompatibilní s S3 selže. V takovém případě musí SQL Server znovu ověřit uživatele, aby získal nový lístek Kerberos.
  • Podporuje se ADFS 2019 s Windows Serverem 2019.
  • Volání rozhraní REST API S3 používají podpis AWS verze 4.

PolyBase na SQL Serveru v Linuxu

Pro PolyBase na SQL Serveru v Linuxu je potřeba další konfigurace.

  • Musí být nakonfigurovaný protokol TLS. Předpokládá se, že všechna připojení budou bezpečně přenášena přes PROTOKOL HTTPS, nikoli PŘES PROTOKOL HTTP. Koncový bod je ověřen certifikátem nainstalovaným na hostiteli operačního systému SQL Serveru.
  • Správa certifikátů se v Linuxu liší. Dodržujte a prostudujte konfiguraci podrobně popsanou v podpoře pro Linux úložišť kompatibilních se S3.