Authentification par fédération d'identité de personnel

Cette page explique comment configurer et utiliser la fédération des identités des employés (également appelée authentification IAM tierce) avec Cloud SQL. La fédération des identités des employés vous permet d'utiliser votre fournisseur d'identité (IdP) existant, tel que Microsoft Active Directory ou Okta, pour accéder aux instances Cloud SQL sans avoir besoin d'un compte Google .

Voici les principaux avantages de la fédération d'identité de personnel :

  • Réduction des frais généraux : vous n'avez pas besoin de valider les domaines ni de synchroniser les identités avec Cloud Identity.
  • Sécurité renforcée : gestion centralisée de l'accès aux bases de données via votre IdP d'entreprise existant.
  • Évolutivité : convient aux grandes organisations ayant des besoins complexes en matière de gestion des identités.

Pour obtenir une description détaillée de la fédération des identités des employés, consultez la Présentation de la fédération des identités des employés.

Fonctionnement

La fédération des identités des employés permet aux utilisateurs de s'authentifier auprès de Google Cloud à l'aide d'une identité externe. Pour Cloud SQL, cela signifie que les comptes principaux d'un pool d'employés peuvent se connecter aux instances Cloud SQL pour PostgreSQL.

Cloud SQL est compatible avec la fédération d'identité des employés via le type d'utilisateur CLOUD_IAM_WORKFORCE_IDENTITY. Pour accorder l'accès, Cloud SQL valide vos identifiants de personnel et votre autorisation IAM au niveau du projet lors de la connexion.

Avant de commencer

Avant de configurer l'authentification de base de données de la fédération des identités des employés, assurez-vous de remplir les conditions préalables suivantes :

Rôles et autorisations

Pour obtenir les autorisations nécessaires pour configurer et utiliser l'authentification par fédération des identités des employés, demandez à votre administrateur de vous accorder les rôles IAM suivants sur l'organisation :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Configurer l'authentification par fédération d'identité de personnel

Les sections suivantes expliquent comment configurer votre instance pour utiliser l'authentification par fédération d'identité de personnel.

Activer l'authentification IAM sur l'instance

Pour activer l'authentification IAM, définissez l'option cloudsql.iam_authentication sur on.

Console

  1. Dans la console Google Cloud , 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. Cliquez sur Modifier.
  4. Développez la section Personnaliser votre instance.
  5. Développez la section Connexions.
  6. Sous Sécurité, cochez la case Activer l'authentification IAM Cloud SQL.
  7. Cliquez sur Enregistrer.

gcloud

Utilisez la commande suivante pour activer l'authentification IAM :

gcloud sql instances patch INSTANCE_NAME \
    --database-flags=cloudsql.iam_authentication=on
  

Remplacez INSTANCE_NAME par le nom de l'instance.

Terraform

Ajoutez le bloc database_flags à votre ressource google_sql_database_instance :

resource "google_sql_database_instance" "instance" {
  name             = "INSTANCE_NAME"
  database_version = "POSTGRES_15"
  region           = "REGION"

  settings {
    tier = "db-f1-micro"
    database_flags {
      name  = "cloudsql.iam_authentication"
      value = "on"
    }
  }
}
  

Remplacez les éléments suivants :

  • INSTANCE_NAME : nom de l'instance.
  • REGION : région dans laquelle se trouve l'instance.

REST v1

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID du projet
  • LOCATION_ID : ID de l'emplacement
  • INSTANCE_ID : ID de l'instance souhaitée
  • REGION : région souhaitée
  • DATABASE_VERSION : chaîne d'énumération de la version de base de données. Par exemple : POSTGRES_12
  • PASSWORD : mot de passe de l'utilisateur racine.
  • MACHINE_TYPE : chaîne d'énumération du type (niveau) de machine, comme suit : db-custom-[CPUS]-[MEMORY_MBS].

Méthode HTTP et URL :

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/instances

Corps JSON de la requête :

{
  "name": "INSTANCE_ID",
  "region": "REGION",
  "databaseVersion": "DATABASE_VERSION",
  "rootPassword": "PASSWORD",
  "settings": {
    "tier": "MACHINE_TYPE",
    "backupConfiguration": {
      "enabled": true
    }
    "databaseFlags":
    [
      {
        "name": "cloudsql.iam_authentication",
        "value": "on"
      }
    ]
  }
}

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": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "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
  • LOCATION_ID : ID de l'emplacement
  • INSTANCE_ID : ID de l'instance souhaitée
  • REGION : région souhaitée
  • DATABASE_VERSION : chaîne d'énumération de la version de base de données. Par exemple : POSTGRES_12
  • PASSWORD : mot de passe de l'utilisateur racine.
  • MACHINE_TYPE : chaîne d'énumération du type (niveau) de machine, comme suit : db-custom-[CPUS]-[MEMORY_MBS].

Méthode HTTP et URL :

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/locations/LOCATION_ID/instances

Corps JSON de la requête :

{
  "name": "INSTANCE_ID",
  "region": "REGION",
  "databaseVersion": "DATABASE_VERSION",
  "rootPassword": "PASSWORD",
  "settings": {
    "tier": "MACHINE_TYPE",
    "backupConfiguration": {
      "enabled": true
    }
    "databaseFlags":
    [
      {
        "name": "cloudsql.iam_authentication",
        "value": "on"
      }
    ]
  }
}

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": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Ajouter l'utilisateur d'identité de personnel à l'instance

Ajoutez le compte principal externe à votre instance à l'aide du type CLOUD_IAM_WORKFORCE_IDENTITY.

Assurez-vous que l'ID utilisateur que vous utilisez correspond à la valeur fournie par le mappage d'attributs de votre fournisseur d'identité de personnel. En règle générale, il s'agit d'une adresse e-mail, par exemple cruz@example.com.

Console

  1. Dans la console Google Cloud , 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. Le volet Ajouter un compte utilisateur à l'instance INSTANCE_NAME s'ouvre.
  5. Sélectionnez Fédération des identités des employés.
  6. Dans le champ Utilisateur Workforce, saisissez l'ID de l'utilisateur que vous souhaitez ajouter.
  7. Cliquez sur Ajouter.

gcloud

Exécutez la commande suivante pour créer l'utilisateur :

gcloud sql users create USER_ID \
    --instance=INSTANCE_NAME \
    --type=CLOUD_IAM_WORKFORCE_IDENTITY
  

Remplacez les éléments suivants :

  • USER_ID : ID utilisateur de l'utilisateur que vous souhaitez ajouter (par exemple, cruz@example.com).
  • INSTANCE_NAME : nom de l'instance.

Terraform

Utilisez la ressource google_sql_user pour définir l'utilisateur de l'identité de personnel :

resource "google_sql_user" "workforce_user" {
  name     = "USER_ID" # e.g., "cruz@example.com"
  instance = "INSTANCE_NAME"
  type     = "CLOUD_IAM_WORKFORCE_IDENTITY"
}
  

Remplacez les éléments suivants :

  • USER_ID : ID utilisateur de l'utilisateur que vous souhaitez ajouter (par exemple, cruz@example.com).
  • INSTANCE_NAME : nom de l'instance.

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_WORKFORCE_IDENTITY"
}

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"
}

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_WORKFORCE_IDENTITY"
  }

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"
}

Attribuer le rôle d'utilisateur d'instance

Attribuez le rôle roles/cloudsql.instanceUser au compte principal d'identité de personnel ou à l'ensemble du pool.

Console

  1. Dans la console Google Cloud , accédez à la page Comptes de service.

    Accéder à IAM

  2. Cliquez sur Accorder l'accès.
  3. Dans le champ Nouveaux comptes principaux, effectuez l'une des opérations suivantes :

    • Pour accorder l'accès à un compte principal individuel, saisissez l'identité de personnel en tant que principal :

      principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID

    • Pour accorder l'accès à l'ensemble du pool, saisissez le pool d'employés en tant que principalSet :

      principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*

  4. Dans la liste Rôle, sélectionnez Cloud SQL > Utilisateur d'instance Cloud SQL.
  5. Facultatif : Si vous souhaitez vous connecter à l'aide du proxy d'authentification Cloud SQL ou des connecteurs de langage Cloud SQL, cliquez sur Ajouter un autre rôle, puis sélectionnez Cloud SQL > Client Cloud SQL.
  6. Cliquez sur Enregistrer.

gcloud

Pour accorder l'accès à un utilisateur individuel, utilisez la commande gcloud projects add-iam-policy-binding :

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID" \
    --role="roles/cloudsql.instanceUser"
  

Remplacez les éléments suivants :

  • USER_ID : ID utilisateur de l'utilisateur que vous souhaitez ajouter (par exemple, cruz@example.com).
  • POOL_ID : ID du pool de personnel.
  • PROJECT_ID : identifiant du projet contenant l'instance.

Pour accorder l'accès à l'ensemble du pool d'employés, utilisez la commande gcloud projects add-iam-policy-binding avec le format de membre principalSet :

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*" \
    --role="roles/cloudsql.instanceUser"
  

Terraform

Utilisez la ressource google_project_iam_member pour attribuer le rôle au compte principal de personnel :

resource "google_project_iam_member" "workforce_user_iam" {
  project = "PROJECT_ID"
  role    = "roles/cloudsql.instanceUser"
  member  = "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID"
}
  

Remplacez les éléments suivants :

  • USER_ID : ID utilisateur de l'utilisateur que vous souhaitez ajouter (par exemple, cruz@example.com).
  • POOL_ID : ID du pool de personnel.
  • PROJECT_ID : identifiant du projet contenant l'instance.

REST

Pour accorder des stratégies IAM à l'aide de l'API, récupérez la stratégie IAM du projet à l'aide de la méthode getIamPolicy. Ensuite, ajoutez la nouvelle liaison à la stratégie, puis appliquez la stratégie mise à jour à l'aide de la méthode setIamPolicy.

Voici un exemple de charge utile de liaison à ajouter à votre stratégie IAM :

{
  "bindings": [
    {
      "role": "roles/cloudsql.instanceUser",
      "members": [
        "principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/USER_ID"
      ]
    }
  ]
}
  

Remplacez les éléments suivants :

  • USER_ID : ID utilisateur de l'utilisateur que vous souhaitez ajouter (par exemple, cruz@example.com).
  • POOL_ID : ID du pool de personnel.

Accorder des droits sur une base de données

Vous pouvez spécifier les rôles de base de données à attribuer lors de la création de l'utilisateur de l'identité des employés, ou attribuer manuellement les droits de base de données dans la base de données.

Par exemple, pour accorder des droits manuellement :

GRANT SELECT ON TABLE_NAME TO "USER_ID";

Remplacez les éléments suivants :

  • TABLE_NAME : nom de la table de base de données.
  • USER_ID : ID utilisateur de l'utilisateur de la base de données d'identité de personnel, par exemple cruz@example.com.

Se connecter à l'instance

Vous pouvez maintenant vous connecter à votre instance à l'aide de la gcloud CLI ou du proxy d'authentification Cloud SQL.

Utiliser la gcloud CLI

Vous devez d'abord vous authentifier avec votre identité d'employé avant de pouvoir générer un jeton de connexion.

  1. Pour vous authentifier à l'aide de la fédération d'identité de personnel, utilisez la commande gcloud auth login avec l'option --cred-file :

    gcloud auth login --cred-file=CONFIGURATION_FILE
    

    Remplacez CONFIGURATION_FILE par le chemin d'accès au fichier de configuration généré pour votre fournisseur d'identité de personnel.

  2. Pour vous connecter à l'aide d'un jeton généré, exécutez la commande suivante :

    bash export PGPASSWORD=$(gcloud sql generate-login-token) psql "host=INSTANCE_IP user=USER_ID \ dbname=DB_NAME sslmode=require"

    Remplacez les éléments suivants :

  3. INSTANCE_IP : adresse IP de votre instance Cloud SQL.

  4. USER_ID : ID utilisateur de l'utilisateur du personnel, par exemple cruz@example.com.

  5. DB_NAME : nom de la base de données à laquelle vous souhaitez vous connecter.

Utiliser le proxy d'authentification Cloud SQL

Démarrez le proxy avec l'option --auto-iam-authn :

./cloud-sql-proxy INSTANCE_CONNECTION_NAME --auto-iam-authn

Pour en savoir plus sur le proxy, consultez À propos du proxy d'authentification Cloud SQL.

Restrictions et limitations

  • ID utilisateur en double dans les pools : Cloud SQL ne peut pas distinguer les sujets ayant le même ID utilisateur dans différents pools d'employés ou fournisseurs d'identité. Si vous utilisez plusieurs pools ou fournisseurs d'employés, vous devez utiliser des stratégies IAM pour vous assurer de ne pas accorder l'autorisation de connexion roles/cloudsql.instanceUser à des noms de sujets en double provenant de différents pools ou fournisseurs. Cela empêche tout accès non autorisé à partir d'un autre pool ou fournisseur avec le même ID utilisateur.
  • Quota de connexion : chaque instance dispose d'un quota de 12 000 connexions par minute, qu'il s'agisse de tentatives de connexion réussies ou pas. Lorsque le quota est dépassé, les connexions sont temporairement indisponibles. Nous vous recommandons d'éviter les connexions fréquentes et de restreindre les connexions à l'aide de réseaux autorisés.

Étapes suivantes