AWS Lambda 스크립트 구성

제공된 예제 코드를 여러 가지 방식으로 구성하여 원하는 정보를 Slack으로 보낼 수 있습니다.

주요 영역은 페이로드(Slack 메시지가 구성되는 부분)와 필터링(Snyk 정보가 처리되는 부분)입니다.

이러한 영역 외에도 암호화 및 시크릿 검증을 구성할 수 있습니다. 이를 구성하는 것은 이 지침의 범위를 벗어납니다.

Snyk 페이로드 필터링

다음 코드는 Snyk 페이로드를 필터링합니다.

코드 추가:

if(snykbody.indexOf("project") !== -1 && snykbody.indexOf("newIssues") !== -1){
    // 새로운 문제들에 대해 반복
    var len = event.body['newIssues'].length;
    
    for(let x=0;x<len;x++){
        // 심각도(Severity) 가져오기
        let severity = JSON.stringify(event.body['newIssues'][x]['issueData']['severity']);
        // 필터링
        if(severity.includes("high") || severity.includes("critical")){
            
            let snykProjectName = JSON.stringify(event.body['project'].name);
            let snykProjectUrl = JSON.stringify(event.body['project'].browseUrl);
            let snykIssueUrl = JSON.stringify(event.body['newIssues'][x]['issueData'].url);
            let snykIssueId = JSON.stringify(event.body['newIssues'][x].id);
            let snykIssuePackage = JSON.stringify(event.body['newIssues'][x].pkgName);
            let snykIssuePriority = JSON.stringify(event.body['newIssues'][x]['priority'].score);
            let message = "New Snyk Vulnerability";
            
            // 결과를 Slack으로 전송
            const result = await messageSlack(
                message,snykProjectUrl,snykProjectName,snykIssuePackage,snykIssueUrl,snykIssueId,severity,snykIssuePriority
            );
        } 
    } 

이 코드는 다음을 수행합니다.

  • 유효한 프로젝트 및 문제가 있는지 확인합니다.

  • 문제들을 반복하면서 심각도가 높음(high) 또는 위급(critical)인지 확인합니다.

  • 지정한 모든 정보를 Slack 메시지로 전달합니다. 원하는 정보를 지정하십시오.

필터를 수정하여 예를 들어 특정 CWE만 다루거나 모든 취약점을 허용하도록 할 수 있습니다.

Slack 메시지 형식

Slack 페이로드는 messageSlack 함수에서 다음과 같이 형식이 지정됩니다.

Snyk은 Slack의 내장 블록 빌더(Block Builder)를 사용하여 원하는 형식으로 페이로드를 디자인했습니다. 블록 빌더를 사용하면 페이로드의 JSON을 구성하여 CWE와 같은 더 많은 정보를 표시하고, 더 많은 상호 작용을 추가하며, 심지어 Snyk의 무시(Ignore) API를 사용하여 무시 버튼을 만들 수도 있습니다.

블록 빌더(Block Kitarrow-up-right)에 대한 자세한 정보는 Slack 웹사이트에서 확인할 수 있습니다.

Last updated