Se connecter à l'aide d'un compte IAM

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 obtenir un aperçu de la connexion aux instances AlloyDB, consultez 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 :

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

  2. Demandez un jeton OAuth 2.0 à partir de 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 comme résultat de cette commande.

    Pour plus de sécurité, vous pouvez limiter l'utilisation du jeton à l'authentification AlloyDB uniquement en suivant ces étapes alternatives :

    1. 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 commande gcloud 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
    2. Imprimez un jeton OAuth 2.0 restreint à l'aide de la commande gcloud auth application-default print-access-token, en limitant le 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, à vous ou à n'importe qui, d'envoyer des requêtes authentifiées à Google Cloud en votre nom. 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. 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.

  3. Connectez-vous à une instance AlloyDB avec les techniques PostgreSQL standards, à l'aide des identifiants suivants :

    • 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 en 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 se 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 service my-service@my-project.iam.gserviceaccount.com, vous devez utiliser la valeur my-service@my-project.iam.

  • DATABASE : nom de la base de données à laquelle se connecter

Notez que psql tronque les mots de passe de plus de 100 caractères saisis sur la ligne de commande. 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, plutôt que de la coller manuellement lorsque vous y êtes invité.

S'authentifier automatiquement

Pour authentifier automatiquement un utilisateur AlloyDB basé sur IAM sans avoir besoin d'un jeton OAuth 2.0, vous avez deux options : le proxy d'authentification AlloyDB et les connecteurs de langage AlloyDB.

Le compte IAM que vous utilisez pour exécuter le client proxy ou les connecteurs Language doit être le même que celui que vous avez ajouté en tant qu'utilisateur de la 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.

Proxy Auth

Pour utiliser le proxy d'authentification, vous devez exécuter le client du proxy d'authentification AlloyDB avec l'option --auto-iam-authn activée.

Pour en savoir plus sur l'exécution du proxy d'authentification, consultez Se connecter à l'aide du proxy d'authentification AlloyDB.

Connecteurs de langage

Pour utiliser les connecteurs de langage, vous devez activer l'authentification IAM de manière programmatique. Une option correspondante est disponible pour chaque langue dans Configurer les connecteurs de langage AlloyDB.

Résoudre les problèmes d'authentification IAM

Pour déterminer la cause d'une tentative d'authentification basée sur IAM qui a échoué, procédez comme suit :

  1. Dans la console Google Cloud , accédez à la page "Explorateur de journaux" :

    Accéder à l'explorateur de journaux

  2. Sous Type de ressource, cliquez sur Instance AlloyDB.

  3. Sous Gravité, cliquez sur Alerte.

    Si l'option 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.

  4. Sous Résultats de la requête, recherchez les entrées de journal correspondant à l'un des messages suivants :

    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 base de données auquel 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 pas le champ d'application alloydb.login ni le champ d'application cloud-platform. Au moins l'une de ces autorisations est requise.

Étapes suivantes