Cette page explique comment se connecter à une instance AlloyDB pour PostgreSQL à l'aide d'un compte préparé avec Identity and Access Management (IAM). Il illustre le processus en montrant comment effectuer une connexion basée sur IAM à l'aide du client de ligne de commande psql
.
Pour en savoir plus sur la connexion aux instances AlloyDB, consultez la page Présentation de la connexion.
Avant de commencer
Votre projet, votre cluster, vos instances et vos comptes utilisateur IAM doivent tous être préparés avant que vous puissiez vous connecter à une instance AlloyDB à l'aide d'identifiants IAM.
Pour en savoir plus, consultez Gérer l'authentification IAM.
S'authentifier avec un jeton OAuth 2.0
Un utilisateur ou une application peut s'authentifier auprès d'une base de données AlloyDB en procédant comme suit:
Si vous ne l'avez pas déjà fait, autorisez la Google Cloud CLI à l'aide du même compte utilisateur ou de service que celui avec lequel vous souhaitez vous connecter à votre instance AlloyDB.
Demandez un jeton OAuth 2.0 à Google Cloud à l'aide de la commande
gcloud auth print-access-token
:gcloud auth print-access-token
Google Cloud imprime un jeton OAuth 2.0 en sortie de cette commande.
Pour plus de sécurité, vous pouvez limiter l'utilisation du jeton à l'authentification AlloyDB en procédant comme suit:
Si ce n'est pas déjà fait, ajoutez le champ d'application
alloydb.login
aux identifiants d'accès de votre environnement actuel à l'aide de la commandegcloud auth application-default login
:gcloud auth application-default login --scopes=https://www.googleapis.com/auth/alloydb.login,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/userinfo.email,openid
Imprimez un jeton OAuth 2.0 limité à l'aide de la commande
gcloud auth application-default print-access-token
, en limitant le champ d'application du jeton à l'authentification AlloyDB:gcloud auth application-default print-access-token –-scopes=https://www.googleapis.com/auth/alloydb.login
Le jeton OAuth 2.0 vous permet, ou à toute autre personne, d'effectuer des requêtes authentifiées à votre place auprès de Google Cloud . Traitez le jeton avec le même niveau de sécurité qu'un mot de passe. Stockez le jeton de manière sécurisée ou évitez de le stocker du tout. L'exemple d'utilisation de
psql
plus loin sur cette page montre comment demander, utiliser et supprimer un jeton OAuth 2.0 en une seule action.Connectez-vous à une instance AlloyDB à l'aide de techniques PostgreSQL standards, en utilisant ces identifiants:
Présentez le jeton d'accès que vous avez obtenu à l'étape précédente comme mot de passe.
Pour un compte utilisateur IAM, le nom d'utilisateur de la base de données correspond à l'adresse e-mail complète du compte.
Pour un compte de service IAM, le nom d'utilisateur de la base de données correspond à l'adresse e-mail du compte sans le suffixe
.gserviceaccount.com
.
La commande psql
suivante montre comment se connecter à un utilisateur IAM sur la ligne de commande. Il attribue la sortie de gcloud
auth print-access-token
à la variable d'environnement PGPASSWORD
, que psql
utilise ensuite comme mot de passe de connexion à la base de données.
PGPASSWORD=$(gcloud auth print-access-token) psql \
-h INSTANCE_ADDRESS \
-U USERNAME \
-d DATABASE
Remplacez les éléments suivants :
INSTANCE_ADDRESS
: adresse IP de l'instance AlloyDB à laquelle vous souhaitez vous connecter.USERNAME
: identifiant de l'utilisateur IAM pour l'authentification auprès de l'instance.Pour un compte utilisateur IAM, indiquez l'adresse e-mail complète du compte utilisateur. Par exemple,
kai@altostrat.com
.Pour un compte de service IAM, indiquez l'adresse du compte de service sans le suffixe
.gserviceaccount.com
. Par exemple, pour spécifier le compte de servicemy-service@my-project.iam.gserviceaccount.com
, vous devez utiliser la valeurmy-service@my-project.iam
ici.DATABASE
: nom de la base de données à laquelle se connecter
Notez que psql
tronque les mots de passe saisis sur la ligne de commande qui comportent plus de 100 caractères. Pour utiliser psql
avec un jeton OAuth 2.0 comme mot de passe de connexion, vous devez définir la variable d'environnement PGPASSWORD
comme indiqué dans cet exemple, au lieu de la coller manuellement lorsque vous y êtes invité.
S'authentifier automatiquement à l'aide du proxy d'authentification AlloyDB ou des connecteurs de langage AlloyDB
Vous pouvez utiliser le proxy d'authentification AlloyDB ou les connecteurs de langage AlloyDB pour authentifier automatiquement un utilisateur AlloyDB basé sur IAM et vous connecter à une instance sans avoir à fournir de jeton OAuth 2.0.
L'utilisation du proxy d'authentification AlloyDB nécessite d'exécuter le client du proxy d'authentification AlloyDB avec l'indicateur --auto-iam-authn
activé, tandis que les connecteurs de langage AlloyDB nécessitent d'activer l'authentification IAM par programmation.
Lorsque vous utilisez les connecteurs linguistiques, une option correspondante est disponible pour chaque langue. Pour en savoir plus, consultez la section Configurer les connecteurs de langage AlloyDB.
Le compte IAM que vous utilisez pour exécuter le client proxy ou les connecteurs linguistiques doit être le même que celui que vous avez ajouté en tant qu'utilisateur de base de données. Par exemple, si vous exécutez votre charge de travail à l'aide du compte utilisateur IAM kai@altostrat.com
, vous pouvez utiliser le client proxy ou les connecteurs de langage pour authentifier automatiquement l'utilisateur de la base de données kai@altostrat.com
sans spécifier de jeton OAuth 2.0. Dans cet exemple, l'authentification automatique ne fonctionne avec aucun autre utilisateur de base de données, à l'exception de kai@altostrat.com
.
Pour en savoir plus sur l'exécution du proxy d'authentification, consultez la section Se connecter à l'aide du proxy d'authentification AlloyDB.
Pour en savoir plus sur l'exécution des connecteurs linguistiques, consultez la section Se connecter à l'aide des connecteurs linguistiques AlloyDB.
Résoudre les problèmes d'authentification IAM
Pour déterminer la cause d'une tentative d'authentification basée sur IAM ayant échoué, procédez comme suit:
Dans la console Google Cloud, accédez à la page Explorateur de journaux:
Sous Resource type (Type de ressource), cliquez sur AlloyDB instance (Instance AlloyDB).
Sous Gravité, cliquez sur Alerte.
Si l'option Alert (Alerte) n'est pas disponible, cela signifie qu'aucune erreur d'authentification n'a été enregistrée au cours de la période sélectionnée. Vous devrez peut-être ajuster la fenêtre à l'aide des commandes de l'explorateur de journaux.
Sous Résultats de la requête, recherchez l'un des messages suivants dans les entrées de journal:
Request had invalid authentication credentials.
- Le jeton d'accès n'est pas valide.
Caller does not have required permission to use project.
- Le compte principal IAM ne dispose pas des rôles IAM ni des autorisations nécessaires. Le message d'erreur complet indique les rôles ou autorisations manquants.
IAM principal does not match database user.
Le compte principal IAM authentifié spécifié par le jeton d'accès ne correspond pas à l'utilisateur de la base de données avec lequel vous souhaitez vous connecter.
Pour afficher le principal spécifié par le jeton, exécutez la commande suivante:
curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=ACCESS_TOKEN" https://www.googleapis.com/oauth2/v1/tokeninfo
Remplacez
ACCESS_TOKEN
par le jeton d'accès OAuth 2.0.Request had insufficient scopes.
- Le jeton d'accès ne contient ni le champ d'application
alloydb.login
, ni le champ d'applicationcloud-platform
. Vous devez indiquer au moins l'un de ces champs d'application.