Amazon Inspector Jenkins 플러그인 사용 - Amazon Inspector

Amazon Inspector Jenkins 플러그인 사용

Jenkins 플러그인은 Amazon Inspector SBOM 생성기 바이너리와 Amazon Inspector 스캔 API를 사용하여 빌드 종료 시 상세한 보고서를 생성하므로 배포 전에 위험을 조사하고 해결할 수 있습니다. Amazon Inspector Jenkins 플러그인을 사용하면 Jenkins 파이프라인에 Amazon Inspector 취약성 스캔을 추가할 수 있습니다. 또한 탐지된 취약성의 수와 심각도에 따라 파이프라인 실행에 성공하거나 실패하도록 Amazon Inspector 취약성 스캔을 구성할 수 있습니다. Jenkins 플러그인의 최신 버전은 Jenkins 마켓플레이스(https://plugins.jenkins.io/amazon-inspector-image-scanner/)에서 확인할 수 있습니다. 다음 단계에서는 Amazon Inspector Jenkins 플러그인을 설정하는 방법에 대해 설명합니다.

중요

다음 단계를 완료하기 전에 플러그인을 실행하려면 Jenkins를 버전 2.387.3 이상으로 업그레이드해야 합니다.

단계 1. AWS 계정 설정

Amazon Inspector 스캔 API에 대한 액세스를 허용하는 IAM 역할을 포함하여 AWS 계정을 구성합니다. 지침은 Amazon Inspector CI/CD 통합을 사용하기 위한 AWS 계정 설정 단원을 참조하십시오.

단계 2. Amazon Inspector Jenkins 플러그인을 설치합니다.

다음 절차에서는 Jenkins 대시보드에서 Amazon Inspector Jenkins 플러그인을 설치하는 방법에 대해 설명합니다.

  1. Jenkins 대시보드에서 Jenkins 관리를 선택한 다음 플러그인 관리를 선택합니다.

  2. 사용 가능을 선택합니다.

  3. 사용 가능 탭에서 Amazon Inspector 스캔을 검색한 다음 플러그인을 설치합니다.

(선택 사항) 3단계. Jenkins에 docker 자격 증명 추가

참고

Docker 이미지가 프라이빗 리포지토리에 있는 경우에만 docker 자격 증명을 추가합니다. 그렇지 않은 경우 이 단계를 건너뜁니다.

다음 절차에서는 Jenkins 대시보드에서 Jenkins에 docker 자격 증명을 추가하는 방법에 대해 설명합니다.

  1. Jenkins 대시보드에서 Manage Jenkins, Credentials, System을 차례로 선택합니다.

  2. Global credentials를 선택한 다음 Add credentials를 선택합니다.

  3. Kind에서 Username with password를 선택합니다.

  4. Scope에서 Global (Jenkins, nodes, items, all child items, etc)을 선택합니다.

  5. 세부 정보를 입력한 다음 OK를 선택합니다.

(선택 사항) 4단계. AWS 자격 증명 추가

참고

IAM 사용자를 기반으로 인증하려는 경우에만 AWS 자격 증명을 추가합니다. 그렇지 않은 경우 이 단계를 건너뜁니다.

다음 절차에서는 Jenkins 대시보드에서 AWS 자격 증명을 추가하는 방법에 대해 설명합니다.

  1. Jenkins 대시보드에서 Manage Jenkins, Credentials, System을 차례로 선택합니다.

  2. Global credentials를 선택한 다음 Add credentials를 선택합니다.

  3. Kind에서 AWS Credentials를 선택합니다.

  4. Access Key IDSecret Access Key를 포함한 세부 정보를 입력한 다음 OK를 선택합니다.

5단계. Jenkins 스크립트에 CSS 지원 추가

다음 절차에서는 Jenkins 스크립트에 CSS 지원을 추가하는 방법에 대해 설명합니다.

  1. Jenkins를 다시 시작합니다.

  2. 대시보드에서 Manage Jenkins, Nodes, Built-In Node, Script Console을 차례로 선택합니다.

  3. 텍스트 상자에 System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "") 줄을 추가한 다음 Run을 선택합니다.

6단계. 빌드에 Amazon Inspector 스캔 추가

프로젝트에 빌드 단계를 추가하거나 Jenkins 선언적 파이프라인을 사용하여 Amazon Inspector 스캔을 빌드에 추가할 수 있습니다.

프로젝트에 빌드 단계를 추가하여 빌드에 Amazon Inspector 스캔 추가

  1. 구성 페이지에서 Build Steps까지 아래로 스크롤하여 Add build step을 선택합니다. 그런 다음 Amazon Inspector Scan을 선택합니다.

  2. 두 가지 nspector-sbomgen 설치 방법(Manual 또는 Manual) 중에서 선택합니다.

    1. (옵션 1) 최신 버전의 Inspector-sbomgen을 다운로드하려면 Automatic을 선택합니다. 이 방법을 선택하는 경우 플러그인을 실행하는 시스템과 일치하는 CPU 아키텍처를 선택해야 합니다.

    2. (옵션 2) 스캔을 위해 Amazon Inspector SBOM 생성기 바이너리를 설정하려면 Manual을 선택합니다. 이 방법을 선택하는 경우 이전에 다운로드한 Inspector-sbomgen 버전의 전체 경로를 제공해야 합니다.

    자세한 내용은 Amazon Inspector SBOM 생성기에서 Amazon Inspector SBOM 생성기(Sbomgen) 설치를 참조하세요.

  3. 다음을 완료하여 Amazon Inspector 스캔 빌드 단계 구성을 완료합니다.

    1. 이미지 ID를 입력합니다. 이미지는 로컬, 원격 또는 아카이브 위치에 있을 수 있습니다. 이미지 이름은 Docker 이름 지정 규칙을 따라야 합니다. 내보낸 이미지를 분석하는 경우 예상 tar 파일의 경로를 제공하세요. 다음 이미지를 예시 이미지 ID 경로로 참조하세요.

      1. 로컬 또는 원격 컨테이너의 경우: NAME[:TAG|@DIGEST]

      2. tar 파일의 경우: /path/to/image.tar

    2. 스캔 요청을 보낼 AWS 리전을 선택합니다.

    3. (선택 사항) Docker 보안 인증 정보의 경우 Docker 사용자 이름을 선택합니다. 컨테이너 이미지가 프라이빗 리포지토리에 있는 경우에만 이 작업을 수행하세요.

    4. (선택 사항) 지원되는 다음 AWS 인증 방법을 제공할 수 있습니다.

      1. (선택 사항) IAM role에 역할 ARN(arn:aws:iam::AccountNumber:role/RoleName)을 제공합니다.

      2. (선택 사항) AWS credentials에서 IAM 사용자를 기반으로 인증할 Id를 선택합니다.

      3. (선택 사항) AWS profile name에 프로파일 이름을 사용하여 인증할 프로파일의 이름을 입력합니다.

    5. (선택 사항) 심각도별 취약성 임계값을 지정합니다. 스캔 중에 지정한 수를 초과하면 이미지 빌드가 실패합니다. 값이 모두 0이면 취약성이 발견되더라도 빌드가 성공합니다.

  4. Save(저장)를 선택합니다.

Jenkins 선언적 파이프라인을 사용하여 빌드에 Amazon Inspector 스캔 추가

Jenkins 선언적 파이프라인을 사용하여 자동 또는 수동으로 빌드에 Amazon Inspector 스캔을 추가할 수 있습니다.

SBOMGen 선언적 파이프라인을 자동으로 다운로드하려면
  • 빌드에 Amazon Inspector 스캔을 추가하려면 다음 예제 구문을 사용합니다. Amazon Inspector SBOM 생성기 다운로드의 선호하는 OS 아키텍처에 따라 SBOMGEN_SOURCE를 linuxAmd64 또는 linuxArm64로 바꿉니다. IMAGE_PATH는 이미지 경로(예: alpine:latest)로, IAM_ROLE은 1단계에서 구성한 IAM 역할의 ARN으로, ID는 Docker 자격 증명 ID(프라이빗 리포지토리를 사용하는 경우)로 바꿉니다. 선택적으로 취약성 임계값을 활성화하고 각 심각도에 대한 값을 지정할 수 있습니다.

pipeline { agent any stages { stage('amazon-inspector-image-scanner') { steps { script { step([ $class: 'com.amazon.inspector.jenkins.amazoninspectorbuildstep.AmazonInspectorBuilder', sbomgenSource: 'SBOMGEN_SOURCE', // this can be linuxAmd64 or linuxArm64 archivePath: 'IMAGE_PATH', awsRegion: 'REGION', iamRole: 'IAM ROLE', credentialId: 'Id', // provide empty string if image not in private repositories awsCredentialId: ''AWS ID;', awsProfileName: 'Profile Name', isThresholdEnabled: false, countCritical: 0, countHigh: 0, countLow: 10, countMedium: 5, ]) } } } } }
SBOMGen 선언적 파이프라인을 수동으로 다운로드하려면
  • 빌드에 Amazon Inspector 스캔을 추가하려면 다음 예제 구문을 사용합니다. SBOMGEN_PATH는 3단계에서 설치한 Amazon Inspector SBOM 생성기의 경로로, IMAGE_PATH는 이미지 경로(예: alpine:latest)로, IAM_ROLE은 1단계에서 구성한 IAM 역할의 ARN으로, ID는 Docker 자격 증명 ID(프라이빗 리포지토리를 사용하는 경우)로 바꿉니다. 선택적으로 취약성 임계값을 활성화하고 각 심각도에 대한 값을 지정할 수 있습니다.

참고

Sbomgen을 Jenkins 디렉터리에 배치하고 플러그인의 Jenkins 디렉터리 경로를 제공합니다(예: /opt/folder/arm64/inspector-sbomgen).

pipeline { agent any stages { stage('amazon-inspector-image-scanner') { steps { script { step([ $class: 'com.amazon.inspector.jenkins.amazoninspectorbuildstep.AmazonInspectorBuilder', sbomgenPath: 'SBOMGEN_PATH', archivePath: 'IMAGE_PATH', awsRegion: 'REGION', iamRole: 'IAM ROLE', awsCredentialId: ''AWS ID;', credentialId: 'Id;', // provide empty string if image not in private repositories awsProfileName: 'Profile Name', isThresholdEnabled: false, countCritical: 0, countHigh: 0, countLow: 10, countMedium: 5, ]) } } } } }

7단계. Amazon Inspector 취약성 보고서 확인

  1. 프로젝트의 새 빌드를 완료합니다.

  2. 빌드가 완료되면 결과에서 출력 형식을 선택합니다. HTML을 선택하면 보고서의 JSON SBOM 또는 CSV 버전을 다운로드할 수 있는 옵션이 제공됩니다. 다음은 HTML 보고서의 예입니다.

Amazon Inspector 취약성 보고서 샘플.

문제 해결

다음은 Jenkins용 Amazon Inspector 스캔 플러그인을 사용할 때 발생할 수 있는 몇 가지 일반적인 오류입니다.

자격 증명 로드 실패 또는 sts 예외 오류

오류:

InstanceProfileCredentialsProvider(): Failed to load credentials or sts exception.

해결 방법

AWS 계정의 aws_access_key_idaws_secret_access_key를 가져옵니다. aws_access_key_idaws_secret_access_key~/.aws/credentials에 설정합니다.

tarball, 로컬 또는 원격 소스에서 이미지 로드 실패

오류:

2024/10/16 02:25:17 [ImageDownloadFailed]: failed to load image from tarball, local, or remote sources.

참고

이 오류는 Jenkins 플러그인이 컨테이너 이미지를 읽을 수 없거나, Docker 엔진에서 컨테이너 이미지를 찾을 수 없거나, 원격 컨테이너 레지스트리에서 컨테이너 이미지를 찾을 수 없는 경우에 발생할 수 있습니다.

​해결 방법:

다음 사항을 확인합니다.

  • Jenkins 플러그인 사용자에게 스캔하려는 이미지에 대한 읽기 권한이 있습니다.

  • 스캔하려는 이미지가 Docker 엔진에 있습니다.

  • 원격 이미지 URL이 정확합니다.

  • 원격 레지스트리에 대해 인증되었습니다(해당하는 경우).

Inspector-sbomgen 경로 오류

오류:

Exception:com.amazon.inspector.jenkins.amazoninspectorbuildstep.exception.SbomgenNotFoundException: There was an issue running inspector-sbomgen, is /opt/inspector/inspector-sbomgen the correct path?

​해결 방법:

다음 절차에 따라 문제를 해결합니다.

  1. Jenkins 디렉터리에 올바른 OS 아키텍처 Inspector-sbomgen을 배치합니다. 자세한 내용은 Amazon Inspector SBOM 생성기를 참조하세요.

  2. chmod +x inspector-sbomgen 명령을 사용하여 바이너리에 실행 권한을 부여합니다.

  3. 플러그인에 올바른 Jenkins 머신 경로를 제공합니다(예: /opt/folder/arm64/inspector-sbomgen).

  4. 구성을 저장하고 Jenkins 작업을 실행합니다.