Aller au contenu

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 Merge Request
      - 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