Exécuter des requêtes fédérées sur Amazon Redshift (authentification IAM)
Configurez Databricks Lakehouse Federation pour exécuter des federated queries sur Amazon Redshift à l'aide de l'authentification AWS Identity and Access Management (IAM) au lieu d'un nom d'utilisateur et d'un mot de passe. L'authentification utilise une information d'identification de service Unity Catalog qui fait référence à un rôle IAM AWS. Pour la configuration générale de la fédération Redshift avec un nom d'utilisateur et un mot de passe, consultez Exécuter des federated queries sur Amazon Redshift.
L’authentification IAM pour Amazon Redshift n’est disponible que sur Databricks sur AWS, car elle s’appuie sur un rôle IAM AWS référencé par un identifiant de service.
Avant de commencer
Avant d'exécuter des requêtes fédérées sur Amazon Redshift à l'aide de l'authentification IAM, vous devez satisfaire aux exigences suivantes.
Configuration requise pour Databricks
- Un workspace configuré pour Unity Catalog.
- Le compute Databricks qui utilise Databricks Runtime 19 ou une version ultérieure et le mode d'accès Standard ou Dédié .
- Le privilège
CREATE CONNECTIONsur le métastore Unity Catalog attaché au Workspace. - Le privilège
CREATE SERVICE CREDENTIALsur le métastore.
Exigences AWS
- Un cluster provisionné Amazon Redshift ou un groupe de travail Serverless.
- Connectivité réseau depuis votre workspace Databricks vers le cluster ou le groupe de travail. Consultez Recommandations réseau pour Lakehouse Federation.
- La possibilité de créer des rôles et des politiques IAM.
Choisissez un mode d'authentification
L'authentification IAM Redshift prend en charge trois modes. Choisissez celui qui correspond à votre déploiement Redshift, car il détermine l'action IAM que vous accordez et l'indication ou non de la création d'un utilisateur de base de données :
- DB User (
redshift:GetClusterCredentials) : pour les clusters provisionnés. Exige un utilisateur de base de données explicite que vous créez dans Redshift. - Group Federation (
redshift:GetClusterCredentialsWithIAM) : pour les clusters de provisionnement. Databricks déduit l'identité de la base de données à partir du rôle IAM, de sorte que vous ne créez pas d'utilisateur. - Serverless (
redshift-serverless:GetCredentials) : pour Redshift Serverless. L'identité de la base de données est dérivée automatiquement, comme la fédération de groupes.
Configurer l'authentification IAM AWS
Effectuez les étapes suivantes dans AWS pour créer l’utilisateur de base de données, la politique IAM et le rôle IAM qu’utilise Unity Catalog pour se connecter.
Étape 1 : Configurer l'identité de la base de données Redshift
Pour le mode utilisateur DB, connectez-vous à votre cluster Redshift et créez un utilisateur de base de données avec l'authentification par mot de passe désactivée, puis accordez-lui les privilèges nécessaires. Vous pouvez exécuter ces commandes à partir de la page Query data > Query in query editor du cluster.
CREATE USER iam_user PASSWORD DISABLE;
GRANT ALL ON DATABASE dev TO iam_user;
GRANT USAGE ON SCHEMA public TO iam_user;
GRANT ALL ON ALL TABLES IN SCHEMA public TO iam_user;
Pour les modes Group Federation et Serverless, ignorez l'instruction CREATE USER. Databricks dérive automatiquement l'identité de la base de données. L'identité dérivée a toujours besoin de privilèges au sein de la base de données ; par conséquent, accordez à cette identité, ou à un groupe ou rôle Redshift auquel elle appartient, les privilèges requis par vos queries. Sans eux, la connexion s'authentifie, mais les queries fédérées échouent avec une erreur d'autorisation.
Étape 2 : Configurer la politique IAM AWS
Créez une politique IAM qui autorise l'action de récupération d'identifiants pour votre mode d'authentification.
- DB User
- Group Federation
- Serverless
Pour les clusters provisionnés, autorisez redshift:GetClusterCredentials sur le cluster, l’utilisateur de la base de données et la base de données :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RedshiftDbUser",
"Effect": "Allow",
"Action": ["redshift:GetClusterCredentials"],
"Resource": [
"arn:aws:redshift:<region>:<account-id>:cluster:<cluster-name>",
"arn:aws:redshift:<region>:<account-id>:dbuser:<cluster-name>/<db-user>",
"arn:aws:redshift:<region>:<account-id>:dbname:<cluster-name>/<database>"
]
}
]
}
Pour les clusters provisionnés, autorisez redshift:GetClusterCredentialsWithIAM sur le cluster et la base de données. L’identité de la base de données provient du rôle IAM, aucun ARN dbuser n’est donc requis :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RedshiftGroupFederation",
"Effect": "Allow",
"Action": ["redshift:GetClusterCredentialsWithIAM"],
"Resource": [
"arn:aws:redshift:<region>:<account-id>:cluster:<cluster-name>",
"arn:aws:redshift:<region>:<account-id>:dbname:<cluster-name>/<database>"
]
}
]
}
Pour Redshift Serverless, autorisez redshift-serverless:GetCredentials sur le groupe de travail. Cette action se trouve dans l’espace de noms redshift-serverless et s’applique à un ARN de groupe de travail, et non aux ressources de clusters provisionnés utilisées par les autres modes :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RedshiftServerless",
"Effect": "Allow",
"Action": ["redshift-serverless:GetCredentials"],
"Resource": ["arn:aws:redshift-serverless:<region>:<account-id>:workgroup/<workgroup-id>"]
}
]
}
Pour plus d’information, consultez les rubriques Using IAM authentication to generate database user credentials et Security and connections in Amazon Redshift Serverless dans la documentation AWS.
Étape 3 : créer le rôle IAM AWS
Créez un rôle IAM que Unity Catalog peut assumer pour s'authentifier auprès de Redshift :
-
Dans la console AWS IAM, accédez à Roles et cliquez sur Create role .
-
Sous Type d'entité de confiance , sélectionnez Politique de confiance personnalisée .
-
Dans l'éditeur de politique de confiance personnalisée , collez la politique suivante. Il s'agit d'un espace réservé. Une fois que vous avez créé l'identifiant de service dans Databricks, remplacez-le 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 Suivant . Sur la page Ajouter des autorisations , sélectionnez la politique IAM que vous avez créée dans Configurer la politique IAM AWS.
-
Cliquez sur Next , saisissez un Role name , puis cliquez sur Create role .
-
Notez l’ARN du rôle. Vous le fournissez lorsque vous créez l’identifiant de service.
Pour en savoir plus sur les rôles IAM dotés de politiques de confiance personnalisées, consultez la section Création d’un rôle à l’aide de politiques de confiance personnalisées dans la documentation AWS.
Étape 4 : 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 obtenir des étapes détaillées, consultez la page Créer des identifiants de service.
Une fois que vous avez 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 .
- Revenez à votre rôle IAM dans la console AWS, ouvrez l'onglet Trust relationships et remplacez la politique de confiance de substitution par celle que vous avez copiée. Cette action ajoute l'identifiant externe de votre identifiant de service et rend le rôle auto-assumé.
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 l'Explorateur de catalogues (Catalog Explorer), la commande SQL CREATE CONNECTION dans un notebook Databricks ou l'éditeur de queries Databricks SQL.
Vous pouvez également utiliser l'API REST Databricks ou la CLI Databricks pour créer une connexion. Consultez POST /api/2.1/unity-catalog/connections et les commandes Unity Catalog.
Permissions 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 Catalogue, cliquez sur l’icône
Ajouter et sélectionnez Créer une connexion dans le menu.
-
Sur la page Bases des connexions de l’assistant Configurer la connexion , saisissez un Nom de la connexion convivial.
-
Sélectionnez un Connection type défini sur Redshift .
-
Pour le Type d’authentification , sélectionnez Identifiant de service .
-
(Facultatif) Ajoutez un commentaire.
-
Cliquez sur Suivant .
-
Sur la page Authentication , saisissez les propriétés de connexion suivantes pour votre cluster ou groupe de travail Redshift :
- Hôte : par exemple,
redshift-demo.us-west-2.redshift.amazonaws.com - Port : par exemple,
5439 - User : pour le mode utilisateur de base de données (DB User), l'utilisateur de base de données que vous avez créé. Par exemple,
iam_user. Laissez ce champ vide pour les modes Group Federation et Serverless.
- Hôte : par exemple,
-
Cliquez sur Suivant .
-
Sur la page Connection details , sélectionnez le mode d’authentification ( DB User , Group Federation ou Serverless ), puis pour Service credential , sélectionnez l’identifiant de service que vous avez créé dans Create the service credential.
-
Cliquez sur Create connection .
-
Sur la page Catalog basics , 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 à l'aide de Databricks et de Unity Catalog.
-
(Facultatif) Cliquez sur Test de la connexion pour vérifier qu’elle fonctionne.
-
Cliquez sur Create catalog .
-
Sur la page Accès , sélectionnez les workspaces dans lesquels les utilisateurs peuvent accéder au catalogue que vous avez créé. Vous pouvez sélectionner Tous les workspaces ont accès , ou cliquer sur Attribuer aux espaces de travail , sélectionner les workspaces, puis cliquer sur Attribuer .
-
Modifiez le ou la 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 attribuer
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 Grant .
-
-
Cliquez sur Suivant .
-
Sur la page Metadata , spécifiez les paires clé-valeur des tags. Pour plus d'informations, consultez la rubrique Apply tags to Unity Catalog securable objects.
-
(Facultatif) Ajoutez 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. Définissez auth_mode pour correspondre à votre déploiement Redshift, et définissez user uniquement pour le mode db_user.
-- db_user mode (provisioned cluster)
CREATE CONNECTION <connection-name> TYPE redshift
OPTIONS (
host '<hostname>',
port '<port>',
user '<iam-user>',
auth_mode 'db_user',
credential '<service-credential-name>'
);
-- group_federation mode (provisioned cluster)
CREATE CONNECTION <connection-name> TYPE redshift
OPTIONS (
host '<hostname>',
port '<port>',
auth_mode 'group_federation',
credential '<service-credential-name>'
);
-- serverless mode (Redshift Serverless)
CREATE CONNECTION <connection-name> TYPE redshift
OPTIONS (
host '<hostname>',
port '<port>',
auth_mode 'serverless',
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 de 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 de 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 exécuter des 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 externe, vous pouvez utiliser l'Explorateur de catalogue ou la commande SQL CREATE FOREIGN CATALOG dans un Notebook Databricks ou l'éditeur de requêtes 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 les commandes Unity Catalog.
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 catalogue.
-
En haut du volet Catalog, cliquez sur
l'icône Add et sélectionnez Add a catalog dans le menu.
Vous pouvez également, depuis la page Quick access , cliquer sur le bouton Catalogs , puis sur le bouton Create catalog .
-
Suivez les instructions de création de catalogues étrangers dans Create catalogs.
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 et les identifiants d'accès.<database-name>: nom de la base de données que vous souhaitez mettre en miroir sous forme de catalogue dans Databricks.
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');