빌드에 포함된 코드형 인프라(IaC) 검증을 Cloud Build에 지시하는 빌드 구성을 작성할 수 있습니다. IaC 검증을 통해 Terraform 리소스 정의가 Google Cloud 리소스에 적용된 기존 조직 정책 및 Security Health Analytics 감지기를 위반하는지 여부를 확인할 수 있습니다.
IaC 검증에 대한 자세한 내용은 Google Cloud 조직 정책에 따라 IaC 검증을 참조하세요.
시작하기 전에
Cloud Build를 사용하여 IaC 검증을 시작하려면 다음 태스크를 완료합니다.
Security Command Center 프리미엄 등급 또는 Enterprise 등급 활성화
Security Command Center 프리미엄 등급 또는 Enterprise 등급이 조직 수준에서 활성화되었는지 확인합니다.
Security Command Center를 활성화하면 securityposture.googleapis.com
및 securitycentermanagement.googleapis.com
API가 사용 설정됩니다.
권한 설정
-
Make sure that you have the following role or roles on the organization:
- Security Posture Shift-Left Validator
- Log Writer
- Storage Writer
- Storage Reader
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the organization.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
IAM으로 이동 - 조직을 선택합니다.
- 액세스 권한 부여를 클릭합니다.
-
새 주 구성원 필드에 사용자 식별자를 입력합니다. 일반적으로 Google 계정의 이메일 주소입니다.
- 역할 선택 목록에서 역할을 선택합니다.
- 역할을 추가로 부여하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.
- 저장을 클릭합니다.
IaC 검증 권한에 대한 자세한 내용은 조직 수준 활성화를 위한 IAM을 참조하세요.
Cloud Build API 사용 설정
-
Enable the Cloud Build API.
정책 정의
조직 정책 및 Security Health Analytics 감지기를 정의합니다. 보안 상황을 사용하여 이러한 정책을 정의하려면 상황 만들기 및 배포의 태스크를 완료합니다.
Terraform 코드 만들기
자세한 내용은 Terraform 코드 만들기를 참조하세요.
Cloud Build에서 IAC 검증
다음 태스크를
cloudbuild.yaml
파일에 추가합니다.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
다음을 바꿉니다.
STATE_BUCKET
을 Terraform 상태를 저장할 Cloud Storage 버킷의 이름으로 바꿉니다.REPOSITORY_NAME
을 Terraform 코드를 호스팅하는 저장소로 바꿉니다.FOLDER
를 Terraform 아티팩트를 저장할 폴더의 이름으로 바꿉니다.
계획 파일을 만듭니다.
- name: hashicorp/terraform args: - '-c' - | terraform plan -out tf.plan dir: FOLDER id: Terraform Plan entrypoint: sh
계획 파일을 JSON 형식으로 변환합니다.
- name: hashicorp/terraform args: - '-c' - | terraform show -json tf.plan > plan.json dir: FOLDER id: Terraform Show entrypoint: sh
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
ORGANIZATION_ID
를 조직 ID로 바꿉니다.Cloud Storage를 사용하는 경우 JSON 결과 파일을 Cloud Storage에 업로드합니다.
- name: gcr.io/cloud-builders/gsutil args: - cp - IaCScanReport_$BUILD_ID.json - SCAN_RESULT_FILE_BUCKET dir: FOLDER id: Upload report file
SCAN_RESULT_FILE_BUCKET
을 결과 파일을 업로드할 Cloud Storage 버킷으로 바꿉니다.SARIF 형식으로 결과를 보려면 다음을 완료합니다.
파일을 변환합니다.
- 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
선택사항: 파일을 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
결과를 검증합니다. SARIF 형식으로 변환하지 않은 결과 JSON 파일에서 이 단계를 완료합니다.
- 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
FAILURE_CRITERIA
을 빌드 실패 시기를 결정하는 실패 임곗값 기준으로 바꿉니다. 임곗값 기준은 IaC 검증 스캔에서 발생하는 매우 심각한 문제, 심각도가 높은 문제, 심각도가 중간인 문제, 심각도가 낮은 문제 수를 기반으로 합니다.FAILURE_CRITERIA
는 허용되는 각 심각도의 문제 수를 지정하고 문제가 합산되는 방식(AND
또는OR
)도 지정합니다. 예를 들어 심각한 문제 하나 또는 심각도가 높은 문제 하나가 발생할 경우 빌드가 실패하도록 하려면FAILURE_CRITERIA
를Critical:1,High:1,Operator:OR
로 설정합니다. 기본값은Critical:1,High:1,Medium:1,Low:1,Operator:OR
입니다. 즉, IaC 검증 스캔에서 심각도 위반이 발생하면 빌드가 실패해야 합니다.빌드가 실패하면 Terraform 코드 내에서 위반을 해결합니다.
다음 단계