

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

# Amazon Inspector Jenkins 플러그인 사용
<a name="cicd-jenkins"></a>

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

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

## 1단계. 설정 AWS 계정
<a name="cicd-jenkins-enable"></a>

 Amazon Inspector 스캔 API에 대한 액세스를 허용하는 IAM 역할 AWS 계정 로를 구성합니다. 지침은 [Amazon Inspector CI/CD 통합을 사용하도록 AWS 계정 설정](configure-cicd-account.md) 섹션을 참조하세요.

## 2단계. Amazon Inspector Jenkins 플러그인을 설치합니다.
<a name="cicd-jenkins-install-jenkins-plugin"></a>

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

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

1.  **사용 가능**을 선택합니다.

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

## (선택 사항) 3단계. Jenkins에 docker 자격 증명 추가
<a name="cicd-jenkins-add-jenkins"></a>

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

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

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

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

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

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

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

## (선택 사항) 4단계. AWS 자격 증명 추가
<a name="cicd-jenkins-add-aws-credentials"></a>

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

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

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

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

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

1.  **Access Key ID** 및 **Secret Access Key**를 포함한 세부 정보를 입력한 다음 **OK**를 선택합니다.

## 5단계. Jenkins 스크립트에 CSS 지원 추가
<a name="cicd-jenkins-add-css-support"></a>

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

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

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

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

## 6단계. 빌드에 Amazon Inspector 스캔 추가
<a name="cicd-jenkins-add-inspector-scan"></a>

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

### 프로젝트에 빌드 단계를 추가하여 빌드에 Amazon Inspector 스캔 추가
<a name="w2aac39c17c19b5"></a>

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

1.  두 가지 inspector-sbomgen 설치 방법(**Automatic** 또는 **Manual**) 중에서 선택합니다. 자동 옵션을 사용하면 플러그인이 최신 버전을 다운로드할 수 있습니다. 또한 항상 최신 특성, 보안 업데이트 및 버그 수정이 있는지 확인합니다.

   1.  (옵션 1) 최신 버전의 Inspector-sbomgen을 다운로드하려면 **Automatic**을 선택합니다. 이 옵션은 현재 사용 중인 운영 체제 및 CPU 아키텍처를 자동으로 감지합니다.

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

    자세한 내용은 [Amazon Inspector SBOM 생성기](https://docs.aws.amazon.com/inspector/latest/user/sbom-generator.html)에서 [Amazon Inspector SBOM 생성기(Sbomgen) 설치](https://docs.aws.amazon.com/inspector/latest/user/sbom-generator.html#install-sbomgen)를 참조하세요.

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

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

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

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

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

   1.  (선택 사항) **보고서 아티팩트 이름**에 빌드 프로세스 중에 생성된 아티팩트의 사용자 지정 이름을 입력합니다. 이를 통해 이를 고유하게 식별하고 관리할 수 있습니다.

   1.  (선택 사항) **파일 건너뛰기**에서 스캔에서 제외할 디렉터리를 하나 이상 지정합니다. 크기로 인해 스캔할 필요가 없는 디렉터리의 경우 이 옵션을 고려하세요.

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

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

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

      1.  (선택 사항) **AWS 자격 증명**에서 IAM 사용자를 기반으로 인증할 자격 AWS 증명을 지정합니다.

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

   1.  (선택 사항) **취약성 임계값 활성화**를 선택합니다. 이 옵션을 사용하면 스캔한 취약성이 값을 초과하는 경우 빌드가 실패하는지 여부를 확인할 수 있습니다. 모든 값이 `0`과 같으면 스캔되는 취약성 수에 관계없이 빌드가 성공합니다. EPSS 점수의 경우 값은 0\$11일 수 있습니다. 스캔한 취약성이 값을 초과하면 빌드가 실패하고 EPSS 점수가 값보다 높은 모든 CVE가 콘솔에 표시됩니다.

1.  **저장**을 선택합니다.

### Jenkins 선언적 파이프라인을 사용하여 빌드에 Amazon Inspector 스캔 추가
<a name="w2aac39c17c19b7"></a>

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

**SBOMGen 선언적 파이프라인을 자동으로 다운로드하려면**
+  빌드에 Amazon Inspector 스캔을 추가하려면 다음 예제 구문을 사용합니다. *IMAGE\$1PATH*는 이미지 경로(예: *alpine:latest*)로, *IAM\$1ROLE*은 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',
                archivePath: 'IMAGE_PATH', // Path to your container image or tar file
                awsRegion: 'REGION', // AWS region for scan requests
                iamRole: 'IAM ROLE', // IAM role ARN for authentication
                credentialId: 'Id', // Docker credentials (empty if public repo)
                awsCredentialId: 'AWS ID', // AWS credential ID for authentication
                awsProfileName: 'Profile Name', // AWS profile name to use
                sbomgenSkipFiles: '*.log,node_modules,/tmp/*', // Files/directories to exclude from scanning

                // Vulnerability threshold settings (updated parameter names)
                isSeverityThresholdEnabled: false, // Enable/disable build failure on vulnerability count
                countCritical: 0, // Max critical vulnerabilities before build fails
                countHigh: 0, // Max high vulnerabilities before build fails
                countMedium: 5, // Max medium vulnerabilities before build fails
                countLow: 10, // Max low vulnerabilities before build fails

                // EPSS (Exploit Prediction Scoring System) settings
                isEpssThresholdEnabled: false, // Enable/disable EPSS-based failure threshold
                epssThreshold: 0.7, // EPSS score threshold (0.0 to 1.0)

                // NEW FEATURE: CVE Suppression - ignore specific false positives
                isSuppressedCveEnabled: false, // Enable CVE suppression feature
                suppressedCveList: '', // Comma-separated list of CVEs to ignore in thresholds

                // NEW FEATURE: Auto-Fail CVEs - always fail on critical security issues  
                isAutoFailCveEnabled: false, // Enable auto-fail CVE feature
                autoFailCveList: '' // Comma-separated list of CVEs that always fail build
                ])
            }
        }
    }
}
```

**SBOMGen 선언적 파이프라인을 수동으로 다운로드하려면**
+  빌드에 Amazon Inspector 스캔을 추가하려면 다음 예제 구문을 사용합니다. *SBOMGEN\$1PATH*는 3단계에서 설치한 Amazon Inspector SBOM 생성기의 경로로, *IMAGE\$1PATH*는 이미지 경로(예: *alpine:latest*)로, *IAM\$1ROLE*은 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',
                archivePath: 'IMAGE_PATH', // Path to your container image or tar file
                awsRegion: 'REGION', // AWS region for scan requests
                iamRole: 'IAM ROLE', // IAM role ARN for authentication
                credentialId: 'Id', // Docker credentials (empty if public repo)
                awsCredentialId: 'AWS ID', // AWS credential ID for authentication
                awsProfileName: 'Profile Name', // AWS profile name to use
                sbomgenSkipFiles: '*.log,node_modules,/tmp/*', // Files/directories to exclude from scanning

                // Vulnerability threshold settings (updated parameter names)
                isSeverityThresholdEnabled: false, // Enable/disable build failure on vulnerability count
                countCritical: 0, // Max critical vulnerabilities before build fails
                countHigh: 0, // Max high vulnerabilities before build fails
                countMedium: 5, // Max medium vulnerabilities before build fails
                countLow: 10, // Max low vulnerabilities before build fails

                // EPSS (Exploit Prediction Scoring System) settings
                isEpssThresholdEnabled: false, // Enable/disable EPSS-based failure threshold
                epssThreshold: 0.7, // EPSS score threshold (0.0 to 1.0)

                // NEW FEATURE: CVE Suppression - ignore specific false positives
                isSuppressedCveEnabled: false, // Enable CVE suppression feature
                suppressedCveList: '', // Comma-separated list of CVEs to ignore in thresholds

                // NEW FEATURE: Auto-Fail CVEs - always fail on critical security issues  
                isAutoFailCveEnabled: false, // Enable auto-fail CVE feature
                autoFailCveList: '' // Comma-separated list of CVEs that always fail build
                ])
            }
        }
    }
}
```

 플러그인에는 보안 취약성을 관리하기 위한 특성이 포함되어 있습니다.

**억제된 CVE 목록**  
 스캔은 때때로 실제 위협이 아닌 취약성을 탐지할 수 있습니다. 이러한 오탐이 빌드를 중지하지 않도록 하려면 *표시되지 않는* 목록에 추가할 수 있습니다.

```
isSuppressedCveEnabled: true,
suppressedCveList: 'CVE-2023-1234,CVE-2023-5678'
```

 이렇게 하면 빌드가 실패하는지 확인할 때 특정 CVE는 무시됩니다. 오탐을 해결한 경우에만 억제 목록에 오탐을 추가해야 합니다. 이러한 취약성을 금지 목록에 추가한 후에도 CVE는 여전히 보안 보고서에 표시되지만 빌드 실패는 발생하지 않습니다.

**자동 실패 CVE 목록**  
 중요한 보안 취약성의 경우 항상 빌드가 실패하는 목록을 생성할 수 있습니다.

```
isAutoFailCveEnabled: true,
autoFailCveList: 'CVE-2024-9999'
```

 이렇게 하면 활성화한 설정에 관계없이 항상 빌드가 실패합니다. 배포해서는 안 되는 우선 순위가 높은 보안 문제에 대해서만 이 목록을 생성해야 합니다. 이 목록은 보안을 극대화하기 위해 다른 모든 임계값 설정을 재정의합니다.

## 7단계. Amazon Inspector 취약성 보고서 확인
<a name="cicd-jenkin-view-vulnerability-report"></a>

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

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

![\[Amazon Inspector 취약성 보고서 샘플.\]](http://docs.aws.amazon.com/ko_kr/inspector/latest/user/images/report.png)


**참고**  
 플러그인은 이전 파라미터 이름을 지원하므로 이전 스크립트를 사용할 수 있습니다. 그러나 콘솔에서 이러한 파라미터를 최신 파라미터로 업데이트하라는 경고가 표시됩니다. 예를 들어 `isThresholdEnabled`를 사용하는 경우 파라미터를 `isSeverityThresholdEnabled`로 업데이트하라는 경고가 표시됩니다.

## 문제 해결
<a name="jenkins-troubleshooting"></a>

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

### 자격 증명 로드 실패 또는 sts 예외 오류
<a name="w2aac39c17c23b5"></a>

**오류:**  
 `InstanceProfileCredentialsProvider(): Failed to load credentials or sts exception.` 

**해결 방법**  
 AWS 계정에 `aws_secret_access_key` 대해 `aws_access_key_id` 및를 가져옵니다. `aws_access_key_id` 및 `aws_secret_access_key`를 `~/.aws/credentials`에 설정합니다.

### tarball, 로컬 또는 원격 소스에서 이미지 로드 실패
<a name="w2aac39c17c23b7"></a>

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

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

**​해결 방법:**  
 다음 사항을 확인합니다.
+  Jenkins 플러그인 사용자에게 스캔하려는 이미지에 대한 읽기 권한이 있습니다.
+  스캔하려는 이미지가 Docker 엔진에 있습니다.
+  원격 이미지 URL이 정확합니다.
+  원격 레지스트리에 대해 인증되었습니다(해당하는 경우).

### Inspector-sbomgen 경로 오류
<a name="w2aac39c17c23b9"></a>

**오류:**  
 `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 생성기](https://docs.aws.amazon.com/inspector/latest/user/sbom-generator.html)를 참조하세요.

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

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

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