Authentification avec la 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 d'identité de personnel 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 des identités des employés :

  • 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 des accès aux bases de données via votre fournisseur d'identité d'entreprise existant.
  • Facilité de mise à l'échelle : convient aux grandes entreprises 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 principaux d'un pool d'identités de charge de travail peuvent se connecter aux instances Cloud SQL pour PostgreSQL.

Cloud SQL est compatible avec la fédération d'identité de personnel via le type d'utilisateur CLOUD_IAM_WORKFORCE_IDENTITY. Pour accorder l'accès, Cloud SQL valide vos identifiants professionnels 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 pour 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 d'identité 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 de la fédération des identités des employés

Les sections suivantes vous expliquent comment configurer votre instance pour utiliser l'authentification par fédération des identités des employés.

Activer l'authentification IAM sur l'instance

Pour activer l'authentification IAM, définissez le flag 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 d'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 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é du 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 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 un rôle utilisateur d'instance

Attribuez le rôle roles/cloudsql.instanceUser au compte principal d'identité des employés 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é des employés 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 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'intégralité du pool de personnel, 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 accorder le rôle au compte principal de la plate-forme :

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 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 de l'utilisateur que vous souhaitez ajouter (par exemple, cruz@example.com).
  • POOL_ID : ID du pool de personnel.

Accorder des droits pour 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 d'identité des employés ou attribuer manuellement les droits d'accès à la base de données à l'intérieur de 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 désormais vous connecter à votre instance à l'aide de la gcloud CLI ou du proxy d'authentification Cloud SQL.

Utiliser la CLI gcloud

Vous devez d'abord vous authentifier avec votre identité des employés 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 le flag --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é du 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 de la plate-forme de main-d'œuvre, 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 faire la distinction entre les sujets ayant le même ID utilisateur dans différents pools de personnel ou fournisseurs d'identité. Si vous utilisez plusieurs pools ou fournisseurs d'employés, vous devez utiliser des règles 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 l'accès non autorisé depuis 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 non. 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