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

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

Présentation

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

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

Pipeline sécurisé des images

Une fois le pipeline configuré, celui-ci crée les ressources suivantes:

  • Un dépôt GitHub hébergeant le code source pour les images de conteneur.

  • Trois projets Google Cloud: le projet de compilation, le projet de préproduction et le projet validé. Chaque fois qu'une image est mise à jour dans le dépôt d'images,Déclencheurs Cloud Build dans le build, crée, signe et transfère l'image mise à jour versArtifact Registry dans le projet de préproduction. Lorsque l'image du projet de préproduction est validée manuellement, le pipeline la transfère au 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

La configuration par l'utilisateur du pipeline d'images sécurisées nécessite les rôles de gestion des identités et des accès 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é:

  1. Clonez le dépôt GitHub du pipeline d'images sécurisées 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 de pipeline d'images sécurisé 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. Il 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 respecte les exigences de dénomination des buckets.
    • BASEIMGFCT_REGION: saisissez le nom de la région pour utiliser ou utiliser 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 pour stocker les images de base.

    1. Saisissez "y".

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

  9. Appuyez sur n'importe quelle 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. Dans le navigateur, accédez à la fenêtre de Cloud Console.

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

  12. Cliquez sur Ajouter un autre projet.

  13. Dans le menu déroulant 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 baseimgfact-[some number]-containers, puis cliquez sur Connect (1) repositories (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 n'importe quelle touche pour continuer.

L'exécution du script prend quelques minutes.

Ressources créées par le pipeline pour les images sécurisées

Une fois l'exécution du script de configuration terminée, il crée les ressources suivantes:

GitHub:

  • Un dépôt nommé baseimgfct-[some number]-containers contenant le code source utilisé pour créer des images de conteneurs. Le script setup ajoute ce dépôt à des fichiers Dockerfile simples, un pour chacune des distributions Linux courantes.
  • 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 vers le projet de préproduction. Une fusion crée et envoie les images au 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 qui sont censés apporter des modifications au pipeline. Pour découvrir comment accorder l'accès aux projets, consultez la page Accorder, modifier et révoquer les accès à des projets.

  • Un projet Cloud nommé YOUR_PROJECT_NAME-stage qui permet de produire 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.
    • Des fonctions Cloud pour chaque image du projet, qui déclenche une recompilation de l'image chaque fois qu'un nouveau correctif est détecté pour une faille connue
    • Sujets Pub/Sub utilisés pour exécuter les fonctions Cloud Functions
    • Instance du serveur coupon qui s'exécute en tant que déploiement Cloud Run Le serveur Voucher vérifie l'image avec une liste d'exigences de règles 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 vérifications de sécurité validées, 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 transmise au 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 issues d'Artifact Registry. Pour découvrir comment accorder l'accès aux projets, consultez la page Accorder, modifier et révoquer les accès à des projets.

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

Étape suivante