Limiter l'utilisation des comptes de service

Resource Manager fournit des contraintes pouvant être utilisées dans les règles d'administration pour limiter l'utilisation des comptes de service IAM (gestion de l'authentification et des accès).

La plupart de ces contraintes déterminent si des comptes de service et d'autres ressources peuvent être créés ou configurés de manière spécifique. Ces contraintes ne sont pas rétroactifs. ils n'affectent pas les comptes de service créés et configurés.

Avant de commencer

Vous devez être autorisé à modifier les règles d'administration pour définir des contraintes. Par exemple, le rôle orgpolicy.policyAdmin est autorisé à définir des contraintes de règle d'administration. Consultez la page Utiliser des contraintes pour en savoir plus sur la gestion des règles au niveau de l'organisation.

Contraintes booléennes

Les contraintes suivantes sont des types de contrainte booléenne, définies sur "true" ou "false".

Désactiver les attributions automatiques de rôles pour les comptes de service par défaut

Certains services Google Cloud créent automatiquement des comptes de service par défaut. Lorsqu'un compte de service par défaut est créé, le rôle Éditeur (roles/editor) lui est automatiquement attribué sur votre projet.

Pour renforcer la sécurité, nous vous recommandons vivement de désactiver l'attribution automatique des rôles. Pour ce faire, vous pouvez utiliser la contrainte booléenne iam.automaticIamGrantsForDefaultServiceAccounts.

Désactiver la création de comptes de service

Vous pouvez utiliser la contrainte booléenne iam.disableServiceAccountCreation pour désactiver la création de comptes de service. Cela vous permet de centraliser la gestion des comptes de service sans restreindre les autres autorisations détenues par vos développeurs pour les projets.

Si vous appliquez cette contrainte dans un projet, certains services Google Cloud ne peuvent pas créer automatiquement des comptes de service par défaut. Par conséquent, si le projet exécute des charges de travail nécessitant d'emprunter l'identité d'un compte de service, le projet ne peut pas contenir un compte de service que la charge de travail peut utiliser. Pour résoudre ce problème, vous pouvez activer l'emprunt d'identité du compte de service dans plusieurs projets. Lorsque vous activez cette fonctionnalité, vous pouvez créer des comptes de service dans un projet centralisé, puis associer ces comptes de service à des ressources situées dans d'autres projets.

Pour plus d'informations sur l'organisation des comptes de service, consultez la section Emplacements des comptes de service.

Désactiver la création de clés de compte de service

Vous pouvez utiliser la contrainte booléenne iam.disableServiceAccountKeyCreation pour désactiver la création de clés de compte de service externes. Cela vous permet de contrôler l'utilisation des identifiants à long terme non gérés pour les comptes de service. Lorsque cette contrainte est définie, les identifiants gérés par l'utilisateur ne peuvent pas être créés pour les comptes de service dans les projets affectés par la contrainte.

Désactiver l'importation de clés dans un compte de service

Vous pouvez utiliser la contrainte booléenne iam.disableServiceAccountKeyUpload pour désactiver l'importation de clés publiques externes dans des comptes de service. Lorsque cette contrainte est définie, les utilisateurs ne peuvent pas importer de clés publiques dans les comptes de service de projets affectés par la contrainte.

Désactiver l'association de comptes de service aux ressources d'autres projets

Chaque compte de service est situé dans un projet. Vous pouvez utiliser la contrainte booléenne iam.disableCrossProjectServiceAccountUsage pour empêcher les comptes de service d'un projet d'être associés à des ressources d'autres projets.

Si vous souhaitez autoriser l'utilisation des comptes de service entre plusieurs projets, consultez la page Activer l'emprunt d'identité des comptes de service entre les projets.

Limiter la suppression des privilèges du projet lorsque des comptes de service sont utilisés dans plusieurs projets

Lorsque vous autorisez l'association des comptes de service d'un projet à des ressources d'autres projets, IAM ajoute un privilège de projet qui vous empêche de supprimer le projet. Par défaut, toute personne disposant de l'autorisation resourcemanager.projects.updateLiens sur le projet peut supprimer le privilège.

Si vous appliquez la contrainte booléenne iam.restrictCrossProjectServiceAccountLienRemoval, les membres ne peuvent supprimer le privilège que s'ils disposent de l'autorisation resourcemanager.projects.updateLiens sur l'organisation.

Nous vous recommandons d'appliquer cette contrainte si l'un de vos projets autorise l'emprunt d'identité des comptes de service entre les projets.

Désactiver la création de clusters Workload Identity

Vous pouvez utiliser la contrainte booléenne iam.disableWorkloadIdentityClusterCreation pour exiger que la fonctionnalité Workload Identity de tous les nouveaux clusters Google Kubernetes Engine soit désactivée au moment de leur création. Si vous souhaitez contrôler étroitement l'accès au compte de service dans votre organisation, vous souhaiterez peut-être désactiver Workload Identity en plus de la création de comptes de service et de clés de compte de service.

Les clusters GKE existants pour lesquels Workload Identity est activé ne seront pas affectés et continueront de fonctionner normalement.

Appliquer une contrainte booléenne

Console

Pour définir une règle d'administration qui applique une contrainte pour restreindre l'utilisation du compte de service, procédez comme suit:

  1. Accédez à la page Règles d'administration dans Google Cloud Console.

    Accéder à la page "Règles d'administration"

  2. Cliquez sur la liste déroulante Organisation en haut de la page, puis sélectionnez votre organisation.
  3. Cliquez sur l'une des contraintes booléennes d'utilisation du compte de service répertoriées ci-dessus.
  4. Cliquez sur le bouton Modifier.
  5. Sous Applicable à, sélectionnez Personnaliser.
  6. Sous Application, sélectionnez Activé.
  7. Cliquez sur Enregistrer. Une notification s'affiche. Elle confirme que la règle a été mise à jour.

gcloud

Les règles peuvent être définies via l'outil de ligne de commande gcloud.

Pour restreindre l'utilisation du compte de service, exécutez la commande suivante :

gcloud resource-manager org-policies enable-enforce \
    --organization 'ORGANIZATION_ID' \
    BOOLEAN_CONSTRAINT

BOOLEAN_CONSTRAINT est la contrainte booléenne que vous souhaitez appliquer.

Pour désactiver l'application forcée, vous pouvez exécuter la même commande avec la commande

disable-enforce
.

Pour en savoir plus sur l'utilisation de contraintes dans les règles d'administration, consultez la page Utiliser des contraintes.

Exemple de stratégie avec une contrainte booléenne

L'extrait de code suivant présente une règle d'administration qui applique la contrainte booléenne iam.disableServiceAccountCreation, qui empêche la création de comptes de service :

resource: "organizations/842463781240"
policy {
  constraint: "constraints/iam.disableServiceAccountCreation"
  etag: "\a\005L\252\122\321\946\334"
  boolean_policy {
  enforced: true
  }
}

Contraintes de liste

Les contraintes suivantes sont des types de contrainte de liste, qui sont définis sur une liste de valeurs.

Prolonger la durée de vie des jetons d'accès OAuth 2.0

Vous pouvez créer un jeton d'accès OAuth 2.0 qui fournit des identifiants éphémères pour un compte de service. Par défaut, la durée de vie maximale d'un jeton d'accès est de 1 heure, soit 3 600 secondes. Toutefois, vous pouvez prolonger la durée de vie maximale à 12 heures. Pour ce faire, identifiez les comptes de service qui ont besoin de jetons d'accès à durée de vie prolongée, puis ajoutez ces comptes de service à une règle d'administration qui comprend la contrainte de liste constraints/iam.allowServiceAccountCredentialLifetimeExtension.

Spécifier les fournisseurs d'identité externes autorisés

Si vous utilisez la fédération d'identité de charge de travail, qui permet aux identités externes d'accéder aux ressources Google Cloud, vous pouvez spécifier les fournisseurs d'identité externes autorisés. Par défaut, tous les fournisseurs sont autorisés. Pour définir une limite, utilisez la contrainte de liste constraints/iam.workloadIdentityPoolProviders afin de spécifier des URI pour les fournisseurs autorisés, en utilisant les formats suivants:

  • Amazon Web Services (AWS): https://sts.amazonaws.com

    Pour limiter les comptes AWS autorisés, utilisez la contrainte de liste constraints/iam.workloadIdentityPoolAwsAccounts comme décrit sur cette page.

  • Microsoft Azure: https://sts.windows.net/azure-tenant-id

  • Autres fournisseurs d'identité compatibles avec OpenID Connect (OIDC): utilisez l'URI de l'émetteur de votre fournisseur d'identité.

Spécifier les comptes AWS autorisés

Si vous utilisez la fédération d'identité de charge de travail, qui permet aux identités externes d'accéder aux ressources Google Cloud, vous pouvez spécifier les comptes AWS autorisés à accéder à vos ressources. Par défaut, les charges de travail de n'importe quel compte AWS sont autorisées à accéder à vos ressources Google Cloud. Pour limiter les comptes AWS autorisés, utilisez la contrainte de liste constraints/iam.workloadIdentityPoolAwsAccounts pour spécifier la liste des ID de compte autorisés.

Définir une contrainte de liste

Console

Pour définir une règle d'administration contenant une contrainte de liste, procédez comme suit:

  1. Accédez à la page Règles d'administration dans Google Cloud Console.

    Accéder à la page "Règles d'administration"

  2. Cliquez sur la liste déroulante Organisation en haut de la page, puis sélectionnez votre organisation.
  3. Cliquez sur la contrainte que vous souhaitez ajouter.
  4. Cliquez sur le bouton Modifier.
  5. Sous Applicable à, sélectionnez Personnaliser.
  6. Sous Application des règles, sélectionnez Fusionner avec le parent pour fusionner cette règle avec les règles existantes dans votre hiérarchie.
  7. Sous Valeurs de règles, sélectionnez Personnalisé.
  8. Sous Type de règle, sélectionnez Autoriser.
  9. Sous Valeurs personnalisées, saisissez la première valeur de la contrainte de liste.
    1. Si vous souhaitez ajouter des valeurs, cliquez sur Nouvelle valeur de règle pour créer d'autres lignes et ajoutez une valeur à chaque ligne.
  10. Cliquez sur Enregistrer. Une notification confirme que la règle a été mise à jour.

gcloud

Les règles peuvent être définies via l'outil de ligne de commande gcloud:

gcloud resource-manager org-policies allow \
    CONSTRAINT_NAME \
    VALUE_1 [VALUE_N ...] \
    --organization=ORGANIZATION_ID \

Remplacez les valeurs suivantes :

  • CONSTRAINT_NAME: nom de la contrainte de liste. Exemple : constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • VALUE_1, VALUE_N... : valeurs de la contrainte de liste.

Pour en savoir plus sur l'utilisation de contraintes dans les règles d'administration, consultez la page Utiliser des contraintes.

Exemple de stratégie avec une contrainte de liste

L'extrait de code suivant présente une règle d'administration appliquant la contrainte de liste iam.allowServiceAccountCredentialLifetimeExtension, qui prolonge la durée de vie maximale des jetons d'accès OAuth 2.0 pour les comptes de service répertoriés :

resource: "organizations/842463781240"
policy {
  constraint: "constraints/iam.allowServiceAccountCredentialLifetimeExtension"
  etag: "\a\005L\252\122\321\946\334"
  listPolicy {
    allowedValues:
      - SERVICE_ACCOUNT_ADDRESS
  }
  updateTime: CURRENT_TIME
}

Messages d'erreur

Désactiver la création de comptes de service

Si la contrainte iam.disableServiceAccountCreation est appliquée, la création de compte de service échoue et l'erreur suivante s'affiche :

FAILED_PRECONDITION: Service account creation is not allowed on this project.

Désactiver la création de clés de compte de service

Si la contrainte iam.disableServiceAccountKeyCreation est appliquée, la création de compte de service échoue et l'erreur suivante s'affiche :

FAILED_PRECONDITION: Key creation is not allowed on this service account.

Désactiver la création de clusters Workload Identity

Si iam.disableWorkloadIdentityClusterCreation est appliqué, la création d'un cluster GKE pour lequel Workload Identity est activé échoue, avec l'erreur suivante :

FAILED_PRECONDITION: Workload Identity is disabled by the organization
policy constraints/iam.disableWorkloadIdentityClusterCreation. Contact your
administrator to enable this feature.

Résoudre les problèmes connus

Comptes de service par défaut

L'application de la contrainte iam.disableServiceAccountCreation empêche la création de comptes de service dans ce projet. Cette limitation concerne également les services Google Cloud qui, lorsqu'ils sont activés, créent automatiquement des comptes de service par défaut dans le projet, tels que :

  • Compute Engine
  • GKE
  • App Engine
  • Dataflow

Si la contrainte iam.disableServiceAccountCreation est appliquée, toute tentative d'activation de ces services échoue, car leurs comptes de service par défaut ne peuvent pas être créés.

Pour remédier à ce problème :

  1. Supprimez temporairement la contrainte iam.disableServiceAccountCreation.
  2. Activez les services souhaités.
  3. Créez tout autre compte de service souhaité.
  4. Réappliquez la contrainte.