Cette page explique comment ajouter et gérer des utilisateurs, des comptes de service et des groupes dans une instance Cloud SQL qui utilise l'authentification IAM pour les bases de données.
Pour en savoir plus sur l'intégration IAM, consultez la page Authentification IAM.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Assurez-vous que vous disposez du rôle d'administrateur Cloud SQL sur votre compte utilisateur.
- Activez l'authentification IAM pour les bases de données sur votre instance Cloud SQL.
- Attribuez le rôle IAM
cloudsql.instanceUser
nécessaire aux comptes principaux IAM tels que les utilisateurs IAM, les comptes de service ou les groupes pour vous connecter à l'instance Cloud SQL. - Si vous ajoutez un utilisateur ou un compte de service individuel à l'instance Cloud SQL, vous devez attribuer le rôle IAM individuellement à chaque utilisateur et compte de service.
- Si vous ajoutez un groupe, vous devez lui attribuer le rôle IAM, car les membres du groupe héritent automatiquement des autorisations IAM associées au rôle IAM. Pour en savoir plus sur la création de groupes dans Cloud Identity, consultez la section Créer et gérer des groupes Google dans la console Google Cloud.
- Vous pouvez attribuer le rôle à un projet contenant des instances Cloud SQL à l'aide de la page IAM de la console Google Cloud, de la CLI gcloud, de Terraform ou de l'API Cloud SQL Admin. Pour en savoir plus, consultez la section Ajouter une liaison de stratégie IAM à un utilisateur, un compte de service ou un groupe.
- Si vous utilisez un compte de service, assurez-vous d'avoir ajouté un compte de service pour chaque service nécessitant un accès aux bases de données du projet.
Pour en savoir plus sur la création de comptes de service, consultez la section Créer des comptes de service.
Ajouter une liaison de stratégie IAM à un utilisateur, un compte de service ou un groupe
Cette procédure ajoute une liaison de stratégie à la stratégie IAM d'un projet spécifique en se basant sur un ID de projet et une liaison qui lui sont fournis. La commande de liaison se compose d'un membre, d'un rôle et d'une condition facultative.
Le nom d'utilisateur de la base de données doit correspondre à l'adresse e-mail de l'utilisateur IAM, par exemple example-user@example.com
. Il doit être en minuscules et utiliser des guillemets, car il contient des caractères spéciaux (@
et .
).
Console
-
Dans la console Google Cloud, accédez à la page IAM.
- Cliquez sur Ajouter.
- Dans Nouveaux membres, saisissez une adresse e-mail. Vous pouvez ajouter des utilisateurs individuels, des comptes de service ou des groupes en tant que membres, mais chaque projet doit comporter au moins un compte principal.
- Dans Rôle, accédez à Cloud SQL, puis sélectionnez 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, sélectionnez également Client Cloud SQL.
- Cliquez sur Enregistrer.
gcloud
Exécutez gcloud projects add-iam-policy-binding
avec l'indicateur --role=roles/cloudsql.instanceUser
.
Ajouter une liaison de stratégie à un compte utilisateur
Remplacez les éléments suivants :
- PROJECT_ID : l'ID du projet que vous souhaitez autoriser l'utilisateur à utiliser.
- USERNAME : adresse e-mail de l'utilisateur.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:USERNAME \ --role=roles/cloudsql.instanceUser
Si vous souhaitez vous connecter à l'aide du proxy d'authentification Cloud SQL ou des connecteurs de langage Cloud SQL, exécutez à nouveau gcloud projects add-iam-policy-binding
avec l'indicateur --role=roles/cloudsql.client
Ajouter une liaison de stratégie à un compte de service
Remplacez les éléments suivants :
- PROJECT_ID : l'ID du projet que vous souhaitez autoriser l'utilisateur à utiliser.
- SERVICE_ACCT : adresse e-mail associée au compte de service.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCT \ --role=roles/cloudsql.instanceUser
Si vous souhaitez vous connecter à l'aide du proxy d'authentification Cloud SQL ou des connecteurs de langage Cloud SQL, exécutez à nouveau gcloud projects add-iam-policy-binding
avec l'indicateur --role=roles/cloudsql.client
Ajouter une liaison de stratégie à un groupe Cloud Identity
Remplacez les éléments suivants :
- PROJECT_ID : ID du projet que vous souhaitez autoriser les membres du groupe à utiliser.
- GROUP_EMAIL_ADDRESS : adresse e-mail du groupe. Par exemple,
example-group@example.com
.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=group:GROUP_EMAIL_ADDRESS \ --role=roles/cloudsql.instanceUser
Tous les membres du groupe spécifié se voient attribuer le rôle d'utilisateur d'instance Cloud SQL et peuvent se connecter aux instances de ce projet.
Si vous souhaitez vous connecter à l'aide du proxy d'authentification Cloud SQL ou des connecteurs de langage Cloud SQL, exécutez à nouveau gcloud projects add-iam-policy-binding
avec l'indicateur --role=roles/cloudsql.client
Terraform
Pour ajouter la liaison de stratégie requise aux comptes utilisateur et de service IAM, utilisez une ressource Terraform.
Appliquer les modifications
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez Cloud Shell.
-
Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.
Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Préparer le répertoire
Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).
-
Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code dans le fichier
main.tf
que vous venez de créer.Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
terraform init
Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option
-upgrade
:terraform init -upgrade
Appliquer les modifications
-
Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
terraform plan
Corrigez les modifications de la configuration si nécessaire.
-
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
Supprimer les modifications
Pour supprimer vos modifications, procédez comme suit :
- Pour désactiver la protection contre la suppression, définissez l'argument
deletion_protection
surfalse
dans le fichier de configuration Terraform.deletion_protection = "false"
- Appliquez la configuration Terraform mise à jour en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
-
Supprimez les ressources précédemment appliquées à votre configuration Terraform en exécutant la commande suivante et en saisissant
yes
à la requête :terraform destroy
Terraform
Pour ajouter la liaison de stratégie requise aux comptes utilisateur et de service IAM, utilisez une ressource Terraform.
Appliquer les modifications
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez Cloud Shell.
-
Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.
Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Préparer le répertoire
Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).
-
Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code dans le fichier
main.tf
que vous venez de créer.Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
terraform init
Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option
-upgrade
:terraform init -upgrade
Appliquer les modifications
-
Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
terraform plan
Corrigez les modifications de la configuration si nécessaire.
-
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
Supprimer les modifications
Pour supprimer vos modifications, procédez comme suit :
- Pour désactiver la protection contre la suppression, définissez l'argument
deletion_protection
surfalse
dans le fichier de configuration Terraform.deletion_protection = "false"
- Appliquez la configuration Terraform mise à jour en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
-
Supprimez les ressources précédemment appliquées à votre configuration Terraform en exécutant la commande suivante et en saisissant
yes
à l'invite :terraform destroy
REST
Accordez les rôles cloudsql.instanceUser
et cloudsql.client
aux deux types de comptes en modifiant la stratégie de liaison JSON ou YAML renvoyée par la commande get-iam-policy
. Notez que cette modification de stratégie ne prend effet que lorsque vous avez défini la stratégie mise à jour.
{ "role": "roles/cloudsql.instanceUser", "members": [ "user:example-user@example.com" "serviceAccount:service1@sql.iam.gserviceaccount.com" "group:example-group@example.com" ] } { "role": "roles/cloudsql.client", "members": [ "user:example-user@example.com" "serviceAccount:service1@sql.iam.gserviceaccount.com" ] }
Ajouter un compte d'utilisateur ou de service IAM individuel à une instance Cloud SQL
Vous devez créer un compte utilisateur pour chaque utilisateur IAM ou compte de service que vous ajoutez à l'instance Cloud SQL afin d'accéder aux bases de données. Si vous ajoutez un groupe IAM, vous n'avez pas besoin de créer de compte utilisateur pour chaque membre de ce groupe.
Le nom d'utilisateur de la base de données doit correspondre à l'adresse e-mail de l'utilisateur IAM et être en minuscules.
Par exemple, example-user@example.com
.
Lorsque vous utilisez des commandes REST, le nom d'utilisateur doit être placé entre guillemets car il contient des caractères spéciaux (@
et .
). Les comptes de service utilisent le format service-account-name@project-id.iam.gserviceaccount.com
.
Pour ajouter un compte utilisateur ou de service IAM individuel, vous devez ajouter un nouveau compte utilisateur et sélectionner IAM en tant que méthode d'authentification :
Console
-
Dans Google Cloud Console, 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. L'onglet Ajouter un compte d'utilisateur à l'instance nom_instance s'ouvre.
- Cochez la case d'option Cloud IAM.
- Ajoutez l'adresse e-mail du compte d'utilisateur ou de service que vous souhaitez ajouter dans le champ Compte principal.
- Cliquez sur Ajouter. L'utilisateur ou le compte de service figure désormais dans la liste des comptes utilisateur.
Si le rôle IAM
cloudsql.instanceUser
n'est pas attribué à l'utilisateur après la création du compte utilisateur, une icône s'affiche à côté du nom d'utilisateur.Pour accorder des droits de connexion utilisateur, cliquez sur l'icône, puis sélectionnez Ajouter un rôle IAM. Si l'icône n'apparaît plus, le compte utilisateur est attribué au rôle IAM qui lui donne l'autorisation de connexion.
gcloud
Créer un compte utilisateur
Utilisez l'adresse e-mail, telle que example-user@example.com
, pour identifier l'utilisateur.
Remplacez les éléments suivants :
- USERNAME : adresse e-mail de l'utilisateur.
- INSTANCE_NAME : nom de l'instance à laquelle vous souhaitez autoriser l'utilisateur à accéder
gcloud sql users create USERNAME \ --instance=INSTANCE_NAME \ --type=cloud_iam_user
Créer un compte de service
Remplacez les éléments suivants :
- SERVICE_ACCT : adresse e-mail du compte de service.
- INSTANCE_NAME : nom de l'instance à laquelle vous souhaitez autoriser le compte de service à accéder
gcloud sql users create SERVICE_ACCT \ --instance=INSTANCE_NAME \ --type=cloud_iam_service_account
Terraform
Pour ajouter des comptes utilisateur et de service IAM sur une instance avec l'authentification IAM pour les bases de données activée, utilisez une ressource Terraform.
Appliquer les modifications
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez Cloud Shell.
-
Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.
Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Préparer le répertoire
Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).
-
Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code dans le fichier
main.tf
que vous venez de créer.Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
terraform init
Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option
-upgrade
:terraform init -upgrade
Appliquer les modifications
-
Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
terraform plan
Corrigez les modifications de la configuration si nécessaire.
-
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
Supprimer les modifications
Pour supprimer vos modifications, procédez comme suit :
- Pour désactiver la protection contre la suppression, définissez l'argument
deletion_protection
surfalse
dans le fichier de configuration Terraform.deletion_protection = "false"
- Appliquez la configuration Terraform mise à jour en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
-
Supprimez les ressources précédemment appliquées à votre configuration Terraform en exécutant la commande suivante et en saisissant
yes
à la requête :terraform destroy
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_USER" }
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" }
Créer un compte de service
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- SERVICE_ACCT : adresse e-mail du compte de service.
- PROJECT_ID : ID du projet
- INSTANCE_ID : ID de l'instance à laquelle vous ajoutez le compte de service
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": "SERVICE_ACCT", "type": "CLOUD_IAM_SERVICE_ACCOUNT" }
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-11-20T04:08:00.211Z", "startTime": "2020-11-20T04:08:00.240Z", "endTime": "2020-11-20T04:08:02.003Z", "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_USER" }
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" }
Créer un compte de service
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- SERVICE_ACCT : adresse e-mail du compte de service.
- PROJECT_ID : ID du projet
- INSTANCE_ID : ID de l'instance à laquelle vous ajoutez le compte de service
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": "SERVICE_ACCT", "type": "CLOUD_IAM_SERVICE_ACCOUNT" }
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-11-20T04:08:00.211Z", "startTime": "2020-11-20T04:08:00.240Z", "endTime": "2020-11-20T04:08:02.003Z", "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" }
Ajouter un groupe IAM à une instance Cloud SQL
Pour utiliser l'authentification de groupe IAM et ajouter un groupe IAM à une instance Cloud SQL, suivez l'une des procédures décrites dans cette section. Une fois le groupe IAM ajouté, vous n'avez pas besoin d'ajouter individuellement les membres du groupe à l'instance. Pour en savoir plus, consultez la section Ajouter automatiquement les membres d'un groupe à une instance Cloud SQL.
Console
-
Dans Google Cloud Console, 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. L'onglet Ajouter un compte d'utilisateur à l'instance nom_instance s'ouvre.
- Cochez la case d'option Cloud IAM.
- Ajoutez l'adresse e-mail du groupe que vous souhaitez ajouter dans le champ Principal.
- Cliquez sur Ajouter. Le groupe figure maintenant dans la liste des utilisateurs.
Si le rôle IAM
cloudsql.instanceUser
n'est pas attribué au groupe après la création du compte utilisateur, une icône s'affiche à côté du groupe.Pour accorder des droits de connexion aux membres du groupe, cliquez sur l'icône, puis sélectionnez Ajouter un rôle IAM. Si l'icône n'apparaît plus, cela signifie que tous les membres du groupe se voient attribuer le rôle qui leur donne l'autorisation de se connecter.
gcloud
Remplacez les éléments suivants :
- GROUP_EMAIL_ADDRESS : adresse e-mail du groupe Cloud Identity que vous souhaitez ajouter à l'instance. Par exemple, example-group@example.com.
- INSTANCE_NAME : nom de l'instance à laquelle vous souhaitez ajouter le groupe
Exécutez la commande suivante :
gcloud sql users create GROUP_EMAIL_ADDRESS \ --instance=INSTANCE_NAME \ --type=cloud_iam_group
Terraform
Pour ajouter des comptes utilisateur et de service IAM sur une instance avec l'authentification IAM pour les bases de données activée, utilisez une ressource Terraform.
Appliquer les modifications
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez Cloud Shell.
-
Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.
Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Préparer le répertoire
Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).
-
Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code dans le fichier
main.tf
que vous venez de créer.Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
terraform init
Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option
-upgrade
:terraform init -upgrade
Appliquer les modifications
-
Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
terraform plan
Corrigez les modifications de la configuration si nécessaire.
-
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
Supprimer les modifications
Pour supprimer vos modifications, procédez comme suit :
- Pour désactiver la protection contre la suppression, définissez l'argument
deletion_protection
surfalse
dans le fichier de configuration Terraform.deletion_protection = "false"
- Appliquez la configuration Terraform mise à jour en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
-
Supprimez les ressources précédemment appliquées à votre configuration Terraform en exécutant la commande suivante et en saisissant
yes
à la requête :terraform destroy
REST v1
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 le groupe Cloud Identity
- GROUP_EMAIL : adresse e-mail du groupe Cloud Identity
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": "GROUP_EMAIL", "type": "CLOUD_IAM_GROUP" }
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": "example-group@example.com", "insertTime": "2023-12-07T22:44:16.656Z", "startTime": "2023-12-07T22:44:16.686Z", "endTime": "2023-12-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
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 le groupe Cloud Identity
- GROUP_EMAIL : adresse e-mail du groupe Cloud Identity
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": "GROUP_EMAIL", "type": "CLOUD_IAM_GROUP" }
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": "example-group@example.com", "insertTime": "2023-12-07T22:44:16.656Z", "startTime": "2023-12-07T22:44:16.686Z", "endTime": "2023-12-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" }
Ajouter automatiquement les membres d'un groupe à une instance Cloud SQL
Lorsque vous ajoutez un groupe IAM à une instance Cloud SQL, tous les membres (utilisateurs et comptes de service) de ce groupe héritent des autorisations IAM permettant de s'authentifier auprès de l'instance. Vous n'avez pas besoin d'ajouter le membre du groupe individuellement à l'instance Cloud SQL. Lorsqu'un membre d'un groupe se connecte et s'authentifie pour la première fois à l'instance, Cloud SQL crée un compte utilisateur de groupe ou un compte de service de groupe pour ce membre. Vous pouvez voir le membre du groupe listé sur l'instance après sa première connexion réussie.
Pour en savoir plus sur la connexion, consultez la section Se connecter à l'aide de l'authentification IAM pour les bases de données.
Migrer les utilisateurs IAM existants vers l'authentification de groupe IAM
Les utilisateurs IAM existants de type CLOUD_IAM_USER
ou CLOUD_IAM_SERVICE_ACCOUNT
n'utilisent pas l'authentification de groupe IAM.
Vous pouvez migrer ces utilisateurs vers l'authentification IAM de groupe.
Ajoutez ces utilisateurs à un groupe.
Ajoutez le groupe à votre instance.
Attribuez au groupe des autorisations IAM suffisantes pour permettre aux membres du groupe de se connecter à vos instances. La propagation de ces modifications peut prendre un certain temps. Pour en savoir plus sur les délais de propagation, consultez la page Propagation des modifications d'accès.
Attribuez les droits de base de données attribués aux utilisateurs IAM que vous migrez vers le groupe.
Une fois les modifications d'appartenance au groupe et les autorisations IAM appliquées, supprimez l'utilisateur IAM existant de votre instance. La prochaine fois que l'utilisateur IAM se connecte, il est recréé en tant qu'utilisateur de groupe IAM pouvant utiliser l'authentification de groupe IAM.
Gérer les membres d'un groupe sur une instance Cloud SQL
Lorsque vous ajoutez un groupe IAM à une instance Cloud SQL, tous les membres (utilisateur ou compte de service) de ce groupe héritent de l'autorisation IAM permettant de s'authentifier auprès de l'instance. Vous pouvez contrôler l'accès à une instance en gérant le groupe dans Cloud Identity. Par exemple, si vous souhaitez accorder l'accès à une instance à un nouvel utilisateur, ajoutez-le en tant que membre de groupe dans Cloud Identity. Vous n'avez pas besoin de supprimer ni d'ajouter des membres de groupe séparément au niveau de l'instance Cloud SQL, car les modifications apportées à l'appartenance au groupe sont automatiquement propagées vers l'instance Cloud SQL. La propagation des modifications apportées à l'appartenance à un groupe, telles que l'ajout ou la suppression d'un membre, prend environ 15 minutes. Ce temps s'ajoute au temps nécessaire pour les modifications IAM.
L'attribution ou la révocation de droits sur une base de données pour un groupe IAM dans MySQL prend effet immédiatement. Par exemple, si vous révoquez l'accès à une table, les membres de ce groupe IAM perdent l'accès à cette table immédiatement.
Un utilisateur ou un compte de service peut être membre de plusieurs groupes IAM. Si un utilisateur ou un compte de service appartient à plusieurs groupes IAM sur une instance, il dispose de toutes les autorisations IAM et de tous les droits de base de données combinés de chacun de ces groupes IAM.
Lorsque vous ajoutez un nouveau membre (utilisateur ou compte de service) au groupe IAM dans Cloud Identity et qu'il se connecte à l'instance pour la première fois, il hérite automatiquement des droits sur la base de données accordés au groupe. Pour utiliser les droits de base de données nouvellement acquis dans la même session de connexion, utilisez l'instruction suivante.
SET ROLE ALL;
Pour en savoir plus, consultez SET ROLE dans la documentation MySQL.
Accorder des droits sur une base de données à un utilisateur ou à un compte de service IAM individuel
Lorsqu'un utilisateur ou un service IAM individuel est ajouté à une instance Cloud SQL, ce nouveau compte ne dispose par défaut d'aucun droit sur les bases de données.Pour accorder des droits sur les bases de données aux comptes, utilisez l'instruction GRANT. Consultez la page de référence GRANT pour obtenir la liste complète des droits que vous pouvez accorder aux utilisateurs et aux comptes de service. Exécutez la commande GRANT à partir de la ligne de commande mysql
.
Remplacez les éléments suivants :
@
et la chaîne de domaine tronquées.
Par exemple, si l'adresse e-mail de l'utilisateur IAM est example-user@example.com
, le nom d'utilisateur est example-user
. Pour un compte de service, il s'agit de l'adresse e-mail du compte de service, sans le domaine @project-id.iam.gserviceaccount.com
.
grant select on DATABASE_NAME.TABLE_NAME to "USERNAME";
Accorder des droits sur une base de données à un groupe IAM
Lorsque vous utilisez l'authentification de groupe IAM, vous accordez des droits sur les bases de données aux groupes IAM au lieu de les accorder à des utilisateurs ou à des comptes de service individuels. Par défaut, lorsque vous ajoutez un groupe IAM à une instance Cloud SQL, ce groupe ne dispose d'aucun droit sur la base de données.
Pour accorder des droits sur la base de données au groupe IAM, utilisez l'instruction GRANT. Après s'être connecté à l'instance Cloud SQL pour la première fois, chaque membre du groupe (y compris les utilisateurs et les comptes de service) hérite automatiquement des droits sur la base de données accordés au groupe.
Remplacez les éléments suivants :
@
et le nom de domaine tronqués. Par exemple, si l'adresse e-mail du groupe IAM est example-group@example.com
, le nom du groupe est example-group
.Exécutez la commande GRANT à partir de la ligne de commande mysql
.
grant select on DATABASE_NAME.TABLE_NAME to "GROUP_NAME"@"HOSTNAME";
Remplacez HOSTNAME par le nom de domaine de l'adresse e-mail du groupe IAM.
Pour en savoir plus sur l'attribution de droits, consultez la page de référence GRANT dans la documentation MySQL.
Les droits sur la base de données que vous accordez au groupe IAM prennent effet immédiatement.
Afficher les utilisateurs IAM, les comptes de service et les groupes ajoutés à une instance Cloud SQL
Pour afficher les utilisateurs IAM, les comptes de service et les groupes qui ont été ajoutés à votre instance Cloud SQL, exécutez les commandes suivantes.
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. La page affiche la liste des utilisateurs IAM, des comptes de service et des groupes Cloud Identity qui ont été ajoutés à votre instance.
- Facultatif: Pour afficher la liste des utilisateurs IAM ou des comptes de service qui se sont déjà connectés à l'instance, cliquez sur Membres authentifiés du groupe IAM.
gcloud
Remplacez INSTANCE_NAME par le nom de l'instance contenant les groupes que vous souhaitez afficher.
gcloud sql users list --instance=INSTANCE_NAME
Les groupes ont le type d'utilisateur CLOUD_IAM_GROUP
.
Le résultat répertorie également les comptes utilisateur et de service sur votre instance Cloud SQL.
- Les comptes utilisateur membres d'un groupe sont de type
CLOUD_IAM_GROUP_USER
. - Les comptes de service membres d'un groupe sont de type
CLOUD_IAM_GROUP_SERVICE_ACCOUNT
. - Les comptes utilisateur qui sont des comptes utilisateur IAM d'authentification de base de données individuels sont de type
CLOUD_IAM_USER
. - Les comptes de service qui sont des comptes de service d'authentification IAM individuels pour la base de données sont de type
CLOUD_IAM_SERVICE_ACCOUNT
.
REST v1
La requête suivante exécute la méthode users.list pour lister les utilisateurs disposant de comptes sur l'instance Cloud SQL.
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
Méthode HTTP et URL :
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users/list
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "kind": "sql#usersList", "items": [ { "kind": "sql#user", "etag": "--redacted--", "name": "example-service-acct", "host": "%", "instance": "INSTANCE_ID", "project": "PROJECT_ID", "type": "CLOUD_IAM_SERVICE_ACCOUNT" }, { "kind": "sql#user", "etag": "--redacted--", "name": "another-example-service-acct", "host": "%", "instance": "INSTANCE_ID", "project": "PROJECT_ID", "type": "CLOUD_IAM_GROUP_SERVICE_ACCOUNT" }, { "kind": "sql#user", "etag": "--redacted--", "name": "root", "host": "%", "instance": "INSTANCE_ID", "project": "PROJECT_ID", "passwordPolicy": { "status": {} } }, { "kind": "sql#user", "etag": "--redacted--", "name": "example-user", "host": "%", "instance": "INSTANCE_ID", "project": "PROJECT_ID", "type": "CLOUD_IAM_USER" }, { "kind": "sql#user", "etag": "--redacted--", "name": "another-example-user", "host": "%", "instance": "INSTANCE_ID", "project": "PROJECT_ID", "type": "CLOUD_IAM_GROUP_USER" }, { "kind": "sql#user", "etag": "--redacted--", "name": "example-group", "host": "%", "instance": "INSTANCE_ID", "project": "PROJECT_ID", "type": "CLOUD_IAM_GROUP" } ] }
Les groupes ont le type d'utilisateur CLOUD_IAM_GROUP
.
Le résultat répertorie également les comptes utilisateur et de service sur votre instance Cloud SQL.
- Les comptes utilisateur membres d'un groupe sont de type
CLOUD_IAM_GROUP_USER
. - Les comptes de service membres d'un groupe sont de type
CLOUD_IAM_GROUP_SERVICE_ACCOUNT
. - Les comptes utilisateur qui sont des comptes utilisateur IAM d'authentification de base de données individuels sont de type
CLOUD_IAM_USER
. - Les comptes de service qui sont des comptes de service d'authentification IAM individuels pour la base de données sont de type
CLOUD_IAM_SERVICE_ACCOUNT
.
REST v1beta4
La requête suivante exécute la méthode users.list pour lister les utilisateurs disposant de comptes sur l'instance Cloud SQL.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- project-id : ID de votre projet
- instance-id : ID de l'instance souhaitée
Méthode HTTP et URL :
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "kind": "sql#usersList", "items": [ { "kind": "sql#user", "etag": "--redacted--", "name": "sqlserver", "host": "", "instance": "instance-id", "project": "project-id", "sqlserverUserDetails": { "serverRoles": [ "CustomerDbRootRole" ] } }, { "kind": "sql#user", "etag": "--redacted--", "name": "user-id-1", "host": "", "instance": "instance-id", "project": "project-id", "sqlserverUserDetails": { "serverRoles": [ "CustomerDbRootRole" ] } }, { "kind": "sql#user", "etag": "--redacted--", "name": "user-id-2", "host": "", "instance": "instance-id", "project": "project-id", "sqlserverUserDetails": { "serverRoles": [ "CustomerDbRootRole" ] } }, { ... }, { ... } ] }
Les groupes ont le type d'utilisateur CLOUD_IAM_GROUP
.
Le résultat répertorie également les comptes utilisateur et de service sur votre instance Cloud SQL.
- Les comptes utilisateur membres d'un groupe sont de type
CLOUD_IAM_GROUP_USER
. - Les comptes de service membres d'un groupe sont de type
CLOUD_IAM_GROUP_SERVICE_ACCOUNT
. - Les comptes utilisateur qui sont des comptes utilisateur IAM d'authentification de base de données individuels sont de type
CLOUD_IAM_USER
. - Les comptes de service qui sont des comptes de service d'authentification IAM individuels pour la base de données sont de type
CLOUD_IAM_SERVICE_ACCOUNT
.
Supprimer un utilisateur ou un compte de service IAM spécifique d'une instance Cloud SQL
Pour supprimer un compte d'utilisateur ou de service individuel qui n'est pas membre d'un groupe de l'instance Cloud SQL, vous devez le supprimer à l'aide de la commande suivante:
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 l'élément correspondant à l'utilisateur que vous souhaitez supprimer.
- Sélectionnez Supprimer. Cette opération révoque l'accès à cette instance uniquement.
gcloud
Révoquer un utilisateur
Utilisez l'adresse e-mail, telle que example-user@example.com
, pour identifier l'utilisateur.
Remplacez les éléments suivants :
- USERNAME : adresse e-mail sans le @nom de domaine.
- INSTANCE_NAME : nom de l'instance de laquelle vous souhaitez supprimer l'utilisateur.
gcloud sql users delete USERNAME \ --instance=INSTANCE_NAME
Supprimer le compte de service individuel
Remplacez les éléments suivants :
- SERVICE_ACCT : adresse e-mail du compte de service.
- INSTANCE_NAME : nom de l'instance de laquelle vous souhaitez supprimer l'utilisateur.
gcloud sql users delete SERVICE_ACCT \ --instance=INSTANCE_NAME
REST v1
La requête suivante exécute la méthode users.delete pour supprimer le compte utilisateur spécifié.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
- PROJECT_ID : ID de votre projet
- INSTANCE_ID : ID de l'instance souhaitée
- USERNAME : l'adresse e-mail de l'utilisateur ou du compte de service
Méthode HTTP et URL :
DELETE https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME
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:38:41.217Z", "startTime": "2020-02-07T22:38:41.217Z", "endTime": "2020-02-07T22:38:44.801Z", "operationType": "DELETE_USER", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
REST v1beta4
La requête suivante exécute la méthode users.delete pour supprimer le compte utilisateur spécifié.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
- PROJECT_ID : ID de votre projet
- INSTANCE_ID : ID de l'instance souhaitée
- USERNAME : l'adresse e-mail de l'utilisateur ou du compte de service
Méthode HTTP et URL :
DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/users?host=&name=USERNAME
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:38:41.217Z", "startTime": "2020-02-07T22:38:41.217Z", "endTime": "2020-02-07T22:38:44.801Z", "operationType": "DELETE_USER", "name": "OPERATION_ID", "targetId": "INSTANCE_ID", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
Supprimer des membres de groupe IAM d'une instance Cloud SQL
Il existe deux façons de supprimer des membres de groupe IAM d'une instance Cloud SQL:
- Suppression automatique
- Suppression manuelle
Suppression automatique
Pour supprimer un membre d'un groupe IAM, vous devez le retirer des groupes IAM applicables dans Cloud Identity. Une fois que les utilisateurs du groupe IAM ont perdu leur appartenance à tous les groupes applicables dans Cloud Identity, Cloud SQL les supprime automatiquement de l'instance.
La propagation des modifications apportées à l'appartenance à un groupe, telles que l'ajout ou la suppression d'un membre, prend environ 15 minutes. Ce temps s'ajoute au temps nécessaire pour les modifications IAM.
Suppression manuelle
Si un utilisateur de groupe IAM ne peut pas être supprimé automatiquement, vous pouvez le supprimer manuellement. Vous ne pouvez pas supprimer manuellement un utilisateur de groupe IAM d'une instance Cloud SQL à l'aide de gcloud CLI, de la console Google Cloud, de Terraform ou de l'API Cloud SQL Admin. À la place, les utilisateurs de la base de données disposant de droits de super-utilisateur peuvent supprimer manuellement les utilisateurs de groupe IAM de l'instance Cloud SQL à l'aide d'une instruction DROP USER à partir d'un client MySQL.
Une fois que vous avez supprimé manuellement un utilisateur de groupe IAM de l'instance Cloud SQL, assurez-vous de le supprimer également du groupe IAM dans Cloud Identity pour empêcher toute nouvelle connexion à l'instance Cloud SQL.
Supprimer un groupe IAM d'une instance Cloud SQL
Vous pouvez supprimer les groupes IAM ajoutés de l'instance Cloud SQL. Une fois que vous avez supprimé un groupe IAM de l'instance, tous les utilisateurs et comptes de service appartenant au groupe IAM perdent les droits sur la base de données accordés au groupe IAM. En outre, les conditions suivantes s'appliquent:
- Les utilisateurs et les comptes de service appartenant au groupe IAM peuvent toujours se connecter jusqu'à ce que l'autorisation IAM
cloudsql.instances.login
soit supprimée du groupe. - Si la suppression d'un groupe fait que l'utilisateur ou les comptes de service du groupe IAM n'appartiennent à aucun autre groupe de l'instance, Cloud SQL les supprime de l'instance.
Si vous supprimez tous les groupes IAM d'une instance Cloud SQL, tous les utilisateurs et comptes de service associés à un groupe IAM perdent tous leurs droits sur la base de données. En outre, les conditions suivantes s'appliquent:
- Aucun utilisateur ni compte de service de groupe IAM ne peut se connecter à l'instance.
- Cloud SQL supprime également automatiquement tous les utilisateurs et comptes de service de groupe IAM de l'instance.
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 pour le groupe que vous souhaitez supprimer.
- Sélectionnez Supprimer. Cette opération révoque l'accès à cette instance uniquement.
gcloud
Pour supprimer un groupe Cloud Identity d'une instance, utilisez la commande gcloud sql users delete
.
Remplacez les éléments suivants :
- GROUP_NAME : première partie de l'adresse e-mail du groupe Cloud Identity. Par exemple, en utilisant l'adresse e-mail
example-group@example.com
, le nom du groupe Cloud Identity estexample-group
. - HOSTNAME : la deuxième partie de l'adresse e-mail représente le nom d'hôte du groupe Cloud Identity. Par exemple, pour l'adresse e-mail
example-group@example.com
, le nom d'hôte estexample.com
. - INSTANCE_NAME : nom de l'instance Cloud SQL avec le groupe Cloud Identity que vous souhaitez supprimer.
gcloud sql users delete GROUP_NAME \ --host=HOSTNAME \ --instance=INSTANCE_NAME
Supprimer des autorisations de connexion IAM d'un groupe IAM
Si vous révoquez le rôle cloudsql.instanceUser
d'un groupe IAM, tous les membres du groupe perdent la possibilité de se connecter à une instance Cloud SQL dans le projet. Les utilisateurs ou les comptes de service ne peuvent se connecter à des instances que s'ils sont membres d'un autre groupe IAM disposant toujours des autorisations de connexion.
Pour révoquer un rôle d'un groupe Cloud Identity, consultez la page Révoquer un rôle unique.
Supprimer des utilisateurs d'un groupe IAM
Les membres d'un groupe IAM, tels que les utilisateurs ou les comptes de service, peuvent être supprimés du groupe IAM dans Cloud Identity.
Une fois la suppression propagée via IAM, l'utilisateur ne peut plus se connecter à la base de données, sauf s'il a reçu des autorisations de connexion d'un autre groupe ou s'il se voit accorder directement des droits de connexion. De plus, les utilisateurs supprimés d'un groupe perdent les droits du groupe sur la base de données.
Si un utilisateur de groupe IAM n'appartient à aucun groupe sur l'instance, Cloud SQL le supprime automatiquement de l'instance.
Afficher les informations de connexion dans les journaux d'audit
Vous pouvez activer les journaux d'audit pour capturer les connexions IAM à la base de données. En cas de problèmes de connexion, vous pouvez utiliser les journaux d'audit pour diagnostiquer le problème.
Une fois le service configuré, vous pouvez afficher les journaux d'audit d'accès aux données correspondant aux connexions réussies à l'aide de l'explorateur de journaux.
Pour l'authentification de groupe IAM, les journaux d'audit affichent l'activité et les connexions de chaque utilisateur et compte de service.
Par exemple, un journal peut contenir des informations semblables aux suivantes :
{
insertId: "..."
logName: "projects/.../logs/cloudaudit.googleapis.com%2Fdata_access"
protoPayload: {
@type: "type.googleapis.com/google.cloud.audit.AuditLog"
authenticationInfo: {
principalEmail: "..."
}
authorizationInfo: [
0: {
granted: true
permission: "cloudsql.instances.login"
resource: "instances/..."
resourceAttributes: {
}
}
]
methodName: "cloudsql.instances.login"
request: {
@type: "type.googleapis.com/google.cloud.sql.authorization.v1.InstancesLoginRequest"
clientIpAddress: "..."
database: "..."
databaseSessionId: ...
instance: "projects/.../locations/us-central1/instances/..."
user: "..."
}
requestMetadata: {
callerIp: "..."
destinationAttributes: {
}
requestAttributes: {
auth: {
}
time: "..."
}
}
resourceName: "instances/..."
serviceName: "cloudsql.googleapis.com"
status: {
}
}
receiveTimestamp: "..."
resource: {
labels: {
database_id: "...:..."
project_id: "..."
region: "us-central"
}
type: "cloudsql_database"
}
severity: "INFO"
timestamp: "..."
}
Résoudre un échec de connexion
Lorsqu'une tentative de connexion échoue, MySQL renvoie un message d'erreur minimal pour des raisons de sécurité. Exemple :
$MYSQL_PWD=`gcloud-access-token mysql` --enable-cleartext-plugin --ssl-ca=server-ca.pem
--ssl-cert=client-cert.pem --ssl-key=client-key.pem --host=ip_address --user=testuser
Access denied for user 'testuser'@'...' (using password: NO)
Vous pouvez consulter les journaux d'erreur MySQL pour obtenir plus de détails à propos de l'erreur. Pour en savoir plus, consultez la section Afficher les journaux.
Par exemple, pour l'erreur précédente, l'entrée de journal suivante explique l'action que vous pouvez effectuer pour résoudre le problème.
F ... [152172]: [1-1] db=...,user=... FATAL: Cloud SQL IAM user authentication failed for user "..."
I ... [152172]: [2-1] db=...,user=... DETAIL: Request is missing required authentication credential. Expected OAuth 2 access token, log in cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
Vérifiez le message d'erreur que vous recevez. Si le message n'indique pas que vous avez utilisé l'"Authentification IAM de l'utilisateur Cloud SQL" ou l'Authentification IAM du compte de service Cloud SQL", vérifiez que le type d'utilisateur de base de données utilisé pour se connecter est CLOUD_IAM_USER
ou CLOUD_IAM_SERVICE_ACCOUNT
.
Pour un utilisateur IAM, vérifiez que le nom d'utilisateur de la base de données correspond à l'adresse e-mail de l'utilisateur IAM sans @
ni nom de domaine . Pour un compte de service, vérifiez qu'il s'agit de l'adresse e-mail du compte de service sans @project-id.iam.gserviceaccount.com
.
Si vous avez utilisé l'authentification IAM pour les bases de données, vérifiez les détails du message d'erreur. Vous pouvez trouver le message d'erreur dans le journal d'erreurs de la base de données. Si le jeton d'accès (OAuth 2.0) que vous avez envoyé en tant que mot de passe n'est pas valide, vous pouvez utiliser la commande gcloud
gcloud auth application-default print-access-token
pour obtenir les détails du jeton, comme suit :
curl -H "Content-Type: application/x-www-form-urlencoded" \ -d "access_token=$(gcloud auth application-default print-access-token)" \ https://www.googleapis.com/oauth2/v1/tokeninfo
Vérifiez que le jeton correspond à l'utilisateur ou au compte de service IAM prévu et n'a pas expiré.
Si les détails indiquent qu'il manque une autorisation, vérifiez que l'utilisateur ou le compte de service IAM dispose de l'autorisation cloudsql.instances.login
en utilisant le rôle prédéfini Cloud SQL Instance User
ou un rôle personnalisé dans la stratégie IAM du projet de l'instance. Utilisez l'outil Policy Troubleshooter d'IAM pour obtenir plus d'aide.
Si une connexion échoue en raison de l'indisponibilité de l'authentification IAM pour les bases de données, l'utilisateur peut se connecter à l'aide de l'utilisateur et du mot de passe MySQL par défaut. Cette méthode de connexion donne toujours à l'utilisateur l'accès à la base de données complète. Vérifiez que la connexion est sécurisée.
Résoudre les problèmes liés aux comptes utilisateur utilisant l'authentification IAM de groupe
Cette section répertorie les scénarios de dépannage pour l'authentification IAM de groupe.
Échec de l'ajout d'un groupe à une base de données
Lorsque vous essayez d'ajouter un groupe à une instance, le message d'erreur suivant peut s'afficher :
(gcloud.sql.users.create) HTTPError 400: Invalid request: Provided CLOUD_IAM_GROUP: EMAIL, does not exist.
Vérifiez que l'adresse e-mail que vous avez fournie est un groupe valide.
Si le groupe n'existe pas encore, créez-le. Pour en savoir plus sur la création de groupes, consultez la section Créer et gérer des groupes Google dans la console Google Cloud.
Si vous rencontrez l'erreur suivante :
(gcloud.sql.users.create) HTTPError 400: Invalid request: IAM Group Authentication is disabled.
Avant de pouvoir utiliser l'authentification IAM de groupe, votre instance Cloud SQL nécessite la mise à jour de maintenance suivante :
R20240514.00_04
ou version ultérieure
Vous pouvez appliquer la mise à jour de maintenance à votre instance à l'aide de la maintenance en libre-service. Pour en savoir plus, consultez Maintenance en libre-service.
Un utilisateur ou un compte de service IAM existant n'hérite pas des droits de base de données accordés à son groupe IAM
Si un utilisateur ou un compte de service IAM existant n'hérite pas des droits de base de données appropriés pour son groupe, procédez comme suit :
Dans la console Google Cloud, accédez à la page IAM.
Vérifiez que le compte est membre du groupe ajouté à l'instance Cloud SQL.
Répertoriez les utilisateurs et les comptes de service sur l'instance.
gcloud sql users list --instance=INSTANCE_NAME
Dans le résultat, vérifiez si l'utilisateur ou le compte de service est répertorié en tant que
CLOUD_IAM_USER
ouCLOUD_IAM_SERVICE_ACCOUNT
.Si l'utilisateur ou le compte de service est répertorié en tant que
CLOUD_IAM_USER
ouCLOUD_IAM_SERVICE_ACCOUNT
, supprimez le compte de l'instance. Le compte que vous supprimez est un compte IAM individuel qui n'hérite pas des droits de base de données du groupe.Connectez-vous à nouveau à l'instance avec le compte utilisateur ou le compte de service.
La reconnexion à l'instance recrée le compte avec le type de compte approprié
CLOUD_IAM_GROUP_USER
ouCLOUD_IAM_GROUP_SERVICE_ACCOUNT
.
Étapes suivantes
- Apprenez-en davantage sur l'authentification IAM pour les bases de données.
- Découvrez comment vous connecter à une base de données Cloud SQL.
- Apprenez à configurer des instances pour l'authentification IAM pour les bases de données.