Exécuter des requêtes fédérées sur Amazon RDS pour PostgreSQL (authentification IAM)
Cette page décrit comment configurer Databricks Lakehouse Federation pour exécuter des requêtes fédérées sur Amazon RDS pour PostgreSQL en utilisant l’authentification AWS Identity and Access Management (IAM) au lieu d’un nom d’utilisateur et d’un mot de passe. L’authentification utilise un identifiant de service Unity Catalog qui fait référence à un rôle IAM AWS. Pour une configuration générale de la fédération PostgreSQL avec nom d’utilisateur et mot de passe, consultez Run federated queries on PostgreSQL.
L’authentification IAM pour Amazon RDS pour PostgreSQL est disponible uniquement sur Databricks sur AWS, car elle repose sur un rôle IAM AWS référencé par un identifiant de service.
Avant de commencer
Avant de pouvoir exécuter des requêtes fédérées sur Amazon RDS pour PostgreSQL à l’aide de l’authentification IAM, vous devez remplir les conditions suivantes.
Exigences Databricks
- Un Workspace activé pour Unity Catalog.
- Compute Databricks utilisant Databricks Runtime 18 LTS ou version ultérieure et le mode d’accès Standard ou Dedicated .
- Le privilège
CREATE CONNECTIONsur le métastore Unity Catalog attaché au workspace. - Le privilège
CREATE SERVICE CREDENTIALsur le métastore.
Exigences AWS
- Une instance Amazon RDS pour PostgreSQL.
- La possibilité de créer des rôles et des politiques IAM.
- Autorisation de se connecter à l'instance RDS pour créer des utilisateurs de base de données.
Configurer l’authentification IAM AWS
Effectuez les étapes suivantes dans AWS pour activer l’authentification IAM sur votre instance RDS pour PostgreSQL et créer l’utilisateur de base de données, la politique IAM et le rôle IAM que Unity Catalog utilise pour se connecter.
Étape 1 : Activez l’authentification IAM sur l’instance Amazon RDS
Créez ou modifiez votre instance RDS pour PostgreSQL afin d'activer l'authentification de base de données IAM. Pour obtenir des instructions, consultez Enabling and disabling IAM database authentication dans la documentation AWS.
Étape 2 : créer l’utilisateur de base de données Amazon RDS
Connectez-vous à l’instance RDS et créez un utilisateur de base de données qui s’authentifie à l’aide d’IAM. Pour PostgreSQL, accordez à l’utilisateur le rôle rds_iam :
CREATE USER db_userx;
GRANT rds_iam TO db_userx;
Accordez à l’utilisateur les privilèges dont il a besoin sur les bases de données et les tables que vous souhaitez interroger. Pour plus d’informations, consultez Créer un compte de base de données à l’aide de l’authentification IAM dans la documentation AWS.
Étape 3 : Configurez la politique IAM AWS
Créez une politique IAM qui autorise l'action rds-db:connect pour l'utilisateur de base de données que vous avez créé. Par exemple :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["rds-db:connect"],
"Resource": ["arn:aws:rds-db:us-west-2:111122223333:dbuser:db-ABCDEFGHIJKL01234/db_userx"]
}
]
}
L'ARN de la ressource utilise le format arn:aws:rds-db:<region>:<account-id>:dbuser:<DbiResourceId>/<db-user>. Le segment <DbiResourceId> doit être l'ID de ressource RDS (par exemple, db-ABCDEFGHIJKL01234), et non l'identifiant de l'instance de base de données. L'utilisation de l'identifiant d'instance entraîne une erreur d'accès refusé au moment de la connexion.
Pour trouver l’ID de la ressource, exécutez :
aws rds describe-db-instances --db-instance-identifier <instance-name> --query 'DBInstances[0].DbiResourceId'
Alternativement, trouvez l'ID de ressource sur l'onglet Configuration de votre instance de base de données dans la console Amazon RDS.
Pour plus d'informations, consultez Creating and using an IAM policy for IAM database access dans la documentation AWS.
Étape 4 : Créez le rôle IAM AWS
Créez un rôle IAM que Unity Catalog peut assumer pour s'authentifier auprès de votre base de données :
-
Dans la console AWS IAM, accédez à Rôles et cliquez sur Créer un rôle .
-
Pour Type d'entité approuvée , sélectionnez Politique de confiance personnalisée .
-
Dans l'éditeur Politique de confiance personnalisée , collez la politique suivante. Il s'agit d'un espace réservé : après avoir créé l'identifiant de service dans Databricks, vous le remplacez par la politique de confiance générée par Databricks. Les
PrincipaletActionsont requis ; le blocConditionest facultatif à ce stade.JSON{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": ["arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL"]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "0000"
}
}
}
]
} -
Cliquez sur Next . Sur la page Add permissions , sélectionnez la politique IAM que vous avez créée dans Set up the IAM policy.
-
Cliquez sur Suivant , saisissez un Nom du rôle , puis cliquez sur Créer un rôle .
-
Notez l'ARN du rôle. Vous le fournissez lorsque vous créez l'identifiant de service.
Pour plus d’informations sur les rôles IAM avec des politiques de confiance personnalisées, consultez Creating a role using custom trust policies dans la documentation AWS.
Étape 5 : Créer l’identifiant de service Databricks
Créez un identifiant de service Unity Catalog qui référence l’ARN du rôle IAM de l’étape précédente. Pour des étapes détaillées, consultez Créer des identifiants de service.
Après avoir créé l'identifiant de service, terminez la configuration de la politique de confiance du rôle IAM :
- Dans la boîte de dialogue Service credential created , copiez l'intégralité de la politique de confiance affichée, puis cliquez sur Done .
- Retournez à votre rôle IAM dans la console AWS, ouvrez l’onglet Trust relationships et remplacez la politique de confiance par défaut par celle que vous avez copiée. Cela ajoute l’ID externe de votre identifiant de service et permet au rôle de s’assumer lui-même.
Notez le nom de l'identifiant de service. Vous y faites référence lorsque vous créez la connexion.
Créer une connexion
Une connexion spécifie un chemin d’accès et des identifiants pour accéder à un système de base de données externe. Pour créer une connexion, vous pouvez utiliser Catalog Explorer ou la commande SQL CREATE CONNECTION dans un notebook Databricks ou dans l’éditeur de query Databricks SQL.
Vous pouvez également utiliser l’API REST Databricks ou la CLI Databricks pour créer une connexion. Voir POST /api/2.1/unity-catalog/connections et les commandes Unity Catalog.
Autorisations requises : administrateur de métastore ou utilisateur disposant du privilège CREATE CONNECTION.
- Catalog Explorer
- SQL
-
Dans votre workspace Databricks, cliquez sur
Catalog .
-
En haut du volet Catalog, cliquez sur
l’icône Add et sélectionnez Create a connection dans le menu.
-
Sur la page Bases des connexions de l’assistant Configurer la connexion , saisissez un Nom de connexion convivial.
-
Sélectionnez un Type de connexion PostgreSQL .
-
Pour Type d’authentification , sélectionnez Identifiant de service .
-
(Facultatif) Ajouter un commentaire.
-
Cliquez sur Suivant .
-
Sur la page Authentication , saisissez les propriétés de connexion suivantes pour votre instance PostgreSQL RDS :
- Hôte : Par exemple,
postgres-demo.lb123.us-west-2.rds.amazonaws.com - Port : Par exemple,
5432 - Utilisateur : L’utilisateur de base de données IAM que vous avez créé. Par exemple ,
db_userx - Région AWS : la région de l’instance RDS. Par exemple ,
us-west-2
- Hôte : Par exemple,
-
Cliquez sur Suivant .
-
Sur la page Connection details , pour Service credential , sélectionnez l'identifiant de service que vous avez créé dans Create the service credential.
-
Cliquez sur Créer une connexion .
-
Sur la page Bases du catalogue , saisissez un nom pour le catalogue étranger. Un catalogue étranger reflète une base de données dans un système de données externe afin que vous puissiez query et gérer l'accès aux données de cette base de données en utilisant Databricks et Unity Catalog.
-
(Facultatif) Cliquez sur Test connection pour confirmer que cela fonctionne.
-
Cliquez sur Créer un catalogue .
-
Sur la page Access , sélectionnez les workspaces dans lesquels les utilisateurs peuvent accéder au catalogue que vous avez créé. Vous pouvez sélectionner All workspaces have access , ou cliquer sur Assign to workspaces , sélectionner les workspaces, puis cliquer sur Assign .
-
Modifiez le propriétaire qui peut gérer l’accès à tous les objets du catalogue. Start à saisir un principal dans la zone de texte, puis cliquez sur le principal dans les résultats renvoyés.
-
Accordez des privilèges sur le catalogue. Cliquez sur Accorder :
-
Spécifiez les Principals qui auront accès aux objets du catalogue. Start à saisir un principal dans la zone de texte, puis cliquez sur le principal dans les résultats renvoyés.
-
Sélectionnez les préréglages de privilèges à accorder à chaque principal. Tous les utilisateurs du compte se voient accorder
BROWSEpar default.- Sélectionnez Data Reader dans le menu déroulant pour accorder des privilèges
readsur les objets du catalogue. - Sélectionnez Éditeur de données dans le menu déroulant pour accorder les privilèges
readetmodifysur les objets du catalogue. - Sélectionnez manuellement les privilèges à accorder.
- Sélectionnez Data Reader dans le menu déroulant pour accorder des privilèges
-
Cliquez sur Accorder .
-
-
Cliquez sur Suivant .
-
Sur la page Metadata , spécifiez les paires clé-valeur des tags. Pour plus d’informations, consultez Appliquer des tags aux objets sécurisables Unity Catalog.
-
(Facultatif) Ajouter un commentaire.
-
Cliquez sur Enregistrer .
Exécutez la commande suivante dans un notebook ou dans l'éditeur de requêtes Databricks SQL. Fournir l’option credential au lieu d’un mot de passe crée une connexion authentifiée par IAM.
CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
host '<hostname>',
port '<port>',
user '<iam-user>',
aws_region '<region>',
credential '<service-credential-name>'
);
Créer un catalogue étranger
Si vous utilisez l'interface utilisateur pour créer une connexion à la source de données, la création du catalogue étranger est incluse et vous pouvez ignorer cette étape.
Si vous utilisez l'interface utilisateur pour créer une connexion à la source de données, la création du catalogue étranger est incluse et vous pouvez ignorer cette étape.
Un catalogue étranger reflète une base de données dans un système de données externe afin que vous puissiez query et gérer l'accès aux données de cette base de données à l'aide de Databricks et d'Unity Catalog. Pour créer un catalogue étranger, vous utilisez une connexion à la source de données qui a déjà été définie.
Pour créer un catalogue étranger, vous pouvez utiliser Catalog Explorer ou la commande SQL CREATE FOREIGN CATALOG dans un notebook Databricks ou dans l'éditeur de requête SQL. Vous pouvez également utiliser l'API REST Databricks ou la CLI Databricks pour créer un catalogue. Voir POST /api/2.1/unity-catalog/catalogs et Unity Catalog commands.
Autorisations requises : autorisation CREATE CATALOG sur le métastore et soit la propriété de la connexion, soit le privilège CREATE FOREIGN CATALOG sur la connexion.
- Catalog Explorer
- SQL
-
Dans votre workspace Databricks, cliquez sur
Catalog pour ouvrir l’Explorateur de catalogues.
-
En haut du volet Catalogue, cliquez sur
l’icône Ajouter et sélectionnez Ajouter un catalogue dans le menu.
Alternativement, depuis la page Quick access , cliquez sur le bouton Catalogs , puis cliquez sur le bouton Create catalog .
-
Suivez les instructions de création de catalogues étrangers dans Créer des catalogues.
Exécutez la commande SQL suivante dans un notebook ou un éditeur de requêtes SQL. Les éléments entre crochets sont facultatifs. Remplacez les valeurs des espaces réservés :
<catalog-name>: Nom du catalogue dans Databricks.<connection-name>: L'objet de connexion qui spécifie la source de données, le chemin d'accès et les identifiants d'accès.<database-name>: nom de la base de données que vous souhaitez mettre en miroir en tant que catalogue dans Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');