Intégrer la validation IaC à Cloud Build

Vous pouvez créer une configuration de compilation qui indique à Cloud Build de valider l'infrastructure as code (IAC) qui fait partie de votre compilation. La validation de l'IaC vous permet de déterminer si vos définitions de ressources Terraform enfreignent les règles d'administration existantes et les détecteurs Security Health Analytics appliqués à vos ressources Google Cloud.

Pour en savoir plus sur la validation de l'IaC, consultez la section Valider votre IaC par rapport aux règles de votre organisation Google Cloud.

Avant de commencer

Suivez ces tâches pour commencer à utiliser la validation de l'IaC avec Cloud Build.

Activer le niveau Premium ou Enterprise de Security Command Center

Vérifiez que le niveau Premium ou Enterprise de Security Command Center est activé au niveau de l'organisation.

L'activation de Security Command Center active les API securityposture.googleapis.com et securitycentermanagement.googleapis.com.

Configurer les autorisations

  1. Make sure that you have the following role or roles on the organization:

    • Security Posture Shift-Left Validator
    • Log Writer
    • Storage Writer
    • Storage Reader

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the organization.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Accéder à IAM
    2. Sélectionnez l'organisation.
    3. Cliquez sur Accorder l'accès.
    4. Dans le champ Nouveaux comptes principaux, saisissez votre identifiant utilisateur. Il s'agit généralement de l'adresse e-mail d'un compte Google.

    5. Dans la liste Sélectionner un rôle, sélectionnez un rôle.
    6. Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.
    7. Cliquez sur Enregistrer.

    Pour en savoir plus sur les autorisations de validation IaC, consultez la section IAM pour les activations au niveau de l'organisation.

    Activer l'API Cloud Build

    1. Enable the Cloud Build API.

      Enable the API

    Définir vos règles

    Définissez vos règles d'administration et vos détecteurs Security Health Analytics. Pour définir ces règles à l'aide d'une posture de sécurité, effectuez les tâches décrites dans la section Créer et déployer une posture.

    Créer votre code Terraform

    Pour obtenir des instructions, consultez la section Créer votre code Terraform.

    Valider votre IAC dans Cloud Build

    Ajoutez les tâches suivantes à votre fichier cloudbuild.yaml:

    1. Initialisez Terraform :

      - name: hashicorp/terraform
        args:
          - '-c'
          - |
            terraform init \
              -backend-config="bucket=STATE_BUCKET" \
              -backend-config="prefix=REPOSITORY_NAME" \
        dir: FOLDER
        id: Terraform Init
        entrypoint: sh
      

      Remplacez les éléments suivants :

      • STATE_BUCKET par le nom du bucket Cloud Storage dans lequel stocker l'état Terraform
      • REPOSITORY_NAME par le dépôt qui héberge votre code Terraform.
      • FOLDER par le nom du dossier dans lequel enregistrer les artefacts Terraform.
    2. Créez un fichier de plan:

      - name: hashicorp/terraform
        args:
          - '-c'
          - |
            terraform plan -out tf.plan
        dir: FOLDER
        id: Terraform Plan
        entrypoint: sh
      
    3. Convertissez le fichier de plan au format JSON:

      - name: hashicorp/terraform
        args:
          - '-c'
          - |
            terraform show -json tf.plan > plan.json
        dir: FOLDER
        id: Terraform Show
        entrypoint: sh
      
    4. Créez le rapport de validation de l'IaC:

      - name: gcr.io/cloud-builders/gcloud
        args:
          - '-c'
          - |
            gcloud scc iac-validation-reports create \
            organizations/ORGANIZATION_ID/locations/global --tf-plan-file=plan.json \
            --format="json(response.iacValidationReport)" > IaCScanReport_$BUILD_ID.json
        dir: FOLDER
        id: Run IaC scan
        entrypoint: /bin/bash
      

      Remplacez ORGANIZATION_ID par l'ID de votre organisation.

    5. Si vous utilisez Cloud Storage, importez le fichier de résultats JSON dans Cloud Storage:

      - name: gcr.io/cloud-builders/gsutil
        args:
          - cp
          - IaCScanReport_$BUILD_ID.json
          - SCAN_RESULT_FILE_BUCKET
        dir: FOLDER
        id: Upload report file
      

      Remplacez SCAN_RESULT_FILE_BUCKET par le bucket Cloud Storage dans lequel importer le fichier de résultats.

    6. Pour afficher les résultats au format SARIF, procédez comme suit:

      1. Convertissez le fichier:

        - name: golang
          args:
            - '-c'
            - |
              go run github.com/google/gcp-scc-iac-validation-utils/SARIFConverter@latest \
                --inputFilePath=IaCScanReport_$BUILD_ID.json
                --outputFilePath=IaCScanReport_$BUILD_ID.sarif.json
          dir: FOLDER
          id: Convert to SARIF format
          entrypoint: /bin/bash
        
      2. Facultatif: importez le fichier dans Cloud Storage:

        - name: gcr.io/cloud-builders/gsutil
          args:
            - cp
            - IaCScanReport_$BUILD_ID.sarif.json
            - SCAN_RESULT_FILE_BUCKET
          dir: FOLDER
          id: Upload report file
        
    7. Validez les résultats. Effectuez cette étape sur le fichier JSON de résultats que vous n'avez pas converti au format SARIF:

      - name: golang
        args:
          - '-c'
          - |
            go run github.com/google/gcp-scc-iac-validation-utils/ReportValidator@latest \
              --inputFilePath=IaCScanReport_$BUILD_ID.json --failure_expression=FAILURE_CRITERIA
        dir: FOLDER
        id: Validate results
        entrypoint: /bin/bash
      

      Remplacez FAILURE_CRITERIA par les critères de seuil d'échec qui déterminent quand la compilation échoue. Les critères de seuil sont basés sur le nombre de problèmes de gravité critique, élevée, moyenne et faible rencontrés par l'analyse de validation de l'IaC. FAILURE_CRITERIA spécifie le nombre de problèmes de chaque gravité autorisés, ainsi que la façon dont les problèmes sont agrégés (AND ou OR). Par exemple, si vous souhaitez que la compilation échoue en cas de rencontre d'un problème critique ou d'un problème de gravité élevée, définissez FAILURE_CRITERIA sur Critical:1,High:1,Operator:OR. La valeur par défaut est Critical:1,High:1,Medium:1,Low:1,Operator:OR, ce qui signifie que si l'analyse de validation de l'IaC détecte une infraction de quelque gravité que ce soit, la compilation doit échouer.

    8. Si la compilation échoue, corrigez les cas de non-respect dans votre code Terraform.

    Étape suivante