Utilisation de GitLab CI/CD pour déployer Terraform, AWS CDK et des modèles CloudFormation - AWS Directives prescriptives

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation de GitLab CI/CD pour déployer Terraform, AWS CDK et des modèles CloudFormation

DPA contient des modèles GitLab CI/CD que vous utilisez comme éléments de base pour déployer Terraform et le code IaC. AWS Cloud Development Kit (AWS CDK) CloudFormation Cette section décrit les éléments suivants pour ce cas d'utilisation :

  • Structure de pipeline normalisée

  • Stages et travaux réutilisables

  • Règles relatives à la structure du pipeline

  • Outils intégrés pour les scans de sécurité

Conditions préalables

  • Un actif Compte AWS

  • Autorisations pour provisionner des ressources à l'aide de modèles IaC

  • GitLab compte avec tout type de version sans licence, premium ou d'entreprise prenant en charge GitLab les fonctionnalités CI/CD

  • GitLab exécuteurs requis configurés pour exécuter des tâches avec des images Docker spécifiques

Outils

  • cdk_nag est un outil open source qui utilise une combinaison de packs de règles pour vérifier que les AWS CDK applications respectent les meilleures pratiques.

  • AWS CloudFormation Linter (cfn-lint) est un linter qui compare les modèles CloudFormation YAML ou JSON aux spécifications des ressources.AWS CloudFormation Il effectue également d'autres contrôles, tels que la vérification de la validité des valeurs des propriétés des ressources et le respect des meilleures pratiques.

  • cfn_nag est un outil open source qui identifie les problèmes de sécurité potentiels dans les CloudFormation modèles en recherchant des modèles.

  • Checkov est un outil d'analyse de code statique qui vérifie les erreurs de configuration liées à la sécurité et à la conformité dans iAC.

  • Keeping Infrastructure as Code Secure (KICS) est un outil open source qui identifie les vulnérabilités de sécurité, les problèmes de conformité et les erreurs de configuration de l'infrastructure au début du cycle de développement.

  • tfsec est un outil d'analyse de code statique qui vérifie le code Terraform pour détecter d'éventuelles erreurs de configuration.

Instructions

  1. Copiez le gitlab-ci répertoire et hébergez-le dans votre groupe GitLab organisationnel.

  2. Assurez-vous que les applications peuvent accéder au groupe GitLab organisationnel qui contient les modèles DPA.

  3. Pour l'application, incluez le point d'entrée spécifique au DPA pour le pipeline comme suit :

    • Terraform

      include: - project: <GITLAB_GROUP_PATH/<REPOSITORY_NAME> ref: main # best practise to create release tag and use the same file: gitlab-ci/entrypoints/gitlab/terraform-infrastructure.yml
    • AWS CDK

      include: - project: <GITLAB_GROUP_PATH/<REPOSITORY_NAME> ref: main # best practise to create release tag and use the same file: gitlab-ci/entrypoints/gitlab/cdk-infrastructure.yml
    • CloudFormation

      include: - project: <GITLAB_GROUP_PATH/<REPOSITORY_NAME> ref: main # best practise to create release tag and use the same file: gitlab-ci/entrypoints/gitlab/cf-infrastructure.yml
  4. Pour l'application, définissez les variables suivantes afin de permettre le déploiement sur DEV et INTEGRATION les environnements.

    AWS_REGION: us-east-2 # region where deployment should happen DEV_AWS_ACCOUNT: 123456789012 # Dev environment AWS account number DEV_ARN_ROLE: arn:aws:iam::123456789012:role/dpa-gitlab-access-role # IAM role ARN that will be used to provision resources in Dev DEV_DEPLOY: "true" # true / false to enable deployment to DEV environment DEV_ENV: "dev" # Dev environment name INT_AWS_ACCOUNT: 123456789012 # Integration environment AWS account number INT_ARN_ROLE: arn:aws:iam::123456789012:role/dpa-gitlab-access-role # IAM role ARN that will be used to provision resources in Integration INT_DEPLOY: "true" # true / false to enable deployment to Integration environment INT_ENV: "int" # Integration environment name