IaC 검증을 GitHub Actions와 통합

코드 보안 작업 분석을 사용하여 GitHub Actions 워크플로의 일부인 코드형 인프라(IaC)를 검증할 수 있습니다. IaC 검증을 통해 Terraform 리소스 정의가 Google Cloud 리소스에 적용된 기존 조직 정책과 Security Health Analytics 감지기를 위반하는지 여부를 확인할 수 있습니다.

IaC 검증에 대한 자세한 내용은 Google Cloud 조직 정책에 따라 IaC 검증을 참조하세요.

시작하기 전에

GitHub Actions로 IaC 검증을 시작하려면 다음 태스크를 완료합니다.

Security Command Center 프리미엄 등급 또는 Enterprise 등급 활성화

Security Command Center 프리미엄 등급 또는 엔터프라이즈 등급이 조직 수준에서 활성화되었는지 확인합니다.

Security Command Center를 활성화하면 securityposture.googleapis.comsecuritycentermanagement.googleapis.com API가 사용 설정됩니다.

서비스 계정 만들기

코드 보안 분석 작업에 사용할 수 있는 서비스 계정을 만듭니다.

  1. In the Google Cloud console, go to the Create service account page.

    Go to Create service account
  2. Select your project.
  3. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

    In the Service account description field, enter a description. For example, Service account for quickstart.

  4. Click Create and continue.
  5. Grant the Security Posture Shift-Left Validator role to the service account.

    To grant the role, find the Select a role list, then select Security Posture Shift-Left Validator.

  6. Click Continue.
  7. Click Done to finish creating the service account.

IaC 검증 권한에 대한 자세한 내용은 조직 수준 활성화를 위한 IAM을 참조하세요.

인증 설정

  1. GitHub ID 공급업체로 워크로드 아이덴티티 제휴를 구성합니다. 자세한 내용은 워크로드 아이덴티티 제휴를 참조하세요.

  2. 워크로드 아이덴티티 제휴 ID 토큰의 URL을 가져옵니다. 예를 들면 https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID입니다.

    다음 사항을 고려하세요.

    • PROJECT_NUMBER는 워크로드 아이덴티티 제휴를 설정한 Google Cloud 프로젝트의 프로젝트 번호입니다.
    • POOL_ID는 풀 이름입니다.
    • PROVIDER_ID는 ID 공급업체 이름입니다.
  3. Google Cloud에 인증 작업을 워크플로에 추가하여 IaC 검증 작업을 인증합니다.

정책 정의

조직 정책Security Health Analytics 감지기를 정의합니다. 보안 상황을 사용하여 이러한 정책을 정의하려면 상황 만들기 및 배포의 태스크를 완료합니다.

Terraform 계획 JSON 파일 만들기

  1. Terraform 코드를 만듭니다. 자세한 내용은 Terraform 코드 만들기를 참조하세요.

  2. GitHub Actions에서 Terraform을 초기화합니다. 예를 들어 HashiCorp - Terraform 설정 작업을 사용하는 경우 다음 명령어를 실행합니다.

    - name: Terraform Init
      id: init
      run: terraform init
    
  3. Terraform 계획 파일을 만듭니다.

    - name: Create Terraform Plan
      id: plan
      run: terraform plan -out=TF_PLAN_FILE
    

    TF_PLAN_FILE을 Terraform 계획 파일의 이름으로 바꿉니다. 예를 들면 myplan.tfplan입니다.

  4. 계획 파일을 JSON 형식으로 변환합니다.

    - name: Convert Terraform Plan to JSON
      id: convert
      run: terraform show -no-color -json TF_PLAN_FILE > TF_PLAN_JSON_FILE
    

    TF_PLAN_JSON_FILE을 JSON 형식의 Terraform 계획 파일 이름으로 바꿉니다. 예를 들면 mytfplan.json입니다.

GitHub Actions 워크플로에 작업 추가

  1. GitHub 저장소에서 워크플로를 찾습니다.
  2. 워크플로 편집기를 엽니다.
  3. GitHub Marketplace 사이드바에서 코드 보안 분석을 검색합니다.
  4. 설치 섹션에서 구문을 복사합니다.
  5. 구문을 워크플로에 새 단계로 붙여넣습니다.
  6. 다음 값을 바꿉니다.

    • workload_identity_provider를 워크로드 아이덴티티 제휴 ID 토큰의 URL 링크로 바꿉니다.
    • service_account를 작업에 만든 서비스 계정의 이메일 주소로 바꿉니다.
    • organization_id를 Google Cloud 조직 ID로 바꿉니다.
    • scan_file_ref를 JSON 형식의 Terraform 계획 파일 경로로 바꿉니다.
    • failure_criteria를 작업이 실패하는 시기를 결정하는 실패 임곗값 기준으로 바꿉니다. 임곗값 기준은 IaC 검증 스캔에서 발생하는 매우 심각한 문제, 심각도가 높은 문제, 심각도가 중간인 문제, 심각도가 낮은 문제 수를 기반으로 합니다. failure_criteria는 허용되는 각 심각도의 문제 수와 문제가 합산되는 방식(AND 또는 OR)을 지정합니다. 예를 들어 심각한 문제 하나 또는 심각도가 높은 문제 하나가 발생할 경우 작업이 실패하도록 하려면 failure_criteriaCritical:1,High:1,Operator:OR로 설정합니다. 기본값은 Critical:1,High:1,Medium:1,Low:1,Operator:OR입니다. 즉, IaC 검증 스캔에서 문제가 발생하면 작업이 실패해야 합니다.

이제 워크플로를 실행하여 Terraform 계획 파일을 검증할 수 있습니다. 워크플로를 수동으로 실행하려면 워크플로 수동 실행을 참조하세요.

IaC 위반 보고서 보기

  1. GitHub 저장소에서 작업을 클릭하고 워크플로를 선택합니다.

  2. 워크플로의 가장 최근 실행을 클릭합니다.

    아티팩트 섹션에서 위반 보고서(ias-scan-sarif.json)를 ZIP 파일로 사용할 수 있습니다. 보고서에는 다음 필드가 포함됩니다.

    • Terraform 계획에서 위반한 정책을 설명하는 rules 필드. 각 규칙에는 보고서에 포함된 결과와 일치할 수 있는 ruleID가 포함됩니다.
    • 특정 규칙을 위반하는 제안된 애셋 수정사항을 설명하는 results 필드
  3. Terraform 코드를 적용하기 전 Terraform 코드 내에서 위반을 해결합니다.

다음 단계