Résoudre les erreurs liées aux règles d'administration pour les comptes de service

Le service de règles d'administration comporte plusieurs contraintes prédéfinies et gérées qui peuvent affecter les comptes de service de votre organisation. Cette page vous aide à comprendre les erreurs générées par ces règles d'administration et les étapes à suivre pour les résoudre.

Résoudre les problèmes liés à la création de clés de compte de service désactivée

Si la contrainte iam.disableServiceAccountKeyCreation est appliquée à votre organisation, vous ne pouvez pas créer de clés pour les comptes de service de votre organisation. Pour en savoir plus sur cette contrainte, consultez la page Désactiver la création de clés de compte de service.

Erreur de création de clé

Si vous essayez de créer une clé de compte de service, mais que l'action est bloquée par la contrainte iam.disableServiceAccountKeyCreation, le message d'erreur suivant s'affiche:

Console

Dans la console Google Cloud, une boîte de dialogue s'affiche avec l'en-tête Création de clés de compte de service désactivée. La boîte de dialogue indique que la contrainte iam.disableServiceAccountKeyCreation est appliquée à votre organisation.

gcloud

ERROR: (gcloud.iam.service-accounts.keys.create) FAILED_PRECONDITION: Key
creation is not allowed on this service account.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - description: Key creation is not allowed on this service account.
    subject: projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com
    type: constraints/iam.disableServiceAccountKeyCreation

REST

{
  "error": {
    "code": 400,
    "message": "Key creation is not allowed on this service account.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/iam.disableServiceAccountKeyCreation",
            "subject": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com",
            "description": "Key creation is not allowed on this service account."
          }
        ]
      }
    ]
  }
}

Résolution recommandée pour l'erreur de création de clés de compte de service

Si une règle d'administration vous empêche de créer une clé de compte de service, nous vous recommandons de procéder comme suit:

  1. Déterminez si une clé de compte de service est nécessaire.

    Nous vous déconseillons d'utiliser des clés de compte de service pour l'authentification. En effet, les clés de compte de service peuvent présenter un risque pour la sécurité si elles ne sont pas gérées correctement, ce qui augmente votre vulnérabilité face à des menaces telles que les fuites d'identifiants, l'élévation des privilèges, la divulgation d'informations et la non-répudiation.

    Dans la plupart des cas, vous devez utiliser une alternative plus sécurisée pour vous authentifier au lieu d'utiliser une clé de compte de service.

  2. Si une clé de compte de service est nécessaire pour votre cas d'utilisation, désactivez la contrainte iam.disableServiceAccountKeyCreation pour votre projet.

Pour désactiver la contrainte de règle d'administration, désactivez l'application de la contrainte ou exemptez votre projet de l'application:

  • Pour désactiver l'application de la contrainte pour l'ensemble de votre organisation, procédez comme suit:

    1. Assurez-vous de disposer du rôle Administrateur des règles d'administration (roles/orgpolicy.policyAdmin) au niveau de l'organisation. Ce rôle ne peut être attribué qu'aux organisations et n'apparaît pas dans la liste des rôles pour les projets.

      Pour savoir comment attribuer des rôles au niveau de l'organisation, consultez la section Gérer l'accès aux projets, aux dossiers et aux organisations.

    2. Dans la console Google Cloud, accédez à la page Règles d'administration.

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

    3. Dans le sélecteur de projet, sélectionnez l'organisation pour laquelle vous souhaitez désactiver la contrainte iam.disableServiceAccountKeyCreation.

    4. Dans le champ Filtre, saisissez iam.disableServiceAccountKeyCreation. Dans la liste des règles, cliquez ensuite sur Désactiver la création de clés de compte de service.

    5. Cliquez sur Gérer la règle.

    6. Dans la section Source de la règle, assurez-vous que l'option Remplacer la règle parente est sélectionnée.

    7. Sous Application, désactivez l'application de cette contrainte de règle d'administration.

    8. Cliquez sur Définir la règle.

  • Pour exempter votre projet de l'application de ces règles, procédez comme suit:

    1. Assurez-vous de disposer du rôle Administrateur des tags (roles/resourcemanager.tagAdmin) et du rôle Administrateur des règles d'administration (roles/orgpolicy.policyAdmin) au niveau de l'organisation. Pour savoir comment attribuer des rôles au niveau de l'organisation, consultez la section Gérer l'accès aux projets, aux dossiers et aux organisations.
    2. Au niveau de l'organisation, créez une clé de tag et une valeur de tag que vous utiliserez pour définir si une ressource doit être exemptée de la règle d'administration. Nous vous recommandons de créer un tag ayant comme clé disableServiceAccountKeyCreation et comme valeurs possibles enforced et not_enforced.

      Pour savoir comment créer des clés et des valeurs de tags, consultez la section Créer et définir un tag.

    3. Associez le tag disableServiceAccountKeyCreation à l'organisation et définissez sa valeur sur enforced. Toutes les ressources de l'organisation héritent de cette valeur de tag, sauf si elle est remplacée par une valeur de tag différente.

      Pour apprendre à associer des tags à des ressources, consultez la section Associer des tags aux ressources.

    4. Pour chaque compte de service que vous souhaitez exempter de la règle d'administration, associez-lui le tag disableServiceAccountKeyCreation et définissez sa valeur sur not_enforced. Définir de cette manière une valeur de tag pour un compte de service remplace la valeur de tag héritée de l'organisation.
    5. Créez ou mettez à jour la règle d'administration qui empêche la création de clés de compte de service afin qu'elle n'applique pas la contrainte aux ressources exemptées. Cette règle doit comporter les règles suivantes :

      • Configurez la contrainte iam.disableServiceAccountKeyCreation pour qu'elle ne soit appliquée à aucune ressource portant le tag disableServiceAccountKeyCreation: not_enforced. La condition de cette règle doit se présenter comme suit :

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
        
      • Configurez la contrainte iam.disableServiceAccountKeyCreation à appliquer à toutes les autres ressources.

Résoudre les problèmes de création de comptes de service désactivés

Si la contrainte iam.disableServiceAccountCreation est appliquée à votre organisation, vous ne pouvez pas créer de comptes de service dans les projets de votre organisation. Pour en savoir plus sur cette contrainte, consultez la section Désactiver la création de comptes de service.

Erreur de création de compte de service

Si vous essayez de créer un compte de service, mais que l'action est bloquée par la contrainte iam.disableServiceAccountCreation, le message d'erreur suivant s'affiche:

Console

Dans la console Google Cloud, une boîte de dialogue s'affiche avec l'en-tête Création du compte de service échouée. La boîte de dialogue indique Échec de l'action tentée, veuillez réessayer.

gcloud

ERROR: (gcloud.iam.service-accounts.create) FAILED_PRECONDITION: Service account
creation is not allowed on this project.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - description: Service account creation is not allowed on this project.
    subject: projects/PROJECT_ID/serviceAccounts/?configvalue=
    type: constraints/iam.disableServiceAccountCreation

REST

{
  "error": {
    "code": 400,
    "message": "Service account creation is not allowed on this project.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/iam.disableServiceAccountCreation",
            "subject": "projects/PROJECT_ID/serviceAccounts/?configvalue=",
            "description": "Service account creation is not allowed on this project."
          }
        ]
      }
    ]
  }
}

Résolution recommandée pour l'erreur de création du compte de service

Si une règle d'administration vous empêche de créer un compte de service, nous vous recommandons de procéder comme suit:

  1. Déterminez si un compte de service est nécessaire.

    Consultez Choisir quand utiliser des comptes de service pour vérifier qu'un compte de service est nécessaire pour votre cas d'utilisation.

  2. Si un compte de service est nécessaire pour votre cas d'utilisation, désactivez la contrainte iam.disableServiceAccountCreation pour votre projet.

Pour désactiver la contrainte de règle d'administration, désactivez l'application de la contrainte ou exemptez votre projet de l'application:

  • Pour désactiver l'application de la contrainte pour l'ensemble de votre organisation, procédez comme suit:

    1. Assurez-vous de disposer du rôle Administrateur des règles d'administration (roles/orgpolicy.policyAdmin) au niveau de l'organisation. Ce rôle ne peut être attribué qu'aux organisations et n'apparaît pas dans la liste des rôles pour les projets.

      Pour savoir comment attribuer des rôles au niveau de l'organisation, consultez la section Gérer l'accès aux projets, aux dossiers et aux organisations.

    2. Dans la console Google Cloud, accédez à la page Règles d'administration.

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

    3. Dans le sélecteur de projet, sélectionnez l'organisation pour laquelle vous souhaitez désactiver la contrainte iam.disableServiceAccountCreation.

    4. Dans le champ Filtre, saisissez iam.disableServiceAccountCreation. Dans la liste des règles, cliquez ensuite sur Désactiver la création de comptes de service.

    5. Cliquez sur Gérer la règle.

    6. Dans la section Source de la règle, assurez-vous que l'option Remplacer la règle parente est sélectionnée.

    7. Sous Application, désactivez l'application de cette contrainte de règle d'administration.

    8. Cliquez sur Définir la règle.

  • Pour exempter votre projet de l'application de ces règles, procédez comme suit:

    1. Assurez-vous de disposer du rôle Administrateur des tags (roles/resourcemanager.tagAdmin) et du rôle Administrateur des règles d'administration (roles/orgpolicy.policyAdmin) au niveau de l'organisation. Pour savoir comment attribuer des rôles au niveau de l'organisation, consultez la section Gérer l'accès aux projets, aux dossiers et aux organisations.
    2. Au niveau de l'organisation, créez une clé de tag et une valeur de tag que vous utiliserez pour définir si une ressource doit être exemptée de la règle d'administration. Nous vous recommandons de créer un tag ayant comme clé disableServiceAccountCreation et comme valeurs possibles enforced et not_enforced.

      Pour savoir comment créer des clés et des valeurs de tags, consultez la section Créer et définir un tag.

    3. Associez le tag disableServiceAccountCreation à l'organisation et définissez sa valeur sur enforced. Toutes les ressources de l'organisation héritent de cette valeur de tag, sauf si elle est remplacée par une valeur de tag différente.

      Pour apprendre à associer des tags à des ressources, consultez la section Associer des tags aux ressources.

    4. Associez à chaque projet ou dossier que vous souhaitez exempter de la règle d'administration le tag disableServiceAccountCreation et définissez sa valeur sur not_enforced. Définir de cette manière une valeur de tag pour un projet ou un dossier remplace la valeur de tag héritée de l'organisation.
    5. Créez ou mettez à jour la règle d'administration qui empêche la création de comptes de service afin qu'elle n'applique pas la contrainte aux ressources exemptées. Cette règle doit comporter les règles suivantes :

      • Configurez la contrainte iam.disableServiceAccountCreation pour qu'elle ne soit appliquée à aucune ressource portant le tag disableServiceAccountCreation: not_enforced. La condition de cette règle doit se présenter comme suit :

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountCreation', 'not_enforced')"
        
      • Configurez la contrainte iam.disableServiceAccountCreation à appliquer à toutes les autres ressources.

Résoudre les problèmes d'attribution de rôles aux comptes de service par défaut

Les comptes de service par défaut sont créés automatiquement lorsque vous utilisez certains services Google Cloud. Ils disposent des identifiants suivants:

  • Compte de service par défaut du service App Engine : PROJECT_ID@appspot.gserviceaccount.com
  • Compte de service Compute Engine par défaut : PROJECT_NUMBER-compute@developer.gserviceaccount.com

Tous les comptes de service par défaut se voient automatiquement attribuer le rôle Éditeur (roles/editor) lorsqu'ils sont créés, sauf si ce comportement est désactivé par une règle d'administration. Deux contraintes de règles d'administration empêchent l'attribution du rôle "Éditeur" aux comptes de service par défaut:

  • iam.automaticIamGrantsForDefaultServiceAccounts: contrainte prédéfinie qui empêche l'attribution automatique de rôles aux comptes de service par défaut. Cette contrainte ne vous empêche pas d'attribuer ultérieurement le rôle Éditeur aux comptes de service par défaut.
  • constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts : contrainte gérée qui empêche l'attribution des rôles Éditeur et Propriétaire (roles/owner) aux comptes de service par défaut.

Erreur lors de l'attribution de rôles de base aux comptes de service

Si la contrainte iam.automaticIamGrantsForDefaultServiceAccounts ou la contrainte constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts est appliquée à votre projet, les charges de travail de votre projet qui utilisent les comptes de service par défaut peuvent rencontrer des erreurs d'autorisation insuffisantes. Pour savoir quels rôles attribuer à un compte de service par défaut, consultez la section Solution recommandée pour attribuer des rôles aux comptes de service par défaut.

La contrainte iam.automaticIamGrantsForDefaultServiceAccounts ne provoque pas d'erreurs en soi. Toutefois, en raison de cette contrainte, il est possible qu'une charge de travail qui utilise le compte de service par défaut ne dispose pas des autorisations dont elle a besoin.

De plus, si la contrainte constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts est appliquée à votre projet, un message d'erreur semblable au suivant s'affiche si vous essayez d'accorder le rôle de propriétaire ou d'éditeur à un compte de service par défaut:

Console

Dans la console Google Cloud, une boîte de dialogue s'affiche avec l'en-tête Échec de la mise à jour de la stratégie IAM. La boîte de dialogue indique que les modifications que vous essayez d'apporter à votre stratégie IAM ont été limitées par l'administrateur des règles d'administration de votre organisation, puis liste les contraintes qui bloquent la mise à jour. Les contraintes listées incluent la contrainte customConstraints/custom.cantGrantProjectIamAdmin.

gcloud

ERROR: (gcloud.projects.set-iam-policy) FAILED_PRECONDITION: Operation denied by
org policy on resource 'RESOURCE_ID':
["constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts":
"When this constraint is enforced, it prevents anyone from granting the Editor
role (roles/editor) or the Owner role (roles/owner) to the Compute Engine and
App Engine default service accounts, at any time. To learn more about default
service accounts, see
https://cloud.google.com/iam/help/service-accounts/default. Enforcing this
constraint prevents the default service accounts from automatically being
granted the Editor role (roles/editor). This might cause permission issues for
services that use these service accounts. To learn which roles to grant to each
service account, see
https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default."].

REST

{
  "error": {
    "code": 400,
    "message": "Operation denied by org policy on resource
    'RESOURCE_ID':
    [\"constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts\":
    \"When this constraint is enforced, it prevents anyone from granting the
    Editor role (roles/editor) or the Owner role (roles/owner) to the Compute
    Engine and App Engine default service accounts, at any time. To learn more
    about default service accounts, see
    https://cloud.google.com/iam/help/service-accounts/default.\n Enforcing this
    constraint prevents the default service accounts from automatically being
    granted the Editor role (roles/editor). This might cause permission issues
    for services that use these service accounts. To learn which roles to grant
    to each service account, see
    https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.\"].",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "CUSTOM_ORG_POLICY_VIOLATION",
        "domain": "googleapis.com",
        "metadata": {
          "customConstraints": "constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts",
          "resource": "projects/PROJECT_ID"
        }
      }
    ]
  }
}

Résolution recommandée pour attribuer des rôles aux comptes de service par défaut

Si une règle d'administration vous empêche d'attribuer le rôle Éditeur ou Propriétaire à un compte de service par défaut, vous devez trouver un rôle moins permissif à attribuer au compte de service. Le rôle dont le compte de service a besoin dépend du service que vous utilisez et des tâches que vous souhaitez accomplir.

Consultez le tableau suivant pour déterminer le rôle à attribuer à chaque compte de service par défaut, en fonction du service que vous utilisez:

Service Compte de service par défaut Rôle à accorder
App Engine Compte de service App Engine par défaut (PROJECT_ID@appspot.gserviceaccount.com) Rôle Compte Cloud Build (roles/cloudbuild.builds.builder)
Compute Engine Compte de service Compute Engine par défaut (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Les rôles dont le compte de service par défaut a besoin dépendent de la tâche que vous souhaitez accomplir. Pour déterminer les rôles requis, consultez la documentation de la tâche que vous souhaitez accomplir ou Choisir des rôles prédéfinis.

Lorsque vous choisissez le rôle à accorder, suivez les bonnes pratiques décrites sur la page Comptes de service de la documentation Compute Engine.

Cloud Build Compte de service Compute Engine par défaut (PROJECT_NUMBER-compute@developer.gserviceaccount.com) Rôle Compte de service Cloud Build (roles/cloudbuild.builds.builder)
Cloud Deploy Compte de service Compute Engine par défaut (PROJECT_NUMBER-compute@developer.gserviceaccount.com) Pour connaître les rôles à accorder à ce compte de service, recherchez le guide de démarrage rapide Cloud Deploy correspondant à votre cas d'utilisation, puis accordez les rôles décrits dans ce guide. Pour obtenir une liste des guides de démarrage rapide de Cloud Deploy, consultez la section Guides de démarrage rapide dans la documentation de Cloud Deploy.
Fonctions Cloud Run et Cloud Functions Compte de service Compute Engine par défaut (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Pour déployer des fonctions: rôle de compte Cloud Build (roles/cloudbuild.builds.builder)

Pour en savoir plus, consultez la section Compte de service personnalisé pour Cloud Build.

Cloud Run Compte de service Compute Engine par défaut (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Les rôles dont le compte de service par défaut a besoin dépendent de la tâche que vous souhaitez accomplir. Pour déterminer les rôles requis, consultez la documentation de la tâche que vous souhaitez accomplir ou Choisir des rôles prédéfinis.

Pour en savoir plus sur les rôles Cloud Run, consultez la section Contrôle des accès avec IAM dans la documentation Cloud Run.

Google Kubernetes Engine Compte de service Compute Engine par défaut (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Rôle de compte de service de nœud par défaut Kubernetes Engine (roles/container.defaultNodeServiceAccount)

Pour en savoir plus, consultez la section Utiliser le principe du moindre privilège pour les comptes de service IAM.

Workflows Compte de service Compute Engine par défaut (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Les rôles dont le compte de service par défaut a besoin dépendent de la tâche que vous souhaitez accomplir. Pour déterminer les rôles requis, consultez la documentation de la tâche que vous souhaitez accomplir ou Choisir des rôles prédéfinis.

Suivez les bonnes pratiques décrites sur la page Autoriser un workflow à accéder aux ressources Google Cloud de la documentation sur les workflows.