Les conditions IAM vous permettent de définir et d'appliquer un contrôle d'accès conditionnel basé sur des attributs pour les ressources Google Cloud, y compris les instances Cloud SQL. Pour en savoir plus sur les conditions IAM, consultez la page Présentation des conditions IAM.
Présentation
Dans Cloud SQL, vous pouvez appliquer un accès conditionnel en fonction des attributs suivants :
- Attributs de date et d'heure : permettent de définir un accès temporaire (expirant), planifié ou de durée limitée aux ressources Cloud SQL. Par exemple, vous pouvez autoriser un utilisateur à accéder à une instance de base de données jusqu'à une date spécifiée. Vous pouvez utiliser des attributs de date/heure à n'importe quel niveau de la hiérarchie des ressources. Pour en savoir plus, consultez la section Configurer un accès temporaire.
- Attributs de ressource : permet de configurer un accès conditionnel en fonction d'un attribut de tag, de nom de ressource, de type de ressource ou de service de ressource. Dans Cloud SQL, vous pouvez utiliser des attributs d'instances de base de données pour configurer l'accès conditionnel. Par exemple, vous pouvez autoriser un utilisateur à accéder uniquement aux instances associées à un tag spécifique. Pour en savoir plus, consultez la section Configurer un accès basé sur les ressources.
Les cas d'utilisation incluent les situations suivantes :
Autoriser les utilisateurs à se connecter à des instances spécifiques
Autoriser les utilisateurs à créer des instances avec des préfixes ou des suffixes spécifiques (par exemple, "test").
Limiter l'accès aux opérations de sauvegarde pour les instances de test
Autoriser les utilisateurs à supprimer des instances de développement et de test, mais pas des instances de production.
Autoriser les utilisateurs à effectuer des opérations d'administration à certaines dates ou à certains moments.
Autoriser les utilisateurs à se connecter à des instances spécifiques
Supposons que vous souhaitiez autoriser un utilisateur ou un compte de service à se connecter à une seule instance Cloud SQL spécifique. Vous pouvez inclure une condition IAM dans la liaison de stratégie IAM qui accorde à ce compte les autorisations d'un rôle Cloud SQL.
Par défaut, le rôle Client Cloud SQL prédéfini (roles/cloudsql.client
), qui contient l'autorisation cloudsql.instances.connect
, autorise son membre à se connecter à toutes les instances Cloud SQL d'un projet. En introduisant une condition IAM dans la liaison de stratégie, vous pouvez accorder une autorisation à l'instance nommée uniquement.
Console
Cet exemple montre comment modifier la liaison IAM existante pour le projet afin d'attribuer à un compte de service un rôle de client Cloud SQL pour une instance spécifique.
Cet exemple utilise les variables suivantes :
- PROJECT_ID : votre projet Google Cloud.
- INSTANCE_ID : nom de l'instance à laquelle vous souhaitez accorder l'accès.
-
Dans la console Google Cloud, accédez à la page IAM.
- Cliquez sur Ajouter.
- Dans la zone de saisie Nouveaux membres, saisissez l'adresse e-mail du compte de service.
- Cliquez sur la liste déroulante Rôle et sélectionnez le rôle Client Cloud SQL.
- Cliquez sur Ajouter une condition.
- Saisissez un titre et une description.
- Sélectionnez l'onglet Éditeur de conditions.
- Dans la section Créateur de conditions :
- Dans le champ Type de condition - Ressource - Nom, saisissez
projects/PROJECT_ID/instances/INSTANCE_ID
. - Assurez-vous que l'option conditionnelle AND est sélectionnée.
- Dans le champ Type de condition – Ressource – Service, sélectionnez
sqladmin.googleapis.com
.
- Dans le champ Type de condition - Ressource - Nom, saisissez
- Cliquez sur Enregistrer pour enregistrer la condition.
- Cliquez sur Enregistrer pour enregistrer la règle.
gcloud
Cet exemple montre comment modifier la liaison de stratégie IAM existante pour le projet afin d'attribuer à un compte de service spécifique le rôle Client Cloud SQL, mais seulement pour une instance spécifique.
Cet exemple utilise les variables suivantes :
- PROJECT_ID : votre projet Google Cloud.
- INSTANCE_ID : nom de l'instance à laquelle vous souhaitez accorder l'accès.
- SERVICE_ACCOUNT_EMAIL : adresse e-mail complète du compte de service dont vous souhaitez modifier l'accès.
- Obtenez les liaisons de stratégie IAM existantes et générez-les dans le fichier
bindings.json
: - Ajoutez la liaison de rôle conditionnelle suivante au fichier
bindings.json
:{ "bindings": [ { "role": "roles/cloudsql.client", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ], "condition": { "expression": "resource.name == 'projects/PROJECT_ID/instances/INSTANCE_ID' && resource.service == 'sqladmin.googleapis.com'" } } ], "etag": "BwWKmjvelug=", "version": 3 }
- Mettez à jour la stratégie IAM avec le nouveau fichier
bindings.json
.gcloud projects set-iam-policy PROJECT_ID bindings.json
gcloud projects get-iam-policy PROJECT_ID --format=json > bindings.json
Terraform
Pour autoriser les utilisateurs à se connecter à des instances spécifiques, utilisez une ressource de données Terraform google_iam_policy
et une ressource Terraform google_project_iam_policy
.
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
à l'invite :terraform destroy
Limiter l'accès aux opérations de sauvegarde pour les instances de test
Supposons que la topologie de votre service soit configurée pour que toutes les instances de test comportent le préfixe test
(par exemple, test-instance-1
) et toutes les instances de production le préfixe prod
(par exemple, prod-instance-1
).
Vous pouvez limiter l'accès aux opérations de sauvegarde sur vos instances de test pour un utilisateur ou un compte de service. Si vous limitez l'accès, les opérations CREATE
, GET
, LIST
ou DELETE
sont limitées aux sauvegardes de vos instances de test.
Console
-
Dans la console Google Cloud, accédez à la page IAM.
- Cliquez sur l'onglet COMPTES PRINCIPAUX.
- Recherchez l'adresse e-mail ou le compte de service (compte principal) de l'utilisateur auquel vous souhaitez limiter l'accès.
- Cliquez sur l'icône Modifier le compte principal à droite du compte principal. Cette icône se présente sous la forme d'un crayon.
- Dans la boîte de dialogue Modifier les autorisations, cliquez sur AJOUTER UN AUTRE RÔLE.
Dans le champ Filtre de la boîte de dialogue suivante, saisissez
Cloud SQL Admin
. Sélectionnez ensuite le rôle Administrateur Cloud SQL qui s'affiche.La boîte de dialogue Modifier les autorisations est active, et le rôle Administrateur Cloud SQL apparaît désormais dans la boîte de dialogue.
- À droite du rôle Administrateur Cloud SQL, cliquez sur le lien Ajouter une condition.
- Dans la boîte de dialogue Modifier la condition, fournissez les informations suivantes :
- Dans le champ Titre, saisissez un nom pour la condition que vous ajoutez afin de limiter l'accès aux opérations de sauvegarde pour les instances de test. Par exemple, vous pouvez saisir
Limit access to backup operations
. Cliquez sur l'onglet ÉDITEUR DE CONDITIONS, puis ajoutez la condition suivante :
resource.type == "sqladmin.googleapis.com/BackupRun" && resource.name.startsWith("projects/PROJECT_ID/instances/test")
- Dans le champ Titre, saisissez un nom pour la condition que vous ajoutez afin de limiter l'accès aux opérations de sauvegarde pour les instances de test. Par exemple, vous pouvez saisir
- Cliquez sur ENREGISTRER.
- Dans la boîte de dialogue Modifier les autorisations, cliquez sur ENREGISTRER.
gcloud
Cet exemple utilise les variables suivantes :
- PROJECT_ID : votre projet Google Cloud.
- USER_EMAIL : adresse e-mail de l'utilisateur.
- SERVICE_ACCOUNT_EMAIL : adresse e-mail complète du compte de service dont vous souhaitez limiter l'accès.
-
Limitez le niveau d'accès du rôle
cloudsql.admin
pour un utilisateur disposant de l'adresse e-mail USER_EMAIL.Le niveau d'accès du rôle est limité aux ressources dont le nom commence par
projects/PROJECT_ID/instances/test
.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:USER_EMAIL \ --role=roles/cloudsql.admin \ --condition=expression="resource.type == \"sqladmin.googleapis.com/BackupRun\" && resource.name.startsWith(\"projects/PROJECT_ID/instances/test-instance-1\")",title="test"
-
Limitez le niveau d'accès du rôle
cloudsql.admin
pour un utilisateur connecté avec un compte de service SERVICE_ACCOUNT_EMAIL.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role=roles/cloudsql.admin \ --condition=expression="resource.type == \"sqladmin.googleapis.com/BackupRun\" && resource.name.startsWith(\"projects/PROJECT_ID/instances/test-instance-1\")",title="test"
OU
Autoriser les utilisateurs à supprimer des instances de test, mais pas des instances de production
Supposons que vous souhaitiez autoriser un compte de service à supprimer des instances de test, mais pas des instances de production. Pour ce faire, vous pouvez utiliser des tags et ajouter les deux liaisons de stratégie suivantes pour le compte de service :
- Un rôle Éditeur Cloud SQL sur la ressource pour laquelle vous avez attribué le rôle et ses descendants. Si le rôle est attribué au projet, il s'applique à toutes les instances du projet. Le rôle Éditeur Cloud SQL ne contient pas l'autorisation
cloudsql.instances.delete
. - Un rôle Administrateur Cloud SQL sur les instances avec le tag
test
Console
-
Dans la console Google Cloud, accédez à la page IAM.
- Cliquez sur Ajouter.
- Dans le champ Nouveaux membres, saisissez l'adresse e-mail du compte de service.
- Cliquez sur la liste déroulante Rôle et sélectionnez le rôle Éditeur Cloud SQL. N'ajoutez rien de plus pour ce rôle.
- Cliquez sur Enregistrer pour enregistrer la condition.
- Cliquez sur le menu Rôle pour le même compte, puis sélectionnez le rôle Administrateur Cloud SQL.
- Cliquez sur Ajouter une condition.
- Saisissez un titre et une description.
- Sélectionnez l'onglet Éditeur de conditions.
- Dans la section Créateur de conditions :
- Dans le champ Type de condition – Ressource, saisissez un nom pour la condition.
- Dans le champ Type de condition – Ressource – Service, sélectionnez
sqladmin.googleapis.com
. - Dans le champ Type de condition – Ressource – Tag, saisissez le nom de l'espace de noms associé à la clé de tag. Dans cet exemple, l'Opérateur est
matches
et la valeur est815471563813/env/test
.
- Cliquez sur Enregistrer pour enregistrer la condition.
- Cliquez sur Enregistrer pour enregistrer la règle.
gcloud
Cet exemple utilise les variables suivantes :
- PROJECT_ID : votre projet Google Cloud.
- INSTANCE_ID : votre instance Cloud SQL.
- REGION : la région dans laquelle se trouve votre instance Cloud SQL.
- ORGANIZATION_ID : l'ID de l'organisation qui sera la ressource parente de cette clé de tag. Par exemple : 12345678901. Pour savoir comment obtenir votre ID d'organisation, consultez la page Créer et gérer des organisations.
- SERVICE_ACCOUNT_EMAIL : l'adresse e-mail complète du compte de service dont vous souhaitez modifier l'accès.
- Créez une clé de tag nommée "env" avec les valeurs de tag "prod" et "test". Pour en savoir plus, consultez la section Créer et définir un nouveau tag.
gcloud alpha resource-manager tags keys create env \ --parent=organizations/ORGANIZATION_ID gcloud alpha resource-manager tags values create prod \ --parent=env gcloud alpha resource-manager tags values create test \ --parent=env
- Associez le tag "env" avec la valeur "test" aux instances Cloud SQL de votre environnement de test. Pour en savoir plus, consultez la page Tags Cloud SQL.
- Obtenez les liaisons de stratégie IAM existantes et générez-les dans le fichier
bindings.json
:gcloud projects get-iam-policy PROJECT_ID --format=json >> bindings.json
- Ajoutez les liaisons conditionnelles suivantes au fichier
bindings.json
:{ "bindings": [ { "role": "roles/cloudsql.editor", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ] }, { "role": "roles/cloudsql.admin", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ], "condition": { "expression": "resource.matchTag('ORGANIZATION_ID/env', 'test')" } } ], "etag": "BwWKmjvelug=" "version": 3 }
- Mettez à jour les liaisons de stratégie IAM avec le nouveau fichier
bindings.json
.gcloud projects set-iam-policy PROJECT_ID bindings.json
gcloud alpha resource-manager tags bindings create \ --tag-value=test \ --parent=//sqladmin.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID \ --location=REGION