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 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 pass-through (également appelée autorisation STS).

L’authentification de base, également appelée informations d’identification statiques, exige que l’utilisateur stocke les access key id et secret key id dans SQL Server. Il revient à l’utilisateur de révoquer et de faire pivoter explicitement les informations d’identification chaque fois que cela est 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 présenter des difficultés lors du traitement de dizaines ou de centaines d’informations d’identification uniques.

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

Cet article contient des instructions pour l’authentification de base et l’autorisation pass-through (STS).

Prérequis

Pour utiliser les fonctionnalités d’intégration du stockage d’objets compatible 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.
  • 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 le protocole TLS et les certificats, consultez Activer les connexions chiffrées au moteur de base de données.

Autorisations

Pour que l’utilisateur proxy puisse lire le contenu d’un compartiment S3, l’utilisateur (Access Key ID) doit être autorisé à effectuer les actions suivantes sur le point de terminaison S3 :

  • Les autorisations GetBucketLocation et GetObject sont nécessaires pour lire un fichier spécifique à partir du stockage d’objets S3.
    • ListBucket est requis pour les tables externes ou les requêtes OPENROWSET qui pointent vers un emplacement de dossier S3, au lieu d’un seul fichier. Sans autorisations ListBucket, vous recevrez l’erreur 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.
  • L’autorisation PutObject est nécessaire pour écrire dans le stockage d’objets S3.

Conseil

Votre fournisseur de stockage d’objets compatible S3 peut exiger des autorisations d’opération d’API supplémentaires ou utiliser différents noms pour les rôles contenant des autorisations pour les opérations d’API. Consultez la documentation de votre produit.

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 Authentification de base ou Autorisation pass-through (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 par la base de données avec l’authentification de base

L’exemple de script suivant crée un s3-dc d’informations d’identification délimitées par la base de données dans la base de données database_name 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

  • Pour le stockage d’objets compatible S3, les clients ne sont pas autorisés à créer leur ID de clé d’accès comportant un caractère :.
  • 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.
  • Le nom des informations d’identification SQL est limité à 128 caractères au format UTF-16.
  • 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.
  • L’ID de clé d’accès et l’ID de clé secrète doivent uniquement contenir des valeurs alphanumériques.

Autorisation pass-through (STS)

Le stockage d’objets compatible S3 offre la possibilité d’attribuer des informations d’identification temporaires en utilisant le service d’émission de jeton de sécurité (STS). Ces informations d’identification sont à court terme et générées dynamiquement.

L’autorisation pass-through s’appuie sur le service de fédération Active Directory (ADFS) agissant en tant que fournisseur d’identité OpenID Connecter (OIDC). Il revient au service ADFS de communiquer avec le STS de stockage d’objets compatible S3, de demander le STS et le fournir de nouveau à SQL Server.

Utiliser l’autorisation pass-through (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 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. Les certificats publics ou auto-signés sont pris en charge.

  2. Créez des informations d’identification délimitées par la base de données qui seront utilisées pour transférer l’identité au stockage d’objets compatible S3. Pour plus d’informations, consultez CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Comme l’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 fournir les informations requises pour les services ADFS et STS. Pour plus d’informations, consultez CRÉER UNE SOURCE DE DONNÉES EXTERNES. Comme l’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"
                } ]
        }' ]
    }
    
  • Les options ADFS spécifient le point de terminaison de transport Windows et l’identifiant relying_party de SQL Server dans ADFS.
  • Les options STS spécifient le point de terminaison et les paramètres STS de stockage d’objets compatibles S3 pour la requête AssumeRoleWithWebIdentity. AssumeRoleWithWebIdentity est 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 API STS.

Utiliser l’autorisation pass-through (STS) avec Active Directory

  • Marquez les propriétés des comptes d’utilisateur SQL Server dans AD comme non sensibles pour autoriser 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 du service).

Utiliser l’autorisation pass-through (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 Connect).
  • Inscrivez SQL Server en tant que partie de confiance.
    • Fournissez un identifiant 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, renseignez-vous auprès de votre fournisseur de plateforme compatible S3.

Utiliser l’autorisation pass-through (STS) sur le stockage d’objets compatible S3

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

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

Limitations de l’autorisation pass-through (STS)

  • L’autorisation pass-through (STS) vers le stockage d’objets compatible S3 est prise en charge pour les comptes de connexion SQL Server avec authentification Windows.
  • Les jetons STS ne peuvent pas être utilisés pour la SAUVEGARDE vers une URL pour le stockage d’objets compatible 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 en tant que fournisseur d’approbation de revendications.
  • 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 la méthode 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, le délai 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 pass-through vers le stockage d’objets compatible S3 échoue. Dans ce cas, SQL Server doit réauthentifier l’utilisateur pour qu’il obtienne un nouveau ticket Kerberos.
  • ADFS 2019 avec Windows Server 2019 est pris en charge.
  • Les appels d’API REST S3 utilisent la signature AWS version 4.

PolyBase sur SQL Server sur Linux

Pour PolyBase sur SQL Server sur Linux, une configuration supplémentaire est nécessaire.

  • Le protocole TLS 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 est validé par un certificat installé sur l’hôte de système d’exploitation SQL Server.
  • La gestion des certificats est différente sur Linux. Passez en revue et suivez la configuration détaillée dans le support Linux pour le stockage compatible S3.