Gérer les utilisateurs avec l'authentification IAM pour les bases de données

Cette page explique comment ajouter un compte d'utilisateur ou de service qui utilise l'authentification IAM pour les bases de données à une base de données et comment gérer ces comptes d'utilisateur et de service. Pour en savoir plus sur l'intégration IAM, consultez la page Authentification IAM.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Installez Google Cloud CLI.
  5. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  6. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  7. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  8. Installez Google Cloud CLI.
  9. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  10. Activez Cloud Key Management Service API.

    Activer l'API

  11. Assurez-vous que vous disposez du rôle d'administrateur Cloud SQL sur votre compte utilisateur.

    Accéder à la page IAM

  12. Activez l'authentification IAM pour les bases de données sur votre instance Cloud SQL.
  13. Assurez-vous d'accorder un accès IAM aux utilisateurs qui en ont besoin pour chaque projet contenant des bases de données auxquelles les utilisateurs doivent accéder. Consultez Accorder, modifier et révoquer les accès à des ressources.
  14. Assurez-vous d'avoir ajouté un compte de service pour chaque service nécessitant un accès aux bases de données du projet.
  15. Si vous utilisez l'authentification de groupe IAM, assurez-vous d'avoir créé le groupe Cloud Identity qui nécessite l'accès aux bases de données dans votre projet.

Ajouter un compte d'utilisateur ou de service IAM à une instance de base de données

Vous devez créer un utilisateur de base de données pour chaque utilisateur IAM devant pouvoir accéder à l'instance de base de données. Le nom d'utilisateur de la base de données doit correspondre à l'adresse e-mail de l'utilisateur IAM, par exemple test-user@example.com.

Lorsque vous utilisez des commandes REST, le nom d'utilisateur doit utiliser être placé entre des 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 d'utilisateur ou de service IAM, vous devez ajouter un nouvel utilisateur de base de données et sélectionner IAM en tant que méthode d'authentification :

Console

  1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Pour ouvrir la page Présentation d'une instance, cliquez sur son nom.
  3. Dans le menu de navigation SQL, sélectionnez Utilisateurs.
  4. Cliquez sur Ajouter un compte utilisateur. L'onglet Ajouter un compte d'utilisateur à l'instance nom_instance s'ouvre.
  5. Cochez la case d'option Cloud IAM.
  6. Ajoutez l'adresse e-mail du compte d'utilisateur ou de service que vous souhaitez ajouter dans le champ Compte principal.
  7. Cliquez sur Ajouter. L'utilisateur figure maintenant dans la liste des utilisateurs.
  8. Si l'utilisateur ne dispose pas du rôle Utilisateur d'instance Cloud SQL, une icône triangle apparaît à gauche du nom de l'utilisateur.

    Pour accorder des droits de connexion utilisateur, cliquez sur l'icône, puis sélectionnez Ajouter un rôle IAM. L'icône n'apparaît plus. L'utilisateur est désormais membre du rôle.

gcloud

Créer un compte utilisateur

Utilisez l'adresse e-mail, telle que test-user@example.com, pour identifier l'utilisateur.

Remplacez l'élément suivant :

  • USERNAME : l'adresse e-mail de l'utilisateur
  • INSTANCE_NAME : le 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 : l'adresse e-mail du compte de service.
  • INSTANCE_NAME : le 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.

resource "google_sql_database_instance" "default" {
  name             = "mysql-db-auth-instance-name-test"
  region           = "us-west4"
  database_version = "MYSQL_8_0"
  settings {
    tier = "db-f1-micro"
    database_flags {
      name  = "cloudsql_iam_authentication"
      value = "on"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

# Specify the email address of the IAM user to add to the instance
# This resource does not create a new IAM user account; this account must
# already exist

resource "google_sql_user" "iam_user" {
  name     = "test-user@example.com"
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_USER"
}

# Create a new IAM service account

resource "google_service_account" "default" {
  account_id   = "cloud-sql-mysql-sa"
  display_name = "Cloud SQL for MySQL Service Account"
}

# Specify the email address of the IAM service account to add to the instance

resource "google_sql_user" "iam_service_account_user" {
  name     = google_service_account.default.email
  instance = google_sql_database_instance.default.name
  type     = "CLOUD_IAM_SERVICE_ACCOUNT"
}

Appliquer les modifications

Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.

Préparer Cloud Shell

  1. Lancez Cloud Shell.
  2. 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).

  1. 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 exemple main.tf. Dans ce tutoriel, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  4. Enregistrez les modifications.
  5. 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

  1. 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.

  2. 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).

  3. 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 :

  1. Pour désactiver la protection contre la suppression, définissez l'argument deletion_protection sur false dans le fichier de configuration Terraform.
    deletion_protection =  "false"
  2. Appliquez la configuration Terraform mise à jour en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply
  1. 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 v1

Créer un compte utilisateur

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 à laquelle vous ajoutez l'utilisateur
  • username : adresse e-mail de l'utilisateur
  • operation-id : ID de l'opération

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 : L'adresse e-mail de votre compte de service
  • project-id : ID de votre projet
  • instance-id : ID de l'instance à laquelle vous ajoutez le compte de service
  • operation-id : ID de l'opération

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 de votre projet
  • instance-id : ID de l'instance à laquelle vous ajoutez l'utilisateur
  • username : adresse e-mail de l'utilisateur
  • operation-id : ID de l'opération

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 : L'adresse e-mail de votre compte de service
  • project-id : ID de votre projet
  • instance-id : ID de l'instance à laquelle vous ajoutez le compte de service
  • operation-id : ID de l'opération

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 à l'instance de base de données

Pour configurer l'authentification de groupe IAM pour votre instance, procédez comme suit :

  1. Si vous n'avez pas encore créé de groupe Cloud Identity, créez-en un dans le projet dans lequel vous gérez vos instances Cloud SQL. Pour en savoir plus, consultez la page de présentation de Cloud Identity.

  2. Exécutez la commande suivante pour ajouter le groupe à votre instance Cloud SQL.

    Console

    L'ajout de groupes à une instance n'est pas disponible via la console Google Cloud pendant la phase preview.

    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
       

    REST v1

    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 à laquelle vous ajoutez le groupe Cloud Identity
    • GROUP_EMAIL : adresse e-mail du groupe.
    • OPERATION_ID : ID de l'opération

    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, effectuez les remplacements suivants :

    • PROJECT_ID : ID de votre projet
    • INSTANCE_ID : ID de l'instance à laquelle vous ajoutez le groupe Cloud Identity
    • GROUP_EMAIL : adresse e-mail du groupe Cloud Identity
    • OPERATION_ID : ID de l'opération

    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 des utilisateurs ou des comptes de service d'un groupe à une instance de base de données

L'ajout d'un groupe Cloud Identity à une instance n'ajoute pas automatiquement les membres du groupe en tant qu'utilisateurs à l'instance. Lorsqu'un membre se connecte à l'instance pour la première fois, un utilisateur ou un compte de service est créé sur l'instance.

Pour en savoir plus, consultez la page Connexion à l'aide de l'authentification IAM pour les bases de données.

Gérer les utilisateurs ou les comptes de service d'un groupe sur une instance

Vous pouvez contrôler l'accès à une instance en gérant l'appartenance au groupe Cloud Identity. Pour en savoir plus, consultez la page de présentation de Cloud Identity.

Un utilisateur peut être membre de plusieurs groupes Cloud Identity. Si un utilisateur appartient à plusieurs groupes Cloud Identity 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.

La propagation des modifications apportées à l'appartenance à un groupe, telles que l'ajout d'un compte, prend environ 15 minutes. Ce temps s'ajoute au temps nécessaire pour les modifications IAM.

Une fois les modifications propagées, l'utilisateur ou le compte de service doit se déconnecter et se reconnecter pour que les modifications prennent effet. L'attribution ou la révocation de droits sur la base de données pour un groupe dans MySQL prend effet immédiatement. Par exemple, si vous révoquez l'accès à une table, les membres de ce groupe Cloud Identity perdent l'accès à cette table immédiatement, sans avoir à se déconnecter et se reconnecter.

Lorsqu'une identité Cloud Identity supplémentaire est ajoutée à une instance, les utilisateurs doivent se déconnecter et se reconnecter pour recevoir les autorisations du nouveau groupe.

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 test-user@example.com. Celui-ci doit utiliser des guillemets, car il contient des caractères spéciaux (@ et .).

Console

  1. Dans Google Cloud Console, accédez à la page IAM.

    Accéder à IAM

  2. Cliquez sur Ajouter.
  3. 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.
  4. Dans Rôle, accédez à Cloud SQL, puis sélectionnez Utilisateur d'instance Cloud SQL et Client Cloud SQL.
  5. Pour les utilisateurs et les comptes de service, sélectionnez Client Cloud SQL.
  6. 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
  

Exécutez à nouveau la commande gcloud projects add-iam-policy-binding avec l'option --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
  

Exécutez à nouveau la commande gcloud projects add-iam-policy-binding avec l'option --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.

L'authentification via un groupe IAM est disponible en version preview.

Terraform

Pour ajouter la liaison de stratégie requise aux comptes utilisateur et de service IAM, utilisez une ressource Terraform.

data "google_project" "project" {
}

resource "google_project_iam_binding" "cloud_sql_user" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.instanceUser"
  members = [
    "user:test-user@example.com",
    "serviceAccount:${google_service_account.default.email}"
  ]
}

resource "google_project_iam_binding" "cloud_sql_client" {
  project = data.google_project.project.project_id
  role    = "roles/cloudsql.client"
  members = [
    "user:test-user@example.com",
    "serviceAccount:${google_service_account.default.email}"
  ]
}

Appliquer les modifications

Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.

Préparer Cloud Shell

  1. Lancez Cloud Shell.
  2. 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).

  1. 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 exemple main.tf. Dans ce tutoriel, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  4. Enregistrez les modifications.
  5. 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

  1. 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.

  2. 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).

  3. 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 :

  1. Pour désactiver la protection contre la suppression, définissez l'argument deletion_protection sur false dans le fichier de configuration Terraform.
    deletion_protection =  "false"
  2. Appliquez la configuration Terraform mise à jour en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply
  1. 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:test-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"
                   "group:example-group@example.com"
      ]
    }
    {
      "role": "roles/cloudsql.client",
      "members": [
                   "user:test-user@example.com"
                   "serviceAccount:service1@sql.iam.gserviceaccount.com"
      ]
    }

Accorder des droits pour une base de données à l'utilisateur IAM

Lorsqu'un utilisateur IAM est ajouté à une instance de base de données, ce nouvel utilisateur ne dispose par défaut d'aucun droit sur les bases de données.

Pour accorder à l'utilisateur des droits d'accès ou d'autres droits, 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 :

  • USERNAME : pour un compte utilisateur, il s'agit de l'adresse e-mail de l'utilisateur IAM avec la chaîne @ et la chaîne de domaine tronquées. Par exemple, si l'adresse e-mail de l'utilisateur IAM est test-user@example.com, le nom d'utilisateur est test-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.
  • DATABASE_NAME : nom de la base de données qui héberge la table.
  • TABLE_NAME : nom de la table pour laquelle vous souhaitez accorder l'accès à l'utilisateur.
  • grant select on DATABASE_NAME.TABLE_NAME to "USERNAME";
    

    Accorder des droits pour une base de données à un groupe

    Lorsque vous utilisez l'authentification de groupe IAM, vous accordez des droits de base de données aux groupes Cloud Identity au lieu de les accorder à des utilisateurs individuels. Par défaut, lorsque vous ajoutez un groupe Cloud Identity à une instance Cloud SQL, ce groupe ne dispose d'aucun droit.

    Pour accorder des droits de base de données aux utilisateurs du groupe Cloud Identity, utilisez l'instruction GRANT.

    Remplacez les éléments suivants :

    • GROUP_NAME : première partie de l'adresse e-mail du groupe Cloud Identity. Par exemple, pour l'adresse e-mail example-group@example.com, le nom du groupe Cloud Identity est example-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 est example.com.
    • DATABASE_NAME : nom de la base de données qui héberge la table.
    • TABLE_NAME : nom de la table à laquelle vous souhaitez accorder l'accès aux membres du groupe Cloud Identity.

    Exécutez la commande GRANT à partir de la ligne de commande mysql.

    grant select on DATABASE_NAME.TABLE_NAME to "GROUP_NAME"@"HOSTNAME";
    

    Les droits de base de données que vous accordez au groupe Cloud Identity prennent effet immédiatement.

    Pour en savoir plus sur l'attribution de droits, consultez la page de référence GRANT dans la documentation MySQL.

    Afficher les groupes, les utilisateurs IAM et les comptes de service

    Pour afficher les groupes Cloud Identity ajoutés à votre instance, exécutez la commande suivante.

    Console

    Il n'est pas possible d'afficher les groupes d'une instance via la console Google Cloud pendant la phase preview.

    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.

    Supprimer un compte d'utilisateur ou de service IAM de la base de données

    Pour supprimer un compte d'utilisateur ou de service de la base de données, supprimez-le de l'instance :

    Console

    1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

      Accéder à la page Instances Cloud SQL

    2. Pour ouvrir la page Présentation d'une instance, cliquez sur son nom.
    3. Dans le menu de navigation SQL, sélectionnez Utilisateurs.
    4. Cliquez sur l'élément correspondant à l'utilisateur que vous souhaitez supprimer.
    5. 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 test-user@example.com, pour identifier l'utilisateur.

    Remplacez les éléments suivants :

    • USERNAME : adresse e-mail sans le @nom de domaine.
    • INSTANCE_NAME : le nom de l'instance de laquelle vous souhaitez supprimer l'utilisateur.
    gcloud sql users delete USERNAME \
    --instance=INSTANCE_NAME
    

    Supprimer le compte de service

    Remplacez les éléments suivants :

    • SERVICE_ACCT : l'adresse e-mail du compte de service.
    • INSTANCE_NAME : le 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 utilisateurs ou des comptes de service de l'authentification IAM de groupe

    Vous ne pouvez pas utiliser la gcloud CLI pour supprimer des comptes utilisateur ou de service créés avec l'authentification IAM pour les groupes. Cloud SQL crée ces comptes automatiquement après la première connexion de l'utilisateur ou du compte de service.

    Le seul moyen de supprimer ces comptes consiste à utiliser le client MySQL avec un utilisateur disposant des droits de super-utilisateur.

    Pour générer une requête sur la suppression de comptes utilisateur ou de service, consultez la documentation MySQL.

    Supprimer un groupe d'une instance

    Si vous supprimez un groupe Cloud Identity d'une instance, tous les utilisateurs et comptes de service appartenant au groupe Cloud Identity perdent les droits de base de données accordés au groupe Cloud Identity. Les utilisateurs et les comptes de service appartenant au groupe Cloud Identity peuvent toujours se connecter jusqu'à la suppression des autorisations de connexion IAM du groupe.

    Console

    La suppression de groupes d'une instance n'est pas disponible via la console Google Cloud pendant la phase preview.

    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 est example-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 est example.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
    

    Retirer des autorisations de connexion IAM d'un groupe

    Si vous révoquez le rôle cloudsql.instanceUser d'un groupe Cloud Identity, 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 Cloud Identity 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.

    Retirer des utilisateurs d'un groupe

    Les utilisateurs peuvent être supprimés d'un groupe Cloud Identity.

    Une fois la suppression propagée via IAM, l'utilisateur peut toujours se connecter à une base de données s'il dispose des autorisations IAM appropriées. Toutefois, lors de la nouvelle connexion, les utilisateurs ne disposeront plus des droits de base de données appartenant au groupe Cloud Identity duquel ils ont été supprimés.

    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. L'authentification des groupes IAM est disponible en version preview.

    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 présentation de Cloud Identity.

    Un utilisateur ou un compte de service IAM existant n'hérite pas des droits de base de données accordés à son groupe

    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 :

    1. Dans la console Google Cloud, accédez à la page IAM.

      Accéder à IAM

      Vérifiez que le compte est membre du groupe ajouté à l'instance Cloud SQL.

    2. 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 ou CLOUD_IAM_SERVICE_ACCOUNT.

    3. Si l'utilisateur ou le compte de service est répertorié en tant que CLOUD_IAM_USER ou CLOUD_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.

    4. 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 ou CLOUD_IAM_GROUP_SERVICE_ACCOUNT.

    Étapes suivantes