IaC 검증을 Jenkins와 통합

Jenkins용 Google Analyze Code Security 플러그인을 사용하여 Jenkins 프로젝트의 일부인 코드형 인프라(IaC)를 검증할 수 있습니다. IaC 검증을 통해 Terraform 리소스 정의가 Google Cloud 리소스에 적용된 기존 조직 정책 및 Security Health Analytics 감지기를 위반하는지 여부를 확인할 수 있습니다.

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

IaC 검증은 Jenkins 자유형 프로젝트에서만 작동합니다.

시작하기 전에

Jenkins로 IaC 검증을 시작하려면 다음 태스크를 완료하세요.

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

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

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

서비스 계정 만들기

Jenkins용 Google Analyze Code Security 플러그인에 사용할 수 있는 서비스 계정을 만듭니다.

  1. Create a service account:

    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.

      Do not close your browser window. You will use it in the next step.

  2. Create a service account key:

    1. In the Google Cloud console, click the email address for the service account that you created.
    2. Click Keys.
    3. Click Add key, and then click Create new key.
    4. Click Create. A JSON key file is downloaded to your computer.
    5. Click Close.

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

정책 정의

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

플러그인 설치 및 구성

  1. Jenkins 콘솔에서 Jenkins 관리 > 플러그인 관리를 클릭합니다.
  2. 사용 가능 탭에서 google-analyze-code-security를 검색합니다.
  3. 설치 단계를 완료합니다.
  4. Jenkins 관리 > 시스템 구성을 클릭합니다.
  5. Google Analyze Code Security 섹션에서 사용자 인증 정보 추가를 클릭합니다.
  6. 조직 ID에서 만들거나 수정할 Terraform 리소스가 포함된 Google Cloud 조직의 조직 ID를 입력합니다.
  7. Security Command Center 사용자 인증 정보에서 서비스 계정 키를 추가합니다.
  8. 연결을 테스트하여 서비스 계정 사용자 인증 정보를 확인합니다.
  9. 저장을 클릭합니다.

Terraform 계획 JSON 파일 만들기

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

  2. Jenkins용 Terraform 플러그인을 설치합니다.

  3. Jenkins 콘솔의 Jenkins 자유형 프로젝트에서 구성 페이지로 이동합니다.

  4. 소스 코드 관리를 클릭합니다.

  5. 저장소 URL에 생성한 Terraform 코드의 URL을 입력합니다.

  6. 빌드 단계를 클릭합니다.

  7. 다음 단계를 추가합니다.

    1. Terraform을 초기화합니다.

      terraform init
      
    2. Terraform 계획 파일을 만듭니다.

      terraform plan -out=TF_PLAN_FILE
      

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

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

      terraform show -no-color -json TF_PLAN_FILE > TF_PLAN_JSON_FILE
      

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

Jenkins 프로젝트에 플러그인 추가

  1. Jenkins 콘솔의 Jenkins 자유형 프로젝트에서 구성 페이지로 이동합니다.
  2. 빌드 단계에서 빌드 단계 추가 > 빌드 중에 코드 스캔 수행을 클릭합니다.
  3. 조직 ID를 입력합니다.
  4. Terraform 계획 파일의 경로를 JSON 형식으로 제공합니다.
  5. 선택사항: 빌드 실패 기준을 설정합니다. 실패 기준은 IaC 검증 스캔에서 발생하는 매우 심각한 문제, 심각도가 높은 문제, 심각도가 중간인 문제, 심각도가 낮은 문제 수를 기반으로 합니다. 허용되는 각 심각도의 문제 수를 지정하고 문제가 합산되는 방식(AND 또는 OR)도 지정할 수 있습니다.

    1. 애셋 위반 시 실패를 클릭합니다.

    2. 모든 심각도 수준의 문제 수에 도달한 경우에만 빌드가 실패하도록 하려면 AND를 선택합니다. 심각도 수준의 문제 수에 도달한 경우 빌드가 실패하도록 하려면 OR을 선택합니다. 예를 들어 중대한 문제 하나 또는 심각도가 높은 문제 하나가 발생하는 경우 빌드가 실패하도록 하려면 집계 값을 OR로 설정합니다.

    3. 빌드가 실패하기 전에 허용할 다양한 심각도 수준의 문제 수를 나타냅니다.

    실패 기준을 지정하지 않으려면 애셋 위반 무시를 선택합니다.

  6. 저장을 클릭합니다.

이제 빌드를 실행하여 Terraform 계획 파일을 검증할 수 있습니다.

IaC 위반 보고서 보기

  1. Jenkins 콘솔에서 빌드의 최신 워크플로를 클릭합니다.

  2. 상태를 클릭합니다. 다음 HTML 파일은 빌드 아티팩트로 사용할 수 있습니다.

    • 플러그인이 실행된 경우 위반 보고서(GoogleAnalyzeCodeSecurity_ViolationSummary.html)

    이 보고서는 심각도를 기준으로 위반사항을 그룹화합니다. 위반 섹션에서는 충족되지 않은 규칙과 규칙을 위반한 Terraform 계획의 애셋 ID를 설명합니다.

    • 빌드가 실패한 경우 오류 요약 보고서
  3. Terraform 코드를 적용하기 전 Terraform 코드 내에서 위반을 해결합니다.

다음 단계