Aller au contenu principal

Accéder à S3 avec la transmission des identifiants IAM avec SCIM (hérité)

important

Cette documentation a été retirée et pourrait ne pas être mise à jour.

L'authentification pass-through est obsolète à partir de Databricks Runtime 15,0 et sera supprimée dans les futures versions de Databricks Runtime. Databricks vous recommande de passer à Unity Catalog. Unity Catalog simplifie la sécurité et la gouvernance de vos données en fournissant un emplacement central pour administrer et auditer l'accès aux données dans plusieurs Workspaces de votre compte. Voir Qu'est-ce que Unity Catalog ?.

Le passthrough des identifiants IAM vous permet de vous authentifier automatiquement auprès des compartiments S3 depuis les clusters Databricks à l’aide de l’identité que vous utilisez pour vous connecter à Databricks. Lorsque vous activez la transmission des identifiants IAM pour votre cluster, les commandes que vous exécutez sur ce cluster peuvent lire et écrire des données dans S3 en utilisant votre identité. La transmission d'informations d'identification IAM présente deux avantages clés par rapport à la sécurisation de l'accès aux compartiments S3 à l'aide de profils d'instance:

  • Le transfert d'informations d'identification IAM permet à plusieurs utilisateurs avec différentes politiques d'accès aux données de partager un cluster Databricks pour accéder aux données dans S3 tout en maintenant la sécurité des données. Un profil d'instance peut être associé à un seul rôle IAM. Ceci impose à tous les utilisateurs d'un cluster Databricks de partager ce rôle et les stratégies d'accès aux données de ce rôle.
  • La transmission des identifiants IAM associe un utilisateur à une identité. Ceci active à son tour la journalisation des objets S3 via CloudTrail. Tout accès S3 est directement lié à l'utilisateur via l'ARN dans les Logs CloudTrail.

Exigences

  • Plan Premium ou supérieur.
  • Accès administrateur AWS à :
    • Rôles et politiques IAM dans le compte AWS du déploiement Databricks.
    • Compte AWS du compartiment S3.
    • Accès administrateur Databricks pour configurer les profils d'instance.

Configurer un profil d'instance méta

Pour utiliser la transmission d’informations d’identification IAM, vous devez d’abord configurer au moins un *profil d'instance méta* pour assumer les rôles IAM que vous attribuez à vos utilisateurs.

Un rôle IAM est une identité AWS dotée de politiques qui déterminent ce que l'identité peut ou ne peut pas faire dans AWS. Un profil d'instance est un conteneur pour un rôle IAM que vous pouvez utiliser pour transmettre les informations de rôle à une instance EC2 lorsque l'instance démarre. Les profils d'instance vous permettent d'accéder aux données des clusters Databricks sans avoir à intégrer vos clés AWS dans les Notebooks.

Bien que les profils d'instance simplifient grandement la configuration des rôles sur les clusters, un profil d'instance ne peut être associé qu'à un seul rôle IAM. Cela exige que tous les utilisateurs d'un cluster Databricks partagent ce rôle et les politiques d'accès aux données de ce rôle. Cependant, les rôles IAM peuvent être utilisés pour assumer d'autres rôles IAM ou pour accéder directement aux données eux-mêmes. L'utilisation des informations d'identification d'un rôle pour assumer un rôle différent est appelée chaînage de rôles.

La transmission des identifiants IAM permet aux administrateurs de scinder le rôle IAM que le profil d'instance utilise et les rôles que les utilisateurs utilisent pour accéder aux données. Dans Databricks, nous appelons le rôle d’instance le rôle IAM méta et le rôle d’accès aux données le rôle IAM de données . Similaire au profil d'instance, un profil d'instance méta est un conteneur pour un rôle IAM méta.

Profil d'instance méta

Les utilisateurs se voient accorder l'accès aux rôles IAM de données à l'aide de l'API SCIM. Si vous mappez des rôles avec votre fournisseur d'identité, alors ces rôles seront synchronisés avec l'API SCIM Databricks. Lorsque vous utilisez un cluster avec le passthrough d'informations d'identification et un profil d'instance méta, vous pouvez uniquement assumer les rôles IAM de données auxquels vous pouvez accéder. Cela permet à plusieurs utilisateurs ayant différentes politiques d'accès aux données de partager un cluster Databricks tout en sécurisant les données.

Cette section explique comment configurer le profil d'instance méta requis pour activer la transmission des identifiants IAM.

Étape 1 : configurez les rôles pour la transmission des identifiants IAM

Dans cette section :

Créer un rôle IAM de données

Utilisez un rôle IAM de données existant ou suivez éventuellement Didacticiel : Configurer l'accès S3 avec un profil d'instance pour créer un rôle IAM de données qui peut accéder aux compartiments S3.

Configurer un rôle IAM méta

Configurez votre méta-rôle IAM pour endosser le rôle IAM de données.

  1. Dans la console AWS, accédez au service IAM .

  2. Cliquez sur l’onglet tab dans la barre latérale.

  3. Cliquez sur Créer un rôle .

    1. Sous Sélectionnez le type d'entité de confiance , sélectionnez le service AWS .
    2. Cliquez sur le service **EC2**.
  4. Cliquez sur **Suivantes Autorisations**.

  5. Cliquez sur Créer une Policy . Une nouvelle fenêtre s'ouvre.

    1. Cliquez sur l'onglet JSON .

    2. Copiez la politique suivante et définissez <account-id> sur votre ID de compte AWS et <data-iam-role> sur le nom de votre rôle IAM de données de la section précédente.

      JSON
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "AssumeDataRoles",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": ["arn:aws:iam::<account-id>:role/<data-iam-role>"]
      }
      ]
      }
    3. Cliquez sur Consulter la politique .

    4. Dans le champ Nom, saisissez un nom de politique et cliquez sur Créer une politique .

  6. Retournez à la fenêtre de rôle et refresh-la.

  7. Recherchez le nom de la politique et cochez la case à côté du nom de la politique.

  8. Cliquez sur Étiquettes suivantes et Vérification suivante .

  9. Dans le champ Nom du rôle, saisissez un nom pour le rôle IAM méta.

  10. Cliquez sur Créer un rôle .

  11. Dans le résumé du rôle, copiez l'**ARN de profil d'instance**.

Configurer le rôle IAM des données pour faire confiance au rôle IAM méta

Pour que le rôle IAM meta puisse assumer le rôle IAM de données, vous faites en sorte que le rôle meta soit approuvé par le rôle de données.

  1. Dans la console AWS, accédez au service IAM .

  2. Cliquez sur l’onglet tab dans la barre latérale.

  3. Recherchez le rôle de données créé à l'étape précédente et cliquez dessus pour accéder à la page de détails du rôle.

  4. Cliquez sur l'onglet Trust relationships et ajoutez la déclaration suivante si elle n'est pas définie :

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "AWS": "arn:aws:iam::<account-id>:role/<meta-iam-role>"
    },
    "Action": "sts:AssumeRole"
    }
    ]
    }

Étape 2 : Configurez un profil d'instance méta dans Databricks

Cette section décrit comment configurer un profil d'instance méta dans Databricks.

Dans cette section :

Déterminez le rôle IAM utilisé pour le déploiement de Databricks

  1. Accédez à la console du compte.

  2. Cliquez sur l'icône Workspaces .

  3. Cliquez sur le nom de votre Workspace.

  4. Notez le nom du rôle à la fin de la clé ARN dans la section des identifiants, dans l'image ci-dessous, c'esttestco-role.

    ARN de rôle

Modifier la politique dans le rôle IAM utilisé pour le déploiement Databricks

  1. Dans la console AWS, accédez au service IAM .
  2. Cliquez sur l’onglet tab dans la barre latérale.
  3. Modifiez le rôle que vous avez noté dans la section précédente.
  4. Cliquez sur la politique associée au rôle.
  5. Modifiez la politique pour permettre aux instances EC2 des clusters Spark dans Databricks d'utiliser le profil d'instance méta que vous avez créé dans Configurer un rôle IAM méta. Pour un exemple, voir Étape 5 : Ajouter le rôle IAM S3 à la politique EC2.
  6. Cliquez sur **Examiner la politique** et **Enregistrer les modifications**.

Ajoutez le profil d'instance méta à Databricks

  1. Accédez à la page de paramètres.

  2. Sélectionnez l'onglet Instance Profiles tab.

  3. Cliquez sur le bouton **Ajouter un profil d'instance**. Une boîte de dialogue apparaît.

  4. Collez l'ARN du profil d'instance pour le rôle IAM méta depuis Configurer un rôle IAM méta.

  5. Cochez la case **Profil d'instance méta** et cliquez sur **Ajouter**.

    Ajouter un profil d&#39;instance

  6. Identifiez facultativement les utilisateurs qui peuvent lancer des clusters avec le profil d'instance méta.

    Configurez le profil d&#39;instance.

Étape 3 : Attacher les permissions du rôle IAM aux utilisateurs Databricks

Il existe deux façons de gérer le mappage des utilisateurs aux rôles IAM :

Utilisez le tableau suivant pour vous aider à décider quelle méthode de mappage est la mieux adaptée à votre Workspace :

Exigence

SCIM

Fournisseur d'identité

Single Sign On pour Databricks

Non

Oui

Configurer le fournisseur d'identité AWS

Non

Oui

Configurer le profil d'instance méta

Oui

Oui

Administrateur du workspace Databricks

Oui

Oui

Administrateur AWS

Oui

Oui

Administrateur du fournisseur d'identité

Non

Oui

Exigence

SCIM

Fournisseur d'identité

Single Sign On pour Databricks

Non

Oui

Configurer le fournisseur d'identité AWS

Non

Oui

Configurer le profil d'instance méta

Oui

Oui

Administrateur du workspace Databricks

Oui

Oui

Administrateur AWS

Oui

Oui

Administrateur du fournisseur d'identité

Non

Oui

Lorsque vous start un cluster avec un profil d'instance méta, le cluster transmettra votre identité et n'assumera que les rôles IAM de données auxquels vous pouvez accéder. Un administrateur doit accorder aux utilisateurs des autorisations sur les rôles IAM de données en utilisant les méthodes de l'API SCIM pour définir les autorisations sur les rôles.

remarque

Si vous mappez des rôles au sein de votre IdP, ces rôles remplaceront tous les rôles mappés au sein de SCIM et vous ne devez pas mapper les utilisateurs directement aux rôles. Consultez Étape 6 : Configuration facultative de Databricks pour synchroniser les mappages de rôles de SAML vers SCIM.

Vous pouvez également associer un profil d'instance à un utilisateur ou à un groupe avec le fournisseur Databricks Terraform et databricks_user_role ou databricks_group_instance_profile.

Lancer un cluster de transmission des identifiants IAM

La procédure de lancement d'un cluster avec transmission des identifiants diffère selon le mode de cluster.

Activer la transmission des informations d'identification pour un cluster à high concurrency

Les clusters High Concurrency peuvent être partagés par plusieurs utilisateurs. Ils ne prennent en charge que Python et SQL avec transmission.

  1. Lorsque vous créez un cluster, définissez le Mode de cluster sur Haute simultanéité.

  2. Choisissez une version de Databricks Runtime 6,1 ou supérieure.

  3. Sous Options avancées , sélectionnez Activer la transmission des informations d’identification pour l’accès aux données au niveau de l’utilisateur et autoriser uniquement les commandes Python et SQL .

    Activez le passthrough des informations d&#39;identification pour les clusters High Concurrency

  4. Cliquez sur l'onglet tab . Dans la liste déroulante Profil d'instance , choisissez le méta-profil d'instance que vous avez créé dans Ajouter le méta-profil d'instance à Databricks.

    Sélectionnez un profil d&#39;instance

Activez la transmission des identifiants IAM pour un cluster Standard

Les clusters standard avec transmission des identifiants sont pris en charge et sont limités à un seul utilisateur. Les clusters standard prennent en charge Python, SQL, Scala et R. Sur Databricks Runtime 10.4 LTS et versions ultérieures, sparklyr est également pris en charge.

Vous devez assigner un utilisateur lors de la création du cluster, mais le cluster peut être modifié par un utilisateur disposant des autorisations CAN MANAGE à tout moment pour remplacer l'utilisateur d'origine.

important

L'utilisateur assigné au cluster doit disposer au minimum de l'autorisation CAN ATTACH TO pour le cluster afin d'exécuter des commandes sur le cluster. Les administrateurs du Workspace et le créateur du cluster ont les autorisations CAN MANAGE, mais ne peuvent pas exécuter de commandes sur le cluster, sauf s'ils sont l'utilisateur désigné du cluster.

  1. Lorsque vous créez un cluster, définissez le Mode de cluster sur Standard.

  2. Choisissez une version de Databricks Runtime 6,1 ou supérieure.

  3. Sous Options avancées , sélectionnez Activer la transmission des identifiants pour l'accès aux données au niveau de l'utilisateur .

    Activer la transmission des identifiants pour les clusters Standard

  4. Sélectionnez le nom d'utilisateur dans le menu déroulant Accès utilisateur unique .

    Sélectionner un utilisateur pour un accès utilisateur unique

  5. Cliquez sur l'onglet tab . Dans la liste déroulante Profil d'instance , sélectionnez le profil d'instance méta que vous avez créé dans Ajouter le profil d'instance méta à Databricks.

    Sélectionnez un profil d&#39;instance

Accédez à S3 à l'aide de la transmission des identifiants IAM

Vous pouvez accéder à S3 à l’aide de la transmission des informations d’identification, soit en assumant un rôle et en accédant directement à S3, soit en utilisant le rôle pour monter le compartiment S3 et accéder aux données via le point de montage.

Lire et écrire des données S3 à l'aide de la transmission des identifiants

Lire et écrire des données vers/depuis S3 :

Python
dbutils.credentials.assumeRole("arn:aws:iam::xxxxxxxx:role/<data-iam-role>")
spark.read.format("csv").load("s3a://prod-foobar/sampledata.csv")
spark.range(1000).write.mode("overwrite").save("s3a://prod-foobar/sampledata.parquet")

Utilisez dbutils avec un rôle :

Python
dbutils.credentials.assumeRole("arn:aws:iam::xxxxxxxx:role/<data-iam-role>")
dbutils.fs.ls("s3a://bucketA/")

Pour les autres méthodes dbutils.credentials, consultez Credentials utility (dbutils.credentials).

Monter un compartiment S3 sur DBFS à l'aide du transfert d'informations d'identification IAM

Pour les scénarios plus avancés où différents compartiments ou préfixes nécessitent des rôles différents, il est plus pratique d'utiliser les montages de compartiments Databricks pour spécifier le rôle à utiliser lors de l'accès à un chemin de compartiment spécifique.

Lorsque vous montez des données à l'aide d'un cluster avec transmission des identifiants IAM activée, toute lecture ou écriture vers le point de montage utilise vos identifiants pour s'authentifier auprès du point de montage. Ce point de montage sera visible par d'autres utilisateurs, mais les seuls utilisateurs qui auront un accès en lecture et écriture sont ceux qui :

  • Avoir accès au compte de stockage S3 sous-jacent via les rôles de données IAM
  • Utilisez un cluster activé pour le passthrough des informations d'identification IAM
Python
dbutils.fs.mount(
"s3a://<s3-bucket>/data/confidential",
"/mnt/confidential-data",
extra_configs = {
"fs.s3a.credentialsType": "Custom",
"fs.s3a.credentialsType.customClass": "com.databricks.backend.daemon.driver.aws.AwsCredentialContextTokenProvider",
"fs.s3a.stsAssumeRole.arn": "arn:aws:iam::xxxxxxxx:role/<confidential-data-role>"
})

Accéder aux données S3 dans un Job à l'aide de la transmission des identifiants IAM.

Pour accéder aux données S3 à l'aide de la transmission d'informations d'identification dans un job, configurez le cluster conformément à Lancer un cluster de transmission d'informations d'identification IAM lorsque vous sélectionnez un cluster nouveau ou existant.

Sélectionnez un profil d&#39;instance

Le cluster n'assumera que les rôles pour lesquels le propriétaire du Job a reçu l'autorisation, et ne pourra donc accéder qu'aux données S3 auxquelles le rôle a l'autorisation d'accéder.

Accéder aux données S3 à partir d’un client JDBC ou ODBC à l’aide de la transmission des identifiants IAM.

Pour accéder aux données S3 à l'aide de la transmission des identifiants IAM via un client JDBC ou ODBC, configurez le cluster conformément à Lancer un cluster de transmission des identifiants IAM et connectez-vous à ce cluster dans votre client. Le cluster n'assumera que les rôles pour lesquels l'utilisateur qui s'y connecte a reçu l'autorisation d' accéder, et ne pourra donc accéder qu'aux données S3 auxquelles l'utilisateur a l'autorisation d'accéder.

Pour spécifier un rôle dans votre query SQL, procédez comme suit :

SQL
SET spark.databricks.credentials.assumed.role=arn:aws:iam::XXXX:role/<data-iam-role>;

-- Access the bucket which <my-role> has permission to access
SELECT count(*) from csv.`s3://my-bucket/test.csv`;

Limitations connues

Les fonctionnalités suivantes ne sont pas prises en charge avec la transmission des identifiants IAM :

  • %fs (Veuillez utiliser la commande équivalente dbutils.fs à la place).

  • Table Access Control.

  • Les méthodes suivantes sur les objets SparkContext (sc) et SparkSession (spark) :

    • Méthodes obsolètes.
    • Des méthodes telles que addFile() et addJar() qui permettraient aux utilisateurs non-administrateurs d'appeler du code Scala.
    • Toute méthode qui accède à un système de fichiers autre que S3.
    • Anciennes APIs Hadoop (hadoopFile() et hadoopRDD()).
    • APIs de streaming, puisque les informations d'identification transmises expireraient pendant que le flux était toujours en cours d'exécution.
  • Les montages DBFS (/dbfs) sont disponibles uniquement dans Databricks Runtime 7.3 LTS et versions ultérieures. Les points de montage avec transmission des identifiants configurée ne sont pas pris en charge par ce chemin.

  • Bibliothèques à l'échelle du cluster nécessitant l'autorisation d'un profil d'instance de cluster pour le download. Seules les bibliothèques avec des chemins DBFS sont prises en charge.

  • Databricks Connect sur les clusters High Concurrency est disponible uniquement dans Databricks Runtime 7.3 LTS et versions ultérieures.

  • MLflow