Backlog GitでSnykスキャンを自動実行してSlackに通知してみた

Backlog GitでSnykスキャンを自動実行してSlackに通知してみた

2025.10.29

ゲームソリューション部の えがわ です。

本日はSnykのセキュリティスキャンをBacklogのGit(以下Backlog Git)のリポジトリに対して実行してみます。

背景

Snykはコードの脆弱性を検出するためのツールですが、BacklogのGitリポジトリに対しては以下のような課題があります。

  • Backlog GitはSnykの公式インテグレーションに対応していない
  • Backlog GitにはCI/CDの機能が備わっていない

そこで今回は、BacklogのWebhook機能を利用して、AWSでSnykスキャンを自動実行する仕組みを構築します。
ついでにスキャン結果をSlackに通知してみます。

構成図

backlog_git_snyk_cicd_09.png

BacklogからのWebhookを受け取り、API Gateway -> Lambda -> CodeBuildの流れでSnykスキャンを実行します。
API GatewayにはBacklogからのIPリストを設定し制限しています。

また、CodeBuildの完了後はEventBridge -> Lambda -> SNS -> Amazon Q Developer -> Slackの流れでスキャン結果の通知も行います。

リポジトリ

構築に使用したTerraformコードは以下のリポジトリで公開しています。

https://github.com/egawa-takeki/backlog-snyk-scan

対応手順

SSHキーの作成

CodeBuildがBacklog GitリポジトリにアクセスするためのSSHキーを作成します。

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_backlog -N ""

公開鍵を確認します。

cat ~/.ssh/id_rsa_backlog.pub

BacklogにSSHキーを登録

Backlogの個人設定から「公開鍵」を選択し、作成した公開鍵を登録します。

backlog_git_snyk_cicd_01.png

Terraformの設定

terraform.tfvars.exampleファイルをコピーしてterraform.tfvarsを作成し、環境に合わせて設定します。

cp terraform.tfvars.example terraform.tfvars

GitリポジトリのURLとSnykの組織IDを設定する必要があります。

git_repo_urlにはBacklog GitリポジトリのSSH URLを指定します。

backlog_git_snyk_cicd_03.png

snyk_org_idにはSnykの組織IDを設定します。
組織IDはSnykのウェブダッシュボードで確認できます。

backlog_git_snyk_cicd_05.png

Terraformの適用

terraform init
terraform plan
terraform apply

実行が完了すると、通知の実装方法及びWebhook URLが出力しています。

amazon_q_developer_setup_details = {
  "console_url" = "https://console.aws.amazon.com/chatbot/"
  "recommended_iam_role" = "ReadOnlyAccess"
  "region" = "us-east-1"
  "sns_topic_arn" = "arn:aws:sns:us-east-1:your-aws-account:backlog-snyk-cicd-snyk-notifications"
  "test_command" = "aws codebuild start-build --project-name backlog-snyk-cicd-snyk-scan"
}
api_gateway_id = "xxxxxxxxx"
codebuild_project_name = "backlog-snyk-cicd-snyk-scan"
eventbridge_rule_name = "backlog-snyk-cicd-codebuild-completion"
lambda_function_name = "backlog-snyk-cicd-webhook-handler"
notification_lambda_function_name = "backlog-snyk-cicd-notification-handler"
s3_bucket_name = "backlog-snyk-cicd-codebuild-artifacts-xxxxxxxxx"
setup_instructions = <<EOT
1. Update Snyk API token:
   aws ssm put-parameter --name "/backlog-snyk-cicd/snyk-api-token" --value "YOUR_SNYK_TOKEN" --type SecureString --overwrite

2. Update Backlog Git SSH private key:
   aws ssm put-parameter --name "/backlog-snyk-cicd/backlog-git-ssh-key" --value "$(cat ~/.ssh/id_rsa_backlog)" --type SecureString --overwrite

3. Configure Backlog webhook:
   URL: https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/webhook
   Method: POST
   Event: Push

4. Configure Amazon Q Developer for Slack notifications:
   a. Open Amazon Q Developer console: https://console.aws.amazon.com/chatbot/
   b. Click "Configure new client" → Select "Slack"
   c. Authorize your Slack workspace
   d. Create a channel configuration:
      - Channel name: Select your Slack channel
      - IAM Role: Create a new role or use existing (ReadOnlyAccess recommended)
      - SNS Topics: Add arn:aws:sns:us-east-1:your-aws-account:backlog-snyk-cicd-snyk-notifications
      - Region: us-east-1
   e. Save the configuration
   f. Test by running: aws codebuild start-build --project-name backlog-snyk-cicd-snyk-scan

EOT
sns_topic_arn = "arn:aws:sns:us-east-1:your-aws-account:backlog-snyk-cicd-snyk-notifications"
snyk_token_parameter_name = "/backlog-snyk-cicd/snyk-api-token"
webhook_url = "https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/webhook"

SSMパラメータストアへの登録

Terraformの実行後、SnykトークンとSSH秘密鍵をSSM Parameter Storeに登録します。

Snykトークンの登録

Snykのアカウント設定からAPIトークンを取得し、SSMに登録します。

backlog_git_snyk_cicd_06.png

マネジメントコンソールから設定してもよいですが、

backlog_git_snyk_cicd_02.png

以下でも設定できます。

aws ssm put-parameter \
  --name "/backlog-snyk-cicd/snyk-api-token" \
  --value "your-snyk-token" \
  --type "SecureString" \
  --overwrite

SSH秘密鍵の登録

aws ssm put-parameter \
  --name "/backlog-snyk-cicd/backlog-git-ssh-key" \
  --value "$(cat ~/.ssh/id_rsa_backlog)" \
  --type "SecureString" \
  --overwrite

Amazon Q Developer in chat applicationsの設定

Slackにメッセージ送信を行うため、Amazon Q Developer in chat applicationsを設定します。

backlog_git_snyk_cicd_11.png

AWSコンソールのAmazon Q Developer in chat applicationsページにアクセスし、Slackワークスペースを認証して設定を行います。

backlog_git_snyk_cicd_07.png

backlog_git_snyk_cicd_08.png

Slackの設定

Slackに通知を行うため、通知先のチャンネルにAmazon Qアプリケーションを追加します。

Slackのアプリ一覧からAmazon Qを検索し、

backlog_git_snyk_cicd_12.png

対象のチャンネルに追加します。

backlog_git_snyk_cicd_12.png

Backlog GitにWebhookを設定

Backlog Gitの設定からWebhook URLを設定します。

backlog_git_snyk_cicd_03.png

これで準備は整いました。

動作確認

リポジトリにコードをプッシュして、CodeBuildが実行されることを確認します。

backlog_git_snyk_cicd_04.png

Slack通知

Slack通知でサマリーを確認することができます。

backlog_git_snyk_cicd_13.png

Snyk Web UI

SnykのWeb UIにアクセスし、スキャン結果を確認します。

プロジェクト一覧から該当リポジトリを選択すると、検出された脆弱性の詳細を確認できます。

backlog_git_snyk_cicd_15.png

backlog_git_snyk_cicd_16.png

buildspecの以下の処理でWeb UIで確認できるようになります。

- echo "=== Sending results to Snyk Web UI ==="
- |
   snyk monitor \
      --project-name="${APP_DIR}" \
      --org="${SNYK_ORG:-default}" \
      --remote-repo-url="${REPO_PATH}/oss" \
      --target-reference="$(git rev-parse --short HEAD 2>/dev/null || echo 'unknown')" \
      || echo "Failed to send dependency scan to Snyk"

2025/10/10のアップデートでCodeも--reportオプションを付けることでWeb UIで確認できるようになりました。

- echo "=== Sending Code results to Snyk Web UI ==="
- |
   snyk code test --report \
      --org="${SNYK_ORG:-default}" \
      --project-name="${REPO_PATH}/code" \
      --target-name="${REPO_PATH}/code" \
      --target-reference="$(git rev-parse --short HEAD 2>/dev/null || echo 'unknown')" \
      || echo "Failed to send code scan to Snyk"

HTML

buildspecでは以下の処理でスキャン結果のHTMLをアーティファクトに含めています。

- echo "=== Generating HTML Reports ==="
- snyk-to-html -i snyk-opensource-report.json -o snyk-opensource-report.html || true
- snyk-to-html -i snyk-code-report.json -o snyk-code-report.html || true

Snykのスキャン結果をJSON形式で出力し、それをHTMLレポートに変換してS3バケットにアーティファクトとして保存しています。

Slack通知にはS3のリンクを含んでいますので、マネジメントコンソールからダウンロードして確認することができます。

backlog_git_snyk_cicd_14.png

CloudWatch Logs

CodeBuildのCloudwatch Logsでも確認できます。

backlog_git_snyk_cicd_17.png

さいごに

BacklogのWebhook機能とAWSサービスを組み合わせることで、SnykによるセキュリティスキャンをBacklog Gitリポジトリに対して実行する仕組みを構築しました。

BacklogはCI/CD機能を持たないため、このようなアーキテクチャを活用することで、自動化処理を実現できます。

この記事がどなたかの参考になれば幸いです。

この記事をシェアする

FacebookHatena blogX

関連記事