Intégrer la validation IaC à Cloud Build

Vous pouvez écrire une configuration de compilation qui indique à Cloud Build de valider l'infrastructure en tant que code (IaC) faisant 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 et les détecteurs Security Health Analytics existants appliqués à vos ressources Google Cloud.

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

Avant de commencer

Effectuez ces tâches pour commencer la validation IaC à l'aide de 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. Assurez-vous que vous disposez du ou des rôles suivants au niveau de l'organisation :

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

    Vérifier les rôles

    1. Dans la console Google Cloud, accédez à la page IAM.

      Accéder à IAM
    2. Sélectionnez l'organisation.
    3. Dans la colonne Compte principal, recherchez la ligne qui contient votre adresse e-mail.

      Si votre adresse e-mail ne figure pas dans cette colonne, cela signifie que vous n'avez aucun rôle.

    4. Dans la colonne Rôle de la ligne contenant votre adresse e-mail, vérifiez si la liste des rôles inclut les rôles requis.

    Attribuer les rôles

    1. Dans la console Google Cloud, accédez à la page IAM.

      Accéder à IAM
    2. Sélectionnez l'organisation.
    3. Cliquez sur Accorder l'accès.
    4. Dans le champ Nouveaux comptes principaux, saisissez votre adresse e-mail.
    5. Dans la liste Sélectinoner 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 page IAM pour les activations au niveau de l'organisation.

Activer l'API Cloud Build

  1. Activez l'API Cloud Build

    Activer l'API

Définir vos règles

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

Créer votre code Terraform

Pour obtenir des instructions, consultez Créer le 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 du 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 des 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 le critère de seuil d'échec qui détermine le moment où 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 que l'analyse de validation IaC rencontre. FAILURE_CRITERIA spécifie le nombre de problèmes de chaque niveau de gravité autorisés et la manière dont ils sont agrégés (AND ou OR). Par exemple, si vous souhaitez que la compilation échoue en cas de problème critique ou 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 IaC rencontre une violation de n'importe quelle gravité, la compilation doit échouer.

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

Étapes suivantes