

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# GitLab CI/CD를 사용하여 Terraform, AWS CDK 및 CloudFormation 템플릿 배포
<a name="using-gitlab-cicd"></a>

DPA에는 Terraform 배포를 위한 구성 요소로 사용하는 GitLab CI/CD 템플릿 AWS Cloud Development Kit (AWS CDK)과 CloudFormation IaC 코드가 포함되어 있습니다. 이 섹션에서는이 사용 사례에 대해 다음을 설명합니다.
+ 표준화된 파이프라인 구조
+ 재사용 가능한 단계 및 작업
+ 파이프라인 구조 규칙
+ 보안 스캔을 위한 통합 도구

## 사전 조건
<a name="prerequisites-gitlab-cicd"></a>
+ 활성 AWS 계정
+ IaC 템플릿을 사용하여 리소스를 프로비저닝할 수 있는 권한
+ GitLab CI/CD 기능을 지원하는 모든 유형의 라이선스 프리, 프리미엄 또는 엔터프라이즈 버전이 있는 GitLab 계정
+ 특정 Docker 이미지로 작업을 실행하도록 구성된 GitLab 필수 러너

## 도구
<a name="tools-gitlab-cicd"></a>
+ [cdk\$1nag](https://github.com/cdklabs/cdk-nag#readme)는 규칙 팩 조합을 사용하여 애플리케이션이 모범 사례를 준수하는지 확인하는 AWS CDK 오픈 소스 도구입니다.
+ [AWS CloudFormation Linter(cfn-lint)](https://github.com/aws-cloudformation/cfn-lint)는 CloudFormation YAML 또는 JSON 템플릿을 [AWS CloudFormation 리소스 사양](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html)과 비교하여 확인하는 린터입니다. 또한 리소스 속성의 유효한 값 확인 및 모범 사례 준수와 같은 다른 검사를 수행합니다.
+ [cfn\$1nag](https://github.com/stelligent/cfn_nag)는 패턴을 검색하여 CloudFormation 템플릿의 잠재적 보안 문제를 식별하는 오픈 소스 도구입니다.
+ [Checkov](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html)는 IaC의 보안 및 규정 준수 구성 오류를 확인하는 정적 코드 분석 도구입니다.
+ [코드형 인프라 보안 유지(KICS)](https://github.com/Checkmarx/kics)는 개발 주기 초기에 보안 취약성, 규정 준수 문제 및 인프라 구성 오류를 식별하는 오픈 소스 도구입니다.
+ [tfsec](https://github.com/aquasecurity/tfsec)은 Terraform 코드에 잠재적인 잘못된 구성이 있는지 확인하는 정적 코드 분석 도구입니다.

## 지침
<a name="instructions-gitlab-cicd"></a>

1. `gitlab-ci` 디렉터리를 복사하여 GitLab 조직 그룹에 호스팅합니다.

1. 애플리케이션이 DPA 템플릿이 포함된 GitLab 조직 그룹에 액세스할 수 있는지 확인합니다.

1. 애플리케이션의 경우 다음과 같이 파이프라인의 DPA별 진입점을 포함합니다.
   + 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
     ```

1. 애플리케이션의 경우 `DEV` 및 `INTEGRATION` 환경에서 배포를 활성화하려면 다음 변수를 정의합니다.

   ```
     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
   ```