Le service de règles d'administration fournit des contraintes pouvant être utilisées dans les règles d'administration pour limiter l'utilisation des comptes de service Cloud Identity and Access Management.
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étroactives. Elles n'affectent pas les comptes de service créés et configurés précédemment.
Avant de commencer
Vous devez être autorisé à modifier les règles d'administration pour définir des contraintes. Par exemple, le
orgpolicy.policyAdmin
rôle est autorisé à définir des contraintes de règle d'administration. Consultez la page
Créer des règles d'administration
pour en savoir plus sur la gestion des règles au niveau de l'organisation.
Contraintes gérées
Les contraintes suivantes sont des types de contrainte gérée , définies sur "true" ou "false". Les contraintes gérées sont basées sur la plate-forme de règles d'administration personnalisées.
Pour découvrir comment créer des règles d'administration qui appliquent des contraintes gérées, consultez Créer des règles d'administration.
Empêcher l'attribution des rôles Propriétaire et Éditeur aux comptes de service par défaut
Certains Google Cloud services 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. Une personne peut également choisir d'attribuer ultérieurement un rôle très privilégié, tel que le rôle Éditeur ou Propriétaire (roles/owner), à un compte de service par défaut.
Les rôles Éditeur et Propriétaire sont des rôles de base très privilégiés basic roles. Vous ne devez les attribuer à aucun compte principal en production, y compris aux comptes de service par défaut.
Pour empêcher que les rôles Éditeur ou Propriétaire soient attribués aux comptes de service par défaut, utilisez la contrainte gérée iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts. Cette contrainte empêche que les rôles Éditeur ou Propriétaire soient attribués aux comptes de service par défaut, que ce soit automatiquement ou manuellement.
Désactiver la création de comptes de service
Vous pouvez utiliser la contrainte gérée iam.managed.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 Google Cloud services ne peuvent pas créer automatiquement de 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, il est possible que le projet ne contienne pas de compte de service utilisable par la charge de travail. Pour résoudre ce problème, vous pouvez activer l'emprunt d'identité d'un compte de service entre les 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 en savoir plus sur l'organisation des comptes de service, consultez Où créer des comptes de service.
Désactiver la création de clés API liées à des comptes de service
Vous pouvez utiliser la contrainte gérée iam.managed.disableServiceAccountApiKeyCreation pour
désactiver la création de clés API liées à des comptes de service.
Lorsque cette contrainte est définie, les utilisateurs ne peuvent pas créer de clés API liées à des comptes de service dans les projets affectés par la contrainte.
Cette contrainte est appliquée par défaut.
Désactiver la création de clés de compte de service
Vous pouvez utiliser la contrainte gérée iam.managed.disableServiceAccountKeyCreation pour désactiver la création de clés de compte de service externes et de clés HMAC Cloud Storage. 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é de compte de service
Vous pouvez utiliser la contrainte gérée iam.managed.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.
Contraintes gérées (héritées) avec des règles booléennes
Les contraintes suivantes sont des types de contrainte gérée héritée avec des règles booléennes, définies sur "true" ou "false".
Désactiver les attributions automatiques de rôles pour les comptes de service par défaut
Certains Google Cloud services 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. Utilisez la contrainte gérée héritée iam.automaticIamGrantsForDefaultServiceAccounts pour désactiver l'attribution automatique de rôles.
Désactiver la création de comptes de service
Vous pouvez utiliser la contrainte gérée héritée 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 Google Cloud services ne peuvent pas créer automatiquement de 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, il est possible que le projet ne contienne pas de compte de service utilisable par la charge de travail. Pour résoudre ce problème, vous pouvez activer l'emprunt d'identité d'un compte de service entre les 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 en savoir plus sur l'organisation des comptes de service, consultez Où créer des comptes de service.
Désactiver la création de clés de compte de service
Vous pouvez utiliser la contrainte gérée héritée iam.disableServiceAccountKeyCreationpour désactiver la création de nouvelles clés de compte de service externes etclés HMAC Cloud Storage. 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é de compte de service
Vous pouvez utiliser la contrainte gérée héritée 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 à des ressources situées dans d'autres projets
Chaque compte de service est situé dans un projet. Vous pouvez utiliser la contrainte gérée héritée iam.disableCrossProjectServiceAccountUsage pour empêcher que les comptes de service d'un projet soient 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é d'un compte de service entre les projets.
Restreindre la suppression des privilèges de projet lorsque des comptes de service sont utilisés entre plusieurs projets
Lorsque vous autorisez l'association de comptes de service d'un projet à des ressources d'autres projets, Cloud 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 gérée héritée iam.restrictCrossProjectServiceAccountLienRemoval, les comptes principaux 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é d'un compte de service entre les projets.
Désactiver la création de clusters Workload Identity
Vous pouvez utiliser la iam.disableWorkloadIdentityClusterCreation contrainte gérée héritée
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 Federation for GKE est activée ne seront pas affectés et continueront de fonctionner normalement.
Définir une contrainte gérée (héritée) avec des règles booléennes
Console
Pour définir une règle d'administration qui applique une contrainte permettant de restreindre l'utilisation du compte de service, procédez comme suit :
Dans la Google Cloud console, accédez à la page Règles d'administration.
Dans le sélecteur de projets, sélectionnez l'organisation pour laquelle vous souhaitez restreindre l'utilisation du compte de service.
Cliquez sur l'une des contraintes d'utilisation du compte de service répertoriées sur cette page.
Cliquez sur Gérer la règle.
Sous S'applique à, sélectionnez Remplacer la règle parente.
Cliquez sur Ajouter une règle.
Sous Application, sélectionnez Activé.
Pour appliquer la règle, cliquez sur Définir la règle.
gcloud
Les règles peuvent être définies via Google Cloud CLI.
Pour restreindre l'utilisation du compte de service, exécutez la commande suivante :
gcloud resource-manager org-policies enable-enforce \
--organization 'ORGANIZATION_ID' \
CONSTRAINT_NAME
Où CONSTRAINT_NAME est la contrainte que vous souhaitez appliquer.
Pour désactiver l'application forcée, la même commande peut être émise à l'aide de la commande
disable-enforce
Pour en savoir plus sur l'utilisation de contraintes dans les règles d'administration, consultez Créer des règles d'administration.
Exemple de contrainte gérée (héritée) avec des règles booléennes
L'extrait de code suivant présente une règle d'administration qui applique la contrainte gérée héritée iam.disableServiceAccountCreation, qui empêche la création de comptes de service :
name: organizations/012345678901/policies/iam.disableServiceAccountCreation
spec:
rules:
- enforce: true
Contraintes gérées (héritées) avec des règles de liste
Les contraintes suivantes sont des types de contrainte gérée héritée avec des règles de liste, définies 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 gérée héritée constraints/iam.allowServiceAccountCredentialLifetimeExtension.
Limiter la durée de vie des clés de compte de service
Une clé de compte de service vous permet d' authentifier une requête en tant que compte de service. Par défaut, les clés de compte de service n'expirent jamais. Vous pouvez modifier cette valeur par défaut en définissant un délai d'expiration pour toutes les clés nouvellement créées dans votre projet, dossier ou organisation.
Pour définir un délai d'expiration, utilisez la contrainte gérée héritée constraints/iam.serviceAccountKeyExpiryHours afin de spécifier le nombre d'heures pendant lesquelles une clé nouvellement créée est valide. Après ce délai, la clé de compte de service expire et vous ne pouvez plus l'utiliser.
Cette contrainte gérée héritée accepte les valeurs ALLOW suivantes, mais pas les valeurs DENY. Nous vous recommandons d'utiliser le délai d'expiration le plus court possible :
1h: 1 heure8h: 8 heures24h: 24 heures (1 jour)168h: 168 heures (7 jours)336h: 336 heures (14 jours)720h: 720 heures (30 jours)1440h: 1 440 heures (60 jours)2160h: 2 160 heures (90 jours)
La contrainte constraints/iam.serviceAccountKeyExpiryHours ne peut pas être fusionnée avec une stratégie parente. Pour appliquer cette contrainte, vous devez remplacer ou hériter de la stratégie parente.
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 Google Cloud ressources, 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 gérée héritée 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.comPour limiter les comptes AWS autorisés, utilisez la
constraints/iam.workloadIdentityPoolAwsAccountscontrainte gérée héritée décrite sur cette page.Microsoft Azure:
https://sts.windows.net/azure-tenant-idAutres fournisseurs d'identité compatibles avec OpenID Connect (OIDC) : utilisez l'URI d'é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 Google Cloud ressources, 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 Google Cloud ressources. Pour limiter les comptes AWS autorisés, utilisez la contrainte gérée héritée constraints/iam.workloadIdentityPoolAwsAccounts pour spécifier une liste d'ID de comptes autorisés.
Désactiver automatiquement les clés de compte de service exposées
Google Cloud détecte parfois qu'une clé de compte de service particulière a été exposée. Par exemple, il peut détecter une clé dans un dépôt public. Pour
spécifier ce que Google Cloud fait avec ces clés, utilisez la
iam.serviceAccountKeyExposureResponse contrainte gérée héritée. Les clés surveillées incluent les clés de compte de service de longue durée et les clés API associées à un compte de service.
Cette contrainte gérée héritée accepte les valeurs ALLOW suivantes, mais pas les valeurs DENY.
DISABLE_KEY: si Google Cloud détecte une clé exposée, il la désactive automatiquement. Il crée également un événement Cloud Audit Logs et envoie une notification concernant la clé exposée aux propriétaires du projet et aux contacts de sécurité.WAIT_FOR_ABUSE: Google Cloud ne désactive pas de manière proactive les clés exposées. Toutefois, Google Cloud peut toujours désactiver les clés exposées si elles sont utilisées de manière à nuire à la plate-forme. Que la clé exposée soit désactivée ou non, Google Cloud crée un événement Cloud Audit Logs et envoie une notification concernant la clé exposée aux propriétaires du projet et aux contacts de sécurité.
Lorsqu' Google Cloud détecte une clé exposée ou désactive une clé exposée, il effectue également les opérations suivantes :
Génère des événements Cloud Audit Logs.
Lorsqu' Google Cloud détecte qu'une clé a été exposée, un événement d'abus est créé dans les journaux d'événements d'abus.
Lorsquedésactive une clé, les journaux d'audit contiennent l'action de désactivation par le compte principal
gcp-compromised-key-response@system.gserviceaccount.com. Google Cloud
Définit le champ
extendedStatus.valuede la clé exposée ou désactivée. Le champ d'état étendu inclut l'emplacement où la fuite a été détectée.
Nous vous recommandons vivement de définir cette contrainte sur DISABLE_KEY. Si vous définissez cette contrainte sur WAIT_FOR_ABUSE, vous augmentez le risque que les clés exposées soient utilisées de manière abusive.
Si vous décidez de définir la contrainte sur WAIT_FOR_ABUSE, nous vous recommandons de
vous abonner aux événements Cloud Audit Logs, de vérifier vos coordonnées de contact de sécurité
dans les contacts essentiels,
et de vous assurer que vos contacts de sécurité répondent aux notifications en temps voulu.
La contrainte iam.serviceAccountKeyExposureResponse ne peut pas être fusionnée avec une stratégie parente. Pour appliquer cette contrainte, vous devez remplacer la stratégie parente.
Définir une contrainte gérée (héritée) avec des règles de liste
Console
Pour définir une règle d'administration contenant une contrainte gérée héritée, procédez comme suit :
Dans la Google Cloud console, accédez à la page Règles d'administration.
Dans le sélecteur de projets, choisissez la ressource pour laquelle vous souhaitez définir la règle d'administration.
Sur la page Règles d'administration, sélectionnez une contrainte dans la liste. La page Détails de la règle associée à cette contrainte s'affiche.
Pour mettre à jour la règle d'administration pour cette ressource, cliquez sur Gérer la règle.
Sous Application des règles, sélectionnez une option d'application :
- Pour fusionner et évaluer vos règles d'administration ensemble, sélectionnez Fusionner avec le parent. Pour en savoir plus sur l'héritage et la hiérarchie des ressources, consultez la page Évaluation hiérarchique.
- Pour remplacer les règles héritées d'une ressource parente, sélectionnez Remplacer.
Cliquez sur Ajouter une règle.
Sous Valeurs de règles, sélectionnez Personnalisé.
Sous Type de règle, sélectionnez Autoriser.
Sous Valeurs personnalisées, saisissez la première valeur de la contrainte gérée héritée.
- Si vous souhaitez ajouter d'autres adresses, cliquez sur Ajouter une valeur pour créer plus de lignes et ajouter une adresse à chaque ligne.
Lorsque vous avez terminé, cliquez sur OK.
Pour appliquer la règle, cliquez sur Définir la règle.
gcloud
Les règles peuvent être définies via Google Cloud CLI :
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 gérée héritée. Exemple :constraints/iam.allowServiceAccountCredentialLifetimeExtension.VALUE_1,VALUE_N...: valeurs de la contrainte gérée héritée.
Pour en savoir plus sur l'utilisation de contraintes dans les règles d'administration, consultez Créer des règles d'administration.
Exemple de contrainte gérée (héritée) avec des règles de liste
L'extrait de code suivant présente une règle d'administration appliquant la contrainte gérée héritée 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 :
name: organizations/012345678901/policies/iam.allowServiceAccountCredentialLifetimeExtension
spec:
rules:
- values:
allowedValues:
- SERVICE_ACCOUNT_ADDRESS
Appliquer des contraintes de manière conditionnelle à l'aide de tags
Les tags peuvent être utilisés pour inclure ou exclure des ressources taguées de l'application des règles d'administration. Après avoir créé un tag et l'avoir associé à un compte de service, vous pouvez ajouter une condition à la règle pour inclure ou exclure de manière conditionnelle les comptes de service tagués de l'application.
Pour en savoir plus sur l'utilisation des tags avec les règles d'administration, consultez Définir le champ d'application des règles d'administration avec des tags.
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 API liées à des comptes de service
Si la contrainte iam.managed.disableServiceAccountApiKeyCreation est appliquée, la création d'une clé API liée à un compte de service échoue et l'erreur suivante s'affiche :
FAILED_PRECONDITION: Operation denied by org policy: ["constraints/iam.managed.disableServiceAccountApiKeyCreation": "When enforced, disables creation of API Keys bound to service accounts."]
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
Google Cloud services 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 :
- Supprimez temporairement la contrainte
iam.disableServiceAccountCreation. - Activez les services souhaités.
- Créez tout autre compte de service souhaité.
- Réappliquez la contrainte.