Configurer PolyBase pour accéder aux données externes dans le stockage d’objets compatible S3

S’applique à : SQL Server 2022 (16.x)

Cet article explique comment utiliser PolyBase pour interroger des données externes dans le stockage d’objets compatible avec S3.

SQL Server 2022 (16.x) introduit la possibilité de se connecter à n’importe quel stockage d’objets compatible S3, il existe deux options disponibles pour l’authentification : l’authentification de base ou l’autorisation directe (également appelée autorisation STS).

L’authentification de base, également appelée informations d’identification statiques, exige que l’utilisateur stocke et access key idsecret key id dans SQL Server, il incombe à l’utilisateur de révoquer et de faire pivoter explicitement les informations d’identification chaque fois que nécessaire. Le contrôle d’accès précis exigerait que l’administrateur configure des informations d’identification statiques pour chaque connexion, cette approche peut être difficile lorsque vous traitez des dizaines ou des centaines d’informations d’identification uniques.

L’autorisation STS (Pass-through) offre une solution pour ces problèmes en permettant l’utilisation des identités de SQL Server propres utilisateurs pour accéder au stockage d’objets compatible S3. Le stockage d’objets compatible avec S3 a la possibilité d’attribuer des informations d’identification temporaires à l’aide du service STS (Secure Token Service). Ces informations d’identification sont abrégées et générées dynamiquement.

Cet article contient des instructions sur l’authentification de base et l’autorisation d’autorisation directe (STS).

Prérequis

Pour utiliser les fonctionnalités d’intégration de stockage d’objets compatibles avec S3, vous avez besoin des outils et ressources suivants :

  • Installez la fonctionnalité PolyBase pour SQL Server.
  • Installez SQL Server Management Studio (SSMS) ou Azure Data Studio.
  • Stockage compatible S3.
  • Compartiment S3 créé. Les compartiments ne peuvent pas être créés ni configurés à partir de SQL Server.
  • Un utilisateur (Access Key ID) et le secret (Secret Key ID) que vous connaissez. Vous devez vous authentifier auprès du point de terminaison de stockage d’objets S3.
  • Autorisation ListBucket sur l’utilisateur S3 pour parcourir les privilèges.
  • Autorisation ReadOnly sur l’utilisateur S3 pour les privilèges de lecture.
  • Autorisation WriteOnly sur l’utilisateur S3 pour les privilèges d’écriture.
  • Le protocole TLS (Transport Layer Security) doit être configuré. Il est supposé que toutes les connexions sont transmises de manière sécurisée par le protocole HTTPS et non HTTP. Le point de terminaison sera validé par un certificat installé sur l’hôte de système d’exploitation SQL Server. Pour plus d’informations sur TLS et les certificats, consultez Activer les connexions chiffrées au Moteur de base de données.

Autorisations

Pour permettre à l’utilisateur proxy de lire le contenu d’un compartiment S3, l’utilisateur doit être autorisé à effectuer les actions suivantes sur le point de terminaison S3 :

  • Dans AWS S3, créez un rôle personnalisé et indiquez spécifiquement l’API S3 qui nécessite un accès.
    • La sauvegarde nécessite ces autorisations : ListBucket (Parcourir), PutObject (Écriture - pour la sauvegarde).
    • La restauration nécessite ces autorisations : ListBucket (Parcourir), GetObject (lecture - pour restauration), GetObject (lecture - pour restauration).
  • Dans d’autres stockages compatibles S3 :
    • La sauvegarde nécessite que l’utilisateur (Access Key ID) dispose des autorisations ListBucket et WriteOnly .
    • La restauration nécessite que l’utilisateur (Access Key ID) dispose des autorisations ListBucket et ReadOnly .

Activer PolyBase

  1. Activez PolyBase dans sp_configure :

    EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1;
    GO
    RECONFIGURE
    GO
    
  2. Confirmez le paramètre :

    EXEC sp_configure @configname = 'polybase enabled';
    

Authentification

Pour continuer, choisissez l’autorisation d’authentification de base ou d’authentification directe (STS).

Authentification de base

Avant la création d’informations d’identification délimitées à la base de données, la base de données utilisateur doit avoir une clé principale pour protéger les informations d’identification. Pour plus d’informations, consultez CREATE MASTER KEY.

Créer des informations d’identification délimitées à une base de données avec l’authentification de base

L’exemple de script suivant crée des informations d’identification délimitées à s3-dc la base de données dans la database_name base de données dans une instance SQL Server. Pour plus d’informations, consultez 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

Vérifiez les nouvelles informations d’identification délimitées par la base de données avec sys.database_scoped_credentials (Transact-SQL) :

SELECT * FROM sys.database_scoped_credentials;

Créer une source de données externe avec l’authentification de base

L’exemple de script suivant illustre la création d’une source de données externe s3_ds dans la base de données utilisateur source au sein de SQL Server. La source de données externe fait référence aux informations d’identification de portée étendue à la base de données s3_dc. Pour plus d’informations, consultez CRÉER UNE SOURCE DE DONNÉES EXTERNES.

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

Vérifiez la nouvelle source de données externe avec sys.external_data_sources.

SELECT * FROM sys.external_data_sources;

Limitations de l’authentification de base

  1. Pour le stockage d’objets compatible avec S3, les clients ne sont pas autorisés à créer leur ID de clé d’accès avec un : caractère dans celui-ci.
  2. La longueur totale de l’URL est limitée à 259 caractères. Cela signifie que s3://<hostname>/<objectkey> ne doit pas dépasser 259 caractères. s3:// est déduit de cette limite, par conséquent, la longueur du chemin d’accès ne peut pas dépasser 259-5 = 254 caractères.
  3. Le nom des informations d’identification SQL est limité à 128 caractères au format UTF-16.
  4. Le nom des informations d’identification créé doit contenir le nom du compartiment, sauf si ces informations d’identification concernent une nouvelle source de données externe.
  5. L’ID de clé d’accès et l’ID de clé secrète doivent uniquement contenir des valeurs alphanumériques.

Autorisation de transmission directe (STS)

Le stockage d’objets compatible S3 a la possibilité d’attribuer des informations d’identification temporaires via l’utilisation du service STS (Secure Token Service). Ces informations d’identification sont abrégées et générées dynamiquement.

L’autorisation directe s’appuie sur le service de fédération Active Directory (ADFS) agissant en tant que fournisseur d’identité OpenID Connecter (OIDC), il est jusqu’à ADFS pour communiquer avec le STS de stockage d’objets compatible S3, demander le STS et le fournir à SQL Server.

Utiliser l’autorisation directe (STS) sur SQL Server

  1. TLS doit être configuré avec des certificats entre SQL Server et le serveur hôte compatible S3. Il est supposé que toutes les connexions seront transmises en toute sécurité via HTTPS, et non HTTP. Le point de terminaison sera validé par un certificat installé sur l’hôte de système d’exploitation SQL Server. Les certificats publics ou auto-signés sont pris en charge.

  2. Créez des informations d’identification délimitées à la base de données auxquelles l’identité sera utilisée pour passer l’identité au stockage d’objets compatible S3. Pour plus d’informations, consultez CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Comme exemple suivant :

    CREATE DATABASE SCOPED CREDENTIAL CredName
    WITH IDENTITY = 'User Identity'
    
  3. Créez une source de données externe pour accéder au stockage d’objets compatible S3. Utilisez CONNECTION_OPTIONS, en tant que format JSON, pour informer les informations requises pour les services ADFS et STS. Pour plus d’informations, consultez CRÉER UNE SOURCE DE DONNÉES EXTERNES. Comme exemple suivant :

    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 les options spécifient le point de terminaison de transport Windows et relying_party l’identificateur de SQL Server dans ADFS.
  • STS les options spécifient le point de terminaison stS et les paramètres de stockage d’objets compatibles S3 pour la AssumeRoleWithWebIdentity requête. Il AssumeRoleWithWebIdentity s’agit de la méthode utilisée pour acquérir les informations d’identification de sécurité temporaires utilisées pour l’authentification. Pour obtenir la liste complète des paramètres, y compris ceux facultatifs et des informations sur les valeurs par défaut, reportez-vous à la référence de l’API STS.

Utiliser l’autorisation directe (STS) avec Active Directory

  • Marquez les propriétés des comptes d’utilisateur SQL Server dans AD comme non sensibles pour autoriser le stockage pass-through vers le stockage compatible S3.
  • Autoriser la délégation Kerberos contrainte aux services ADFS pour l’utilisateur lié au SPN SQL Server (noms de principal de service).

Utiliser l’autorisation directe (STS) avec le service de fédération Active Directory

  • Permettre à SQL Server d’être une approbation de fournisseur de revendications dans Active Directory.
  • Autoriser l’authentification windows intranet en tant que méthodes d’authentification pour ADFS.
  • Activez le point de terminaison du service de transport Windows dans votre intranet.
  • Activez les points de terminaison OIDC (OpenID Connecter).
  • Inscrivez SQL Server en tant qu’approbation de partie de confiance.
    • Fournissez un identificateur unique.
    • Définissez des règles de revendications pour JWT (JSON Web Token).
  • Revendications personnalisées : ces revendications peuvent être ajoutées par les clients si elles sont nécessaires pour déterminer la stratégie d’accès côté stockage.
  • Pour plus d’informations spécifiques au fournisseur, case activée avec votre fournisseur de plateforme compatible S3.

Utiliser l’autorisation directe (STS) sur le stockage d’objets compatible S3

  • Suivez la documentation fournie par le fournisseur de stockage compatible S3 pour configurer le fournisseur d’identité OIDC externe. Pour configurer le fournisseur d’identité, principalement les valeurs suivantes sont généralement nécessaires.

    • Point de terminaison de configuration du fournisseur OIDC.
    • Empreinte numérique du fournisseur OIDC.
    • Autorisation directe vers le stockage d’objets compatible avec S3

Limitations de l’autorisation directe (STS)

  • L’autorisation directe (STS) vers le stockage d’objets compatible S3 est prise en charge pour les connexions SQL Server avec Authentification Windows.
  • Les jetons STS ne peuvent pas être utilisés pour BACKUP vers l’URL pour le stockage d’objets compatible avec S3.
  • ADFS et SQL Server doivent se trouver dans le même domaine. Le point de terminaison de transport Windows ADFS doit être désactivé à partir de l’extranet.
  • ADFS doit avoir le même AD (Active Directory) que SQL Server comme fournisseur d’approbation de revendication.
  • Le stockage compatible S3 doit avoir un service de point de terminaison STS qui permet aux clients de demander des informations d’identification temporaires à l’aide de JWT d’identités externes.
  • Les requêtes OPENROWSET et CETAS (Créer une table externe en tant que sélection) sont prises en charge pour le format Parquet et CSV.
  • Par défaut, la durée de renouvellement des tickets Kerberos est de sept jours et la durée de vie est de 10 heures sur Windows et 2 heures sur Linux. SQL Server renouvelle le jeton Kerberos de l’utilisateur jusqu’à sept jours. Après sept jours, le ticket de l’utilisateur expire, par conséquent, le stockage compatible avec S3 échoue. Dans ce cas, SQL Server doit réauthentifier l’utilisateur pour obtenir un nouveau ticket Kerberos.
  • ADFS 2019 avec Windows Server 2019 sera pris en charge.
  • Les appels d’API REST S3 utilisent la signature AWS version 4.