Créer le pipeline d'images sécurisé

Cette page explique comment configurer le pipeline d'images sécurisé pour automatiser la génération d'images de conteneurs de base.

Aperçu

Le pipeline d'images sécurisé est un outil Open Source qui configure un framework de projets et de ressources Google Cloud, ainsi qu'un dépôt GitHub permettant de créer et de gérer des ressources personnalisées. et des images de base sécurisées. Vous pouvez consommer les images de projets Google Cloud.

L'image suivante illustre le framework des ressources créées par un pipeline d'images sécurisé :

Pipeline d'images sécurisé

Une fois le pipeline configuré, il crée les ressources suivantes :

  • Un dépôt GitHub hébergeant le code source des images de conteneurs

  • Trois projets Google Cloud : projet de compilation, projet de préproduction et projet validé. Chaque fois qu'une image est mise à jour dans le dépôt d'images, des déclencheurs Cloud Build dans le projet de compilation, créent, signent et transfèrent l'image mise à jour du dépôt Artifact Registry dans le projet de préproduction. Lorsque l'image du projet de préproduction est validée manuellement, le pipeline la transfère vers le projet validé.

Coûts

Le pipeline d'images sécurisées utilise les produits Google Cloud suivants.

Utilisez le simulateur de coût pour générer une estimation des coûts en fonction de votre utilisation prévue.

Avant de commencer

Autorisations IAM requises

L'utilisateur qui configure le pipeline d'images sécurisées nécessite les rôles Identity and Access Management roles/organization.admin et roles/billing.admin pour l'organisation Google Cloud. Pour obtenir des instructions sur l'attribution de rôles IAM, consultez la page Accorder, modifier et révoquer les accès.

Configurer le pipeline d'images sécurisé

Le dépôt GitHub du pipeline d'images sécurisé contient le script permettant d'automatiser la génération d'images de base.

Pour configurer le pipeline d'images sécurisées :

  1. Clonez le dépôt GitHub du pipeline d'images sécurisé sur votre ordinateur local :

    git clone https://github.com/GoogleCloudPlatform/secure-image-pipeline
    
  2. Accédez au répertoire secure-image-pipeline :

    cd secure-image-pipeline/
    
  3. Copiez env.sh.tmpl vers env.sh :

    cp env.sh.tmpl env.sh
    
  4. Ouvrez env.sh dans l'éditeur de votre choix.

  5. Modifiez les valeurs suivantes :

    • PARENT_ORGANIZATION : saisissez l'ID de votre organisation Google Cloud. Le script sécurisé de pipeline d'images utilise cette organisation pour générer des projets Cloud et des images de base.
    • BASEIMGFCT_PROJECT : saisissez une chaîne à partir de laquelle le script construit les ID des projets qu'il crée. La chaîne doit comporter entre 6 et 30 lettres minuscules, chiffres ou traits d'union. Elle doit commencer par une lettre et ne peut pas se terminer par un trait d'union. Par exemple, si vous spécifiez foo, le script crée trois projets avec les ID foo-builder, foo-stage et foo-verified.
    • BASEIMGFCT_BUCKET : saisissez le nom d'un bucket Cloud Storage créé par le script pour stocker le code d'automatisation Terraform. Assurez-vous que le nom répond aux exigences de dénomination des buckets.
    • BASEIMGFCT_REGION : saisissez le nom de la région à utiliser ou utilisez la valeur par défaut.
    • BILLING_ACCOUNT : saisissez le compte de facturation associé à l'organisation.
    • GITHUB_TOKEN : saisissez votre jeton d'accès personnel GitHub. Le script utilise ce jeton pour créer un dépôt GitHub contenant le code source des images de base.
  6. Exécutez le script d'installation :

    ./setup.sh
    
  7. Saisissez les informations de compte GitHub suivantes lorsque vous y êtes invité :

    1. Nom de votre organisation GitHub.

    2. Votre adresse e-mail GitHub.

    3. Votre nom d'utilisateur GitHub.

  8. Le script demande l'autorisation de créer un projet afin de stocker les images de base.

    1. Saisissez "y".

    Cette opération prend quelques minutes. Une fois l'opération terminée, le message Associez vos dépôts GitHub et appuyez sur une touche pour continuer s'affiche.

  9. Appuyez sur une touche pour continuer.

    Le script ouvre une nouvelle fenêtre de navigateur Google Cloud Console pour associer votre dépôt GitHub à votre projet Cloud.

  10. Accédez à la fenêtre du navigateur Cloud Console.

  11. Dans la fenêtre pop-up Gérer vos installations d'applications GitHub, sélectionnez votre compte GitHub.

  12. Cliquez sur Ajouter un autre projet.

  13. Dans la liste déroulante Sélectionner un projet, sélectionnez le projet au format YOUR_PROJECT_NAME-builder.

  14. Cochez la case pour accorder votre autorisation, puis cliquez sur Suivant.

  15. Dans la liste des dépôts, sélectionnez le dépôt nommé baseimgfact-[some number]-containers, puis cliquez sur Connecter (1) dépôts.

  16. Sur la page Créer un déclencheur push, cliquez sur Ignorer. Le script crée automatiquement le déclencheur push.

  17. Cliquez sur OK.

  18. Revenez au terminal.

  19. Appuyez sur une touche pour continuer.

L'exécution du script prend quelques minutes.

Ressources créées par le pipeline d'images sécurisé

Une fois l'exécution du script d'installation terminée, les ressources suivantes sont créées :

GitHub :

  • Un dépôt nommé baseimgfct-[some number]-containers contenant le code source utilisé pour créer les images de conteneurs. Le script setup ajoute ce dépôt à des fichiers Dockerfile simples, un pour chacune des distributions Linux populaires.
  • Clés de déploiement : clés de déploiement d'accès en écriture distinctes pour le dépôt.

Projets Google Cloud :

  • Un projet Cloud nommé YOUR_PROJECT_NAME-builder contenant les ressources nécessaires pour créer et transférer une image vers le projet de préproduction chaque fois que le code source est mis à jour dans le dépôt GitHub.

    Ce projet contient les déclencheurs Cloud Build qui appellent les compilations lorsqu'une demande d'extraction ou une fusion est effectuée dans la branche principale de baseimgfct-[some number]-containers. Une demande d'extraction crée et transfère les images dans le projet de préproduction. Une fusion crée et transfère les images dans le projet validé.

    Autorisations IAM pour YOUR_PROJECT_NAME-builder : nous vous recommandons de n'accorder l'accès à ce projet qu'aux membres de l'équipe censés modifier le pipeline. Pour savoir comment accorder un accès à des projets, consultez la page Accorder, modifier et révoquer les accès à des ressources.

  • Un projet Cloud nommé YOUR_PROJECT_NAME-stage utilisé pour préparer les images en vue d'un examen manuel avant leur publication dans le projet validé. Ce projet contient les ressources suivantes :

    • Un dépôt Docker Artifact Registry contenant les images de conteneurs créées.
    • Cloud Functions pour chaque image du projet, qui déclenche une recompilation de l'image chaque fois qu'une nouvelle correction pour une faille connue est trouvée.
    • Les sujets Pub/Sub utilisés pour exécuter les fonctions Cloud Functions.
    • Instance du serveur Voucher qui s'exécute en tant que déploiement Cloud Run. Le serveur Voucher vérifie l'image avec une liste des exigences des stratégies de sécurité. Vous pouvez utiliser les exigences de stratégie par défaut fournies avec le pipeline ou spécifier une stratégie de sécurité personnalisée. Une fois les contrôles de sécurité réussis, le serveur Voucher ajoute une attestation à l'image à l'aide de l'autorisation binaire. Cette image certifiée, également appelée image signée, est ensuite transférée dans le projet validé.

    Autorisations IAM pour YOUR_PROJECT_NAME-stage : nous vous recommandons de n'accorder l'accès à ce projet qu'aux développeurs autorisés à lire les images de préproduction à partir d'Artifact Registry. Pour savoir comment accorder un accès à des projets, consultez la page Accorder, modifier et révoquer les accès à des ressources.

  • Un projet Cloud nommé YOUR_PROJECT_NAME-verified. Ce projet contient les images signées finales qui ont été examinées manuellement.

Étape suivante