AWS Lambda 설정: Snyk을 Slack에 연결하는 Lambda 함수 생성

AWS Lambda 함수는 Snyk을 Slack에 연결하는 데 사용됩니다. 이러한 함수는 새로운 Snyk 취약점이 발생했을 때와 같은 이벤트에 의해 트리거되어 코드를 실행하는 저렴하고 효율적인 방법이기 때문입니다.

참고: API Gateway를 통해 Lambda 함수를 게시하는 경우, 두 서비스 모두 동일한 지역(Region)에 구성되어야 합니다. AWS 콘솔의 오른쪽 상단에서 이를 확인할 수 있습니다.

먼저 함수의 코드와 필요한 종속성이 포함된 zip 파일을 생성합니다.

  1. 다음 두 코드 블록을 package.jsonindex.js로 저장합니다.

    1. package.json (코드에 필요한 다른 종속성에 맞게 수정하십시오. 필요한 종속성은 axioscrypto입니다.)

      {
        "name": "snyk-webhook-handler",
        "version": "1.0.0",
        "description": "Snyk to Slack Webhook Integration",
        "main": "index.js",
        "scripts": {
          "test": "echo \"Error: no test specified\" && exit 1"
        },
        "author": "",
        "license": "ISC",
        "dependencies": {
          "axios": "^1.1.3",
          "crypto": "^1.0.1"
        }
      }
    2. index.js

      const crypto = require('crypto')
      const axios = require('axios')
      
      let slackWebhookUrl = '<your_slackWebhookUrl_here>' // adjust
      
      //customised messaging to Slack with issue information, modify as needed
      async function messageSlack(
        message,
        snykProjectUrl,
        snykProjectName,
        snykIssuePackage,
        snykIssueUrl,
        snykIssueId,
        severity,
        snykIssuePriority
      ) {
        //strings modified to avoid Axios/Slack errors
        snykProjectUrl = snykProjectUrl.replace(/['"]+/g, '')
        snykProjectName = snykProjectName.replace(/['"]+/g, '')
        snykIssueUrl = snykIssueUrl.replace(/['"]+/g, '')
        snykIssueId = snykIssueId.replace(/['"]+/g, '')
        snykIssuePackage = snykIssuePackage.replace(/['"]+/g, '')
        severity = severity.replace(/['"]+/g, '')
      
        //construct message
        let payload = {
          text: `${message}`,
          blocks: [
            {
              type: 'header',
              text: {
                type: 'plain_text',
                text: `${message}`,
              },
            },
            {
              type: 'section',
              text: {
                type: 'mrkdwn',
                text: `Snyk has found a new vulnerability in the project:\n*<${snykProjectUrl}|${snykProjectName}>*`,
              },
            },
            {
              type: 'divider',
            },
            {
              type: 'section',
              fields: [
                {
                  type: 'mrkdwn',
                  text: `*Package name:*

${snykIssuePackage}, }, { type: 'mrkdwn', text: Vulnerability: <${snykIssueUrl}|${snykIssueId}>, }, { type: 'mrkdwn', text: Severity: ${severity}, }, { type: 'mrkdwn', text: Priority Score: ${snykIssuePriority}`, }, ], }, { type: 'actions', elements: [ { type: 'button', text: { type: 'plain_text', text: 'View in Snyk', }, style: 'primary', url: snykProjectUrl, value: 'browseUrl', }, ], }, ], }

2. 터미널에서 다음 명령을 사용합니다.

  • cd /path/to/snyk/folder (두 파일을 저장한 폴더로 이동)

  • npm install (package.json 파일을 기반으로 종속성 설치)

  • cd .. (이전 폴더로 돌아가기)

  • zip -r snyk.zip /path/to/snyk/folder (Snyk을 AWS Lambda에 업로드할 수 있는 zip 파일로 압축)

AWS Lambda 함수를 생성하려면 다음 단계를 따르십시오.

  1. AWS 콘솔로 이동합니다.

  2. Lambda로 이동합니다.

  3. Create function을 클릭합니다.

  4. Runtime으로 Node.js 16.x를 선택합니다.

  5. ArchitectureX86_64를 선택합니다.

  6. API Gateway를 통해 Lambda 함수를 게시하는 경우, AWS API Gateway와 상호 작용할 수 있도록 기본 정책인 AmazonAPIGatewayInvokeFullAccess가 포함된 역할을 추가하거나 생성합니다.

  7. AWS 콘솔 화면에 다음 항목들이 표시되는지 확인합니다.

    Lambda 함수 생성을 위한 입력 항목이 포함된 AWS 콘솔
  8. Create Function을 클릭하고 함수가 준비되면 Upload from .zip file을 클릭합니다.

  9. 입력한 코드가 Code Source에 표시되는지 확인합니다.

    AWS 코드 소스 표시
  10. 코드에서 slackWebhookUrl을 본인의 Slack 웹훅 URL에 맞게 수정합니다.

  11. 붙여넣은 스크립트에 대한 자세한 내용은 AWS Lambda 스크립트 구성을 참조하십시오.

Last updated