Développer des applications dans un environnement Google Cloud limité

Nos documentations sont souvent rédigés pour vous aider à mettre en œuvre un produit ou une fonctionnalité, mais certains peuvent ne pas fonctionner correctement si votre organisation applique des contraintes de sécurité. Par exemple, votre entreprise peut mettre en œuvre certaines des contraintes de sécurité du kit Cloud Foundation et des plans de sécurité Google Cloud ou des contraintes personnalisées.

Cet article vous aide à résoudre les erreurs de déploiement d'applications que vous pouvez rencontrer dans une organisation qui utilise des contraintes de sécurité.

Résoudre les problèmes liés aux contraintes de sécurité

Votre équipe chargée des opérations informatiques ou de la sécurité peut activer des contraintes de sécurité via des règles d'administration. Ces contraintes limitent l'utilisation des ressources de votre organisation.

Lorsque vous effectuez une requête API qui renvoie une erreur, la réponse de l'API doit vous indiquer si elle est due à des cas de non-respect des règles. La réponse doit expliquer quelle contrainte a été enfreinte. Les étapes de dépannage suivantes vous permettent de déterminer et de comprendre si une violation se produit :

  1. Consultez le message d'erreur de la réponse API. Identifiez-vous la contrainte de sécurité que votre déploiement enfreint ?

    L'exemple suivant vous indique que la contrainte sql.restrictPublicIp est le problème :

    Organization Policy check failure
    The external IP of this instance violates the constraints/sql.restrictPublicIp enforced
    
  2. Si vous comprenez la violation de règle, mettez à jour la configuration de votre déploiement de ressources afin qu'elle fonctionne avec les contraintes.

    Dans l'exemple précédent de restriction des adresses IP publiques externes, configurez votre instance Cloud SQL pour qu'elle utilise une adresse IP privée interne.

  3. Si vous ne savez pas pourquoi la contrainte est appliquée ou comment résoudre le problème, contactez votre équipe de sécurité pour comprendre où la règle est appliquée dans la hiérarchie de votre organisation et pour trouver des solutions de contournement.

    Vérifiez si des modèles de déploiement, tels que les modèles Terraform, sont partagés dans votre organisation. Ces modèles doivent détailler la configuration de l'infrastructure Google Cloud et limiter le déploiement de votre application.

Problèmes courants de contraintes de sécurité

Lorsque vous déployez vos applications dans Google Cloud, vous pouvez rencontrer une erreur semblable à l'exemple suivant :

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

Dans cet exemple, vous ne pouvez pas configurer une instance Cloud SQL pour qu'elle utilise une adresse IP publique externe. Une contrainte de sécurité est appliquée à partir d'une règle appliquée à votre environnement.

Les contraintes de sécurité courantes suivantes peuvent être activées, auquel cas elles seront détaillées dans une réponse d'erreur d'API lors du développement de vos applications.

Compute Engine

Nom de la contrainte Utilisation Solution suggérée
constraints/compute.disableNestedVirtualization Empêchez l'installation d'un hyperviseur compatible KVM dans la VM. Ce comportement peut entraîner des risques de sécurité sans application de correctifs et d'une gestion appropriés. Configurez votre VM pour désactiver la virtualisation imbriquée avec accélération matérielle.

Par défaut, il est activé pour toutes les VM Compute Engine s'exécutant sur Intel Haswell ou sur des plates-formes de processeurs plus récentes.
constraints/compute.requireShieldedVm Exige que les nouvelles instances de VM utilisent des images disque protégées avec les options de démarrage sécurisé, de vTPM et de surveillance de l'intégrité activées. Ces options empêchent la falsification de la VM, ainsi que l'accès ou la modification des données. N'activez pas les VM protégées lorsque vous créez une VM.

Pour créer un cluster GKE, vous devez activer les nœuds GKE protégés.

Dataflow n'est actuellement pas compatible avec les nœuds de calcul de VM protégées.
constraints/compute.disableSerialPortAccess Supprimez les vecteurs de sécurité permettant d'interagir avec une VM ou d'afficher des résultats du diagnostic pouvant servir à élaborer une attaque. N'activez pas l'accès au port série lorsque vous créez une VM.
constraints/compute.disableGuestAttributesAccess Réduisez la quantité d'informations sur l'hôte et la plate-forme sous-jacents qui pourraient être utilisées par une application malveillante. N'utilisez pas l'API Compute Engine pour lire les attributs d'invité de vos VM Compute Engine.
constraints/compute.vmExternalIpAccess Empêchez les applications de s'exécuter avec une adresse IP externe et d'être accessible depuis Internet. Désactivez l'accès aux adresses IP externes pour vos VM. Vous ne pouvez utiliser qu'une adresse IP privée interne.

GKE peut utiliser des clusters privés sans adresse IP publique.

Dataprep et Dataflow ne sont actuellement pas compatibles avec les adresses IP privées.

Réseau virtuel et adresses IP

Nom de la contrainte Utilisation Solution suggérée
constraints/compute.skipDefaultNetworkCreation Assurez-vous que seuls des clouds privés virtuels (VPC) gérés par l'entreprise peuvent être créés et que le trafic réseau ou les règles de filtrage sont appliqués. Connectez vos applications aux VPC existants de votre organisation. Les VPC par défaut créés automatiquement ne sont pas déployés pour les nouveaux projets.
constraints/compute.restrictXpnProjectLienRemoval Empêchez la suppression accidentelle d'un VPC partagé lorsque des ressources d'autres projets s'appuient sur les services réseau qu'il fournit. N'essayez pas de supprimer un VPC partagé. Assurez-vous de cibler la ressource appropriée pour la suppression.
constraints/sql.restrictPublicIp Empêchez les instances Cloud SQL de s'exécuter avec une adresse IP externe et d'être accessible depuis Internet. Ne configurez pas votre instance Cloud SQL pour utiliser une adresse IP publique externe.

Au lieu de cela, configurez votre instance Cloud SQL pour qu'elle utilise une adresse IP privée interne.

Identité et authentification

Nom de la contrainte Utilisation Solution suggérée
constraints/iam.disableServiceAccountKeyCreation Les clés de compte de service peuvent présenter un risque de sécurité si elles sont exposées. Par conséquent, empêchez leur exportation. Utilisez une autre forme d'authentification plutôt qu'un compte de service.
constraints/storage.uniformBucketLevelAccess Réduisez le risque d'octroi d'autorisations incorrectes ou incohérentes aux buckets de stockage en n'autorisant que la gestion de l'authentification et des accès (IAM). Activez l'accès uniforme au niveau du bucket pour sécuriser votre bucket Cloud Storage.
constraints/iam.allowedPolicyMemberDomains Limitez l'accès aux ressources Google Cloud aux domaines approuvés. Utilisez un compte dans l'un des domaines approuvés. Des problèmes connus supplémentaires existent pour cette contrainte.

Exemples d'erreurs de réponse API

Dans l'exemple précédent de restriction des adresses IP publiques externes avec Cloud SQL, un non-respect des règles entraîne la génération d'une réponse d'erreur API. Les exemples plus détaillés ci-dessous montrent des exemples de réponse API indiquant quelle contrainte a entraîné l'échec de la requête. Examinez vos propres réponses d'API pour comprendre pourquoi les déploiements d'applications échouent.

Défaillance de Cloud SQL avec l'outil de ligne de commande gcloud :

$ gcloud alpha sql instances create mysql-node --project my-sql-project

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

Défaillance Cloud SQL avec Terraform :

$ terraform apply plan.out

[...]
module.mysql-db.google_sql_database_instance.default: Creating...

Error: Error, failed to create instance backend01-db-1c81e0e3: googleapi:
Error 400: Invalid request: Organization Policy check failure: the external IP
of this instance violates the constraints/sql.restrictPublicIp enforced at the
123456789 project., invalid

Répertorier les règles d'administration appliquées à votre projet

Votre projet peut hériter des stratégies au niveau du dossier ou de l'organisation. En fonction de vos rôles d'accès, vous n'aurez peut-être pas de visibilité suffisante sur les stratégies appliquées à des niveaux supérieurs de votre hiérarchie pour déterminer où la contrainte non respectée est appliquée.

Pour afficher les règles ou les exceptions appliquées à votre projet, utilisez la commande gcloud alpha resource-manager org-policies list et spécifiez votre ID de projet avec le paramètre --project :

gcloud alpha resource-manager org-policies list --project <project-id>

Pour plus d'informations sur une stratégie appliquée, utilisez la commande gcloud alpha resource-manager org-policies describe. Indiquez le nom de la règle à décrire et votre ID de projet avec le paramètre --project :

gcloud alpha resource-manager org-policies describe <policy-name> --project <project-id>

Étape suivante

Si vous ne parvenez pas à déterminer où une règle est appliquée et comment contourner une contrainte de sécurité, contactez votre équipe informatique ou de sécurité. Chaque organisation applique des règles et des plans personnalisés à son environnement.

Pour plus d'informations sur tous les contrôles pouvant être appliqués dans votre organisation, consultez la liste des contraintes de règle d'administration.