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
- 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.
-
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.
- 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.
- Assurez-vous d'avoir ajouté un compte de service pour chaque service nécessitant un accès aux bases de données du 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
.
@
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
-
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 instance_name 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 figure maintenant dans la liste des utilisateurs.
Si l'utilisateur ne dispose pas du rôle Utilisateur d'instance Cloud SQL, une icône 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.
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 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-acctAdresse 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-acctAdresse 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 une liaison de stratégie IAM à un compte utilisateur ou de service
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
-
Dans Google Cloud Console, 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 et Client Cloud SQL.
- Pour les utilisateurs et les comptes de service, sélectionnez 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
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
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
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" ] } { "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.Lorsqu'un utilisateur ou un compte de service se connecte à une base de données, il peut exécuter des requêtes sur tous les objets de base de données dont l'accès a été accordé à PUBLIC.
Si l'utilisateur a besoin d'un accès supplémentaire, des droits supplémentaires peuvent lui être accordés à l'aide de 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.
Remplacez les éléments suivants :
- USERNAME : l'adresse e-mail de l'utilisateur. Vous devez utiliser des guillemets autour de l'e-mail, car celle-ci contient des caractères spéciaux (
@
et.
). - TABLE_NAME : nom de la table pour laquelle vous souhaitez accorder l'accès à l'utilisateur.
grant select on TABLE_NAME to "USERNAME";
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
-
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 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 test-user@example.com
, pour identifier l'utilisateur.
Remplacez les éléments suivants :
- USERNAME : l'adresse e-mail
- 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" }
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.
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, PostgreSQL renvoie un message d'erreur minimal pour des raisons de sécurité. Exemple :
PGPASSWORD=not-a-password psql --host=... --username=... --dbname=...
psql: error: could not connect to server: FATAL: Cloud SQL IAM user authentication failed for user "..."
FATAL: pg_hba.conf rejects connection for host "...", user "...", database "...", SSL off
Vous pouvez consulter les journaux d'erreur PostgreSQL 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
.
Vous pouvez le vérifier à l'aide de la console Google Cloud ou de la commande gcloud sql
users list
.
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.
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 PostgreSQL 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.
É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.