Cette page explique comment configurer et utiliser la fédération des identités des employés (également appelée authentification IAM tierce) avec Cloud SQL. La fédération d'identité de personnel vous permet d'utiliser votre fournisseur d'identité (IdP) existant, tel que Microsoft Active Directory ou Okta, pour accéder aux instances Cloud SQL sans avoir besoin d'un compte Google .
Voici les principaux avantages de la fédération des identités des employés :
- Réduction des frais généraux : vous n'avez pas besoin de valider les domaines ni de synchroniser les identités avec Cloud Identity.
- Sécurité renforcée : gestion centralisée des accès aux bases de données via votre fournisseur d'identité d'entreprise existant.
- Facilité de mise à l'échelle : convient aux grandes entreprises ayant des besoins complexes en matière de gestion des identités.
Pour obtenir une description détaillée de la fédération des identités des employés, consultez la présentation de la fédération des identités des employés.
Fonctionnement
La fédération des identités des employés permet aux utilisateurs de s'authentifier auprès de Google Cloud à l'aide d'une identité externe. Pour Cloud SQL, cela signifie que les principaux d'un pool de charges de travail peuvent se connecter aux instances Cloud SQL pour MySQL.
Cloud SQL est compatible avec la fédération d'identité de personnel via le type d'utilisateur CLOUD_IAM_WORKFORCE_IDENTITY. Pour accorder l'accès, Cloud SQL valide vos identifiants professionnels et votre autorisation IAM au niveau du projet lors de la connexion.
Avant de commencer
Avant de configurer l'authentification de base de données pour la fédération des identités des employés, assurez-vous de remplir les conditions préalables suivantes :
- Installez la dernière version de gcloud CLI.
- Configurez un pool et un fournisseur de fédération d'identité de personnel dans votre organisation Google Cloud .
- Configurez l'emprunt d'identité d'un compte de service pour votre charge de travail.
- Assurez-vous que votre instance Cloud SQL exécute MySQL version 8.0 ou ultérieure.
Rôles et autorisations
Pour obtenir les autorisations nécessaires pour configurer et utiliser l'authentification par fédération d'identité des employés, demandez à votre administrateur de vous accorder les rôles IAM suivants sur l'organisation :
-
Gérer une instance :
Administrateur Cloud SQL (
roles/cloudsql.admin) -
Se connecter à l'instance :
Utilisateur d'instance Cloud SQL (
roles/cloudsql.instanceUser) -
Connectez-vous à une instance à l'aide du proxy d'authentification Cloud SQL :
Client Cloud SQL (
roles/cloudsql.client) -
Gérer les règles IAM : Administrateur IAM de projet (
roles/resourcemanager.projectIamAdmin)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Configurer l'authentification de la fédération des identités des employés
Les sections suivantes vous expliquent comment configurer votre instance pour utiliser l'authentification par fédération des identités des employés.
Activer l'authentification IAM sur l'instance
Pour activer l'authentification IAM, définissez l'indicateur cloudsql_iam_authentication sur on.
Console
-
Dans la console Google Cloud , accédez à la page Instances Cloud SQL.
- Pour ouvrir la page Présentation d'une instance, cliquez sur son nom.
- Cliquez sur Modifier.
- Développez la section Personnaliser votre instance.
- Développez la section Connexions.
- Sous Sécurité, cochez la case Activer l'authentification IAM Cloud SQL.
- Cliquez sur Enregistrer.
gcloud
Utilisez la commande suivante pour activer l'authentification IAM :
gcloud sql instances patch INSTANCE_NAME \ --database-flags=cloudsql_iam_authentication=on
Remplacez INSTANCE_NAME par le nom de l'instance.
Terraform
Ajoutez le bloc database_flags à votre ressource google_sql_database_instance :
resource "google_sql_database_instance" "instance" { name = "INSTANCE_NAME" database_version = "MYSQL_8_0" region = "REGION" settings { tier = "db-f1-micro" database_flags { name = "cloudsql_iam_authentication" value = "on" } } }
Remplacez les éléments suivants :
INSTANCE_NAME: nom de l'instance.REGION: région dans laquelle se trouve l'instance.
REST v1
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID du projet
- LOCATION_ID : ID de l'emplacement
- INSTANCE_ID : ID de l'instance souhaitée
- REGION : région souhaitée
- DATABASE_VERSION : chaîne d'énumération de la version de base de données.
Par exemple :
MYSQL_8_0 - PASSWORD : mot de passe de l'utilisateur racine.
- MACHINE_TYPE : chaîne d'énumération du type (niveau) de machine, comme suit :
db-custom-[CPUS]-[MEMORY_MBS].
Méthode HTTP et URL :
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances
Corps JSON de la requête :
{
"name": "INSTANCE_ID",
"region": "REGION",
"databaseVersion": "DATABASE_VERSION",
"rootPassword": "PASSWORD",
"settings": {
"tier": "MACHINE_TYPE",
"backupConfiguration": {
"enabled": true
}
"databaseFlags":
[
{
"name": "cloudsql_iam_authentication",
"value": "on"
}
]
}
}
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-01T19:13:21.834Z",
"operationType": "CREATE",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
REST v1beta4
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID du projet
- LOCATION_ID : ID de l'emplacement
- INSTANCE_ID : ID de l'instance souhaitée
- REGION : région souhaitée
- DATABASE_VERSION : chaîne d'énumération de la version de base de données.
Par exemple :
MYSQL_8_0 - PASSWORD : mot de passe de l'utilisateur racine.
- MACHINE_TYPE : chaîne d'énumération du type (niveau) de machine, comme suit :
db-custom-[CPUS]-[MEMORY_MBS].
Méthode HTTP et URL :
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances
Corps JSON de la requête :
{
"name": "INSTANCE_ID",
"region": "REGION",
"databaseVersion": "DATABASE_VERSION",
"rootPassword": "PASSWORD",
"settings": {
"tier": "MACHINE_TYPE",
"backupConfiguration": {
"enabled": true
}
"databaseFlags":
[
{
"name": "cloudsql_iam_authentication",
"value": "on"
}
]
}
}
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-01T19:13:21.834Z",
"operationType": "CREATE",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
Ajouter l'utilisateur d'identité de personnel à l'instance
Ajoutez le compte principal externe à votre instance à l'aide du type CLOUD_IAM_WORKFORCE_IDENTITY.
Assurez-vous que l'ID utilisateur que vous utilisez correspond à la valeur fournie par le mappage d'attributs de votre fournisseur d'identité de personnel. En règle générale, il s'agit d'une adresse e-mail, par exemple cruz@example.com.
Console
-
Dans la console Google Cloud , accédez à la page Instances Cloud SQL.
- Pour ouvrir la page Présentation d'une instance, cliquez sur son nom.
- Dans le menu de navigation SQL, sélectionnez Utilisateurs.
- Cliquez sur Ajouter un compte utilisateur. Le volet Ajouter un compte d'utilisateur à l'instance INSTANCE_NAME s'ouvre.
- Sélectionnez Fédération des identités des employés.
- Dans le champ Utilisateur Workforce, saisissez l'ID de l'utilisateur que vous souhaitez ajouter.
- Cliquez sur Ajouter.
gcloud
Exécutez la commande suivante pour créer l'utilisateur :
gcloud sql users create USER_ID \ --instance=INSTANCE_NAME \ --type=CLOUD_IAM_WORKFORCE_IDENTITY
Remplacez les éléments suivants :
USER_ID: adresse e-mail de l'utilisateur que vous souhaitez ajouter, par exemplecruz@example.com.INSTANCE_NAME: nom de l'instance.
Terraform
Utilisez la ressource google_sql_user pour définir l'utilisateur de l'identité du personnel :
resource "google_sql_user" "workforce_user" { name = "USER_ID" # e.g., "cruz@example.com" instance = "INSTANCE_NAME" type = "CLOUD_IAM_WORKFORCE_IDENTITY" }
Remplacez les éléments suivants :
USER_ID: ID de l'utilisateur que vous souhaitez ajouter (par exemple,cruz@example.com).INSTANCE_NAME: nom de l'instance.
REST v1
Créer un compte utilisateur
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID du projet
- INSTANCE_ID : ID de l'instance à laquelle vous ajoutez l'utilisateur
- USERNAME : adresse e-mail de l'utilisateur.
Méthode HTTP et URL :
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users
Corps JSON de la requête :
{
"name": "USERNAME",
"type": "CLOUD_IAM_WORKFORCE_IDENTITY"
}
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
"status": "DONE",
"user": "user@example.com",
"insertTime": "2020-02-07T22:44:16.656Z",
"startTime": "2020-02-07T22:44:16.686Z",
"endTime": "2020-02-07T22:44:20.437Z",
"operationType": "CREATE_USER",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
REST v1beta4
Créer un compte utilisateur
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID du projet
- INSTANCE_ID : ID de l'instance à laquelle vous ajoutez l'utilisateur
- USERNAME : adresse e-mail de l'utilisateur.
Méthode HTTP et URL :
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users
Corps JSON de la requête :
{
"name": "USERNAME",
"type": "CLOUD_IAM_WORKFORCE_IDENTITY"
}
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
"status": "DONE",
"user": "user@example.com",
"insertTime": "2020-02-07T22:44:16.656Z",
"startTime": "2020-02-07T22:44:16.686Z",
"endTime": "2020-02-07T22:44:20.437Z",
"operationType": "CREATE_USER",
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
Attribuer un rôle utilisateur d'instance
Attribuez le rôle roles/cloudsql.instanceUser au compte principal d'identité des employés ou à l'ensemble du pool.
Console
-
Dans la console Google Cloud , accédez à la page Comptes de service.
- Cliquez sur Accorder l'accès.
Dans le champ Nouveaux comptes principaux, effectuez l'une des opérations suivantes :
Pour accorder l'accès à un compte principal individuel, saisissez l'identité des employés en tant que
principal:principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_IDPour accorder l'accès à l'ensemble du pool, saisissez le pool d'employés en tant que
principalSet:principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*
- Dans la liste Rôle, sélectionnez Cloud SQL > Utilisateur d'instance Cloud SQL.
- Facultatif : Si vous souhaitez vous connecter à l'aide du proxy d'authentification Cloud SQL ou des connecteurs de langage Cloud SQL, cliquez sur Ajouter un autre rôle, puis sélectionnez Cloud SQL > Client Cloud SQL.
- Cliquez sur Enregistrer.
gcloud
Pour accorder l'accès à un utilisateur individuel, utilisez la commande gcloud projects
add-iam-policy-binding :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" \ --role="roles/cloudsql.instanceUser"
Remplacez les éléments suivants :
USER_ID: ID de l'utilisateur que vous souhaitez ajouter (par exemple,cruz@example.com).POOL_ID: ID du pool de personnel.PROJECT_ID: identifiant du projet contenant l'instance.
Pour accorder l'accès à l'intégralité du pool de personnel, utilisez la commande gcloud projects
add-iam-policy-binding avec le format de membre principalSet :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*" \ --role="roles/cloudsql.instanceUser"
Terraform
Utilisez la ressource google_project_iam_member pour accorder le rôle au compte principal de la plate-forme :
resource "google_project_iam_member" "workforce_user_iam" { project = "PROJECT_ID" role = "roles/cloudsql.instanceUser" member = "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" }
Remplacez les éléments suivants :
USER_ID: ID de l'utilisateur que vous souhaitez ajouter (par exemple,cruz@example.com).POOL_ID: ID du pool de personnel.PROJECT_ID: identifiant du projet contenant l'instance.
REST
Pour accorder des stratégies IAM à l'aide de l'API, récupérez la stratégie IAM du projet à l'aide de la méthode getIamPolicy.
Ensuite, ajoutez la nouvelle liaison à la stratégie, puis appliquez la stratégie mise à jour à l'aide de la méthode setIamPolicy.
Voici un exemple de charge utile de liaison à ajouter à votre stratégie IAM :
{ "bindings": [ { "role": "roles/cloudsql.instanceUser", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" ] } ] }
Remplacez les éléments suivants :
USER_ID: ID de l'utilisateur que vous souhaitez ajouter (par exemple,cruz@example.com).POOL_ID: ID du pool de personnel.
Accorder des droits pour une base de données
Vous pouvez spécifier les rôles de base de données à attribuer lors de la création de l'utilisateur d'identité des employés ou attribuer manuellement les droits d'accès à la base de données à l'intérieur de la base de données.
Par exemple, pour accorder des droits manuellement :
GRANT SELECT ON TABLE_NAME TO "USER_ID";
Remplacez les éléments suivants :
TABLE_NAME: nom de la table de base de données.USER_ID: ID utilisateur de l'utilisateur de la base de données d'identité de personnel (par exemple,cruz@example.com).
Se connecter à l'instance
Vous pouvez désormais vous connecter à votre instance à l'aide de la gcloud CLI ou du proxy d'authentification Cloud SQL.
Utiliser la CLI gcloud
Vous devez d'abord vous authentifier avec votre identité des employés avant de pouvoir générer un jeton de connexion.
Pour vous authentifier à l'aide de la fédération d'identité de personnel, utilisez la commande
gcloud auth loginavec le flag--cred-file:gcloud auth login --cred-file=CONFIGURATION_FILERemplacez
CONFIGURATION_FILEpar le chemin d'accès au fichier de configuration généré pour votre fournisseur d'identité du personnel.Pour vous connecter à l'aide d'un jeton généré, exécutez la commande suivante :
bash export MYSQL_PWD=$(gcloud sql generate-login-token) mysql --host=INSTANCE_IP --user=USER_ID \ --database=DB_NAME --ssl-mode=REQUIREDRemplacez les éléments suivants :
INSTANCE_IP: adresse IP de votre instance Cloud SQL.USER_ID: ID utilisateur de l'utilisateur de la plate-forme de main-d'œuvre, par exemplecruz@example.com.DB_NAME: nom de la base de données à laquelle vous souhaitez vous connecter.
Utiliser le proxy d'authentification Cloud SQL
Démarrez le proxy avec l'option --auto-iam-authn :
./cloud-sql-proxy INSTANCE_CONNECTION_NAME --auto-iam-authn
Pour en savoir plus sur le proxy, consultez À propos du proxy d'authentification Cloud SQL.
Restrictions et limitations
- ID utilisateur en double dans les pools : Cloud SQL ne peut pas faire la distinction entre les sujets ayant le même ID utilisateur dans différents pools de personnel ou fournisseurs d'identité. Si vous utilisez plusieurs pools ou fournisseurs d'employés, vous devez utiliser des règles IAM pour vous assurer de ne pas accorder l'autorisation de connexion
roles/cloudsql.instanceUserà des noms de sujets en double provenant de différents pools ou fournisseurs. Cela empêche l'accès non autorisé depuis un autre pool ou fournisseur avec le même ID utilisateur. - Quota de connexion : chaque instance dispose d'un quota de 12 000 connexions par minute, qu'il s'agisse de tentatives de connexion réussies ou non. Lorsque le quota est dépassé, les connexions sont temporairement indisponibles. Nous vous recommandons d'éviter les connexions fréquentes et de restreindre les connexions à l'aide de réseaux autorisés.
Étapes suivantes
- En savoir plus sur la fédération d'identité de personnel
- Découvrez comment configurer des instances pour l'authentification IAM pour les bases de données.
- Découvrez comment gérer les utilisateurs avec l'authentification IAM pour les bases de données.
- Découvrez comment vous connecter à l'aide de l'authentification IAM pour les bases de données.