Resource Manager 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 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 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é des comptes 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 la section Où créer 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 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 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 à des ressources situées dans d'autres projets
Chaque compte de service est situé dans un projet. Vous pouvez utiliser la contrainte booléenne 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é des comptes 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 booléenne 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é 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 permettant de restreindre l'utilisation du compte de service, procédez comme suit :
Dans la console Google Cloud, accédez à la page Règles d'administration.
Dans le sélecteur de projets, sélectionnez l'organisation pour laquelle vous souhaitez limiter l'utilisation des comptes de service.
Cliquez sur l'une des contraintes booléennes d'utilisation du compte de service répertoriées sur cette page.
Cliquez sur Gérer la règle.
Sous Appliquer à, 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 la 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' \ BOOLEAN_CONSTRAINT
Où BOOLEAN_CONSTRAINT est la contrainte booléenne que vous souhaitez appliquer.
Pour désactiver l'application forcée, la même commande peut être émise à l'aide de la commande
Commandedisable-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 :
name: organizations/012345678901/policies/iam.disableServiceAccountCreation
spec:
rules:
- enforce: true
Contraintes de liste
Les contraintes suivantes sont des types de contrainte 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 de liste 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 de liste constraints/iam.serviceAccountKeyExpiryHours
pour spécifier le nombre d'heures pendant lesquelles une clé nouvellement créée est valide. Au bout de ce délai, la clé de compte de service expire et vous ne pouvez plus l'utiliser.
Cette contrainte de liste accepte les valeurs ALLOW
suivantes, mais pas les valeurs DENY
. Nous vous recommandons d'utiliser le délai d'expiration le plus court qui répond à vos besoins:
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 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
décrite sur cette page.Microsoft Azure :
https://sts.windows.net/azure-tenant-id
Autres 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 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 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 contrainte de liste iam.serviceAccountKeyExposureResponse
.
Cette contrainte de liste 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 de 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 de projet et aux contacts de sécurité.
Lorsque Google Cloud détecte une clé exposée ou la désactive, il prend également les mesures suivantes:
Génère des événements Cloud Audit Logs.
Lorsque Google Cloud détecte qu'une clé a été exposée, un événement d'utilisation abusive est créé dans les journaux des événements d'utilisation abusive.
Lorsque Google Cloud désactive une clé, les journaux d'audit contiennent l'action de désactivation par le principal
gcp-compromised-key-response@system.gserviceaccount.com
.
Définit le champ
extendedStatus.value
de 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
. Définir cette contrainte sur WAIT_FOR_ABUSE
augmente 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 de Cloud Audit Logs, de vérifier les coordonnées de vos contacts de sécurité dans Contacts essentiels et de vous assurer qu'ils répondent aux notifications dans les meilleurs délais.
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 de liste
Console
Pour définir une règle d'administration contenant une contrainte de liste, procédez comme suit :
Dans la console Google Cloud, 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 Comprendre le processus d'é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 de liste.
- Si vous souhaitez ajouter d'autres valeurs, cliquez sur Ajouter une valeur pour créer plus de lignes et ajouter une valeur à chaque ligne.
Lorsque vous avez terminé d'ajouter des valeurs, cliquez sur OK.
Pour appliquer la règle, cliquez sur Définir la règle.
gcloud
Vous pouvez définir des règles via la 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 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 :
name: organizations/012345678901/policies/iam.allowServiceAccountCredentialLifetimeExtension
spec:
rules:
- values:
allowedValues:
- SERVICE_ACCOUNT_ADDRESS
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 :
- Supprimez temporairement la contrainte
iam.disableServiceAccountCreation
. - Activez les services souhaités.
- Créez tout autre compte de service souhaité.
- Réappliquez la contrainte.