Aller au contenu

--- # SOURCE_HASH: 2f389acc68e1d63db1b187402ce3becdae71b4bb title: BOOST_INVALID_TF_TAGS shortname: BOOST_INVALID_TF_TAGS description: Custom Terraform Tags Validation anchor: checkov group: top10-vulnerable-components pretty_name: Custom Terraform Tags Validation group: cloud-weak-configurat


BOOST_INVALID_TF_TAGS

Boost fournit une fonctionnalité de validation des Tags Terraform personnalisés pour garantir la conformité avec les politiques organisationnelles. Cette fonctionnalité permet aux utilisateurs de définir et d'imposer des conventions de taggage spécifiques, favorisant la cohérence et la clarté à travers les ressources cloud. En tirant parti de cette capacité, vous pouvez vous assurer que votre infrastructure cloud est alignée avec les lignes directrices établies, réduisant ainsi le risque de mauvaises configurations et améliorant la gouvernance globale. Le processus consiste à générer un plan Terraform au format JSON et à spécifier une politique de validation des tags via la variable d'environnement BOOST_TF_TAGS_POLICY.

Politique des tags

{
  "version": "v1.0.0",
  "enforcement_policy": "lax",
  "supported_resources": [
    "aws_s3_bucket"
  ],
  "remediation_message": "Pour plus d'informations, veuillez consulter notre wiki...",
  "required_tags": [
    "db-cloud",
    "db-owner",
    "db-environment",
    "db-purpose"
  ],
  "allowed_tag_values": {
    "db-cloud": [
      "AWS",
      "GCP",
      "Azure"
    ],
    "db-environment": [
      "dev",
      "staging",
      "prod"
    ]
  }
}

Exemple de .gitlab-ci.yml

variables:
  IGNORE_TF_DEPRECATION_WARNING: true

include:
  - template: Terraform/Base.gitlab-ci.yml
  - remote: 'https://raw.githubusercontent.com/boostsecurityio/boostsec-scanner-gitlab/main/scanner.yml'

workflow:
  rules:
      # exécuter lors des poussées vers la branche par défaut
      - if: ($CI_PIPELINE_SOURCE == "push") && ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH)
      # exécuter lors de la demande de fusion
      - if: ($CI_PIPELINE_SOURCE == "merge_request_event")

stages:
  - validate
  - test
  - build
  - boost
  - deploy
  - cleanup

fmt:
  extends: .terraform:fmt
  needs: []

validate:
  extends: .terraform:validate
  needs: []

build:
  extends: .terraform:build
  environment:
    name: $TF_STATE_NAME
    action: prepare
  after_script:
    # Convertir le Plan Terraform en JSON pour l'utilisation par Boost (sur HEAD et éventuellement sur la BASE de la MR)
    - gitlab-terraform show -json ${TF_ROOT}/plan.cache > boost.tfplan.head.json
    - |
      if [[ -n $CI_MERGE_REQUEST_IID ]]; then
        git checkout $CI_MERGE_REQUEST_DIFF_BASE_SHA;
        TF_PLAN_CACHE=${TF_ROOT}/plan.base.cache gitlab-terraform plan;
        gitlab-terraform show -json ${TF_ROOT}/plan.base.cache > boost.tfplan.base.json;
      fi
  artifacts:
      public: false
      paths:
        - ${TF_ROOT}/plan.cache
        - boost.tfplan.base.json
        - boost.tfplan.head.json
      reports:
        terraform: ${TF_ROOT}/plan.json

boost-terraform:
  stage: boost
  extends:
    - .boost_scan
  variables:
    BOOST_SCANNER_REGISTRY_MODULE: "boostsecurityio/checkov-tf-plan"
    BOOST_PRE_SCAN: |
      # Utiliser le Plan Terraform pré-généré basé sur les différents scénarios
      if [[ -n $CI_MERGE_REQUEST_IID ]]; then
        if [[ "$(git rev-parse HEAD)" = "$CI_MERGE_REQUEST_DIFF_BASE_SHA" ]]; then
          cp $CI_PROJECT_DIR/boost.tfplan.base.json ./boost.tfplan.json
        else
          cp $CI_PROJECT_DIR/boost.tfplan.head.json ./boost.tfplan.json
        fi
      else
        cp $CI_PROJECT_DIR/boost.tfplan.head.json ./boost.tfplan.json
      fi
    BOOST_TF_TAGS_POLICY: '{"version":"v1.0.0","enforcement_policy":"lax","supported_resources":["aws_s3_bucket"],"remediation_message":"Pour plus d\'informations, veuillez consulter notre wiki...","required_tags":["db-cloud","db-owner","db-environment","db-purpose"],"allowed_tag_values":{"db-cloud":["AWS","GCP","Azure"],"db-environment":["dev","staging","prod"]}}'

deploy:
  extends: .terraform:deploy
  dependencies:
    - build
  environment:
    name: $TF_STATE_NAME
    action: start