Backlog GitでSnykスキャンを自動実行してSlackに通知してみた
ゲームソリューション部の えがわ です。
本日はSnykのセキュリティスキャンをBacklogのGit(以下Backlog Git)のリポジトリに対して実行してみます。
背景
Snykはコードの脆弱性を検出するためのツールですが、BacklogのGitリポジトリに対しては以下のような課題があります。
- Backlog GitはSnykの公式インテグレーションに対応していない
- Backlog GitにはCI/CDの機能が備わっていない
そこで今回は、BacklogのWebhook機能を利用して、AWSでSnykスキャンを自動実行する仕組みを構築します。
ついでにスキャン結果をSlackに通知してみます。
構成図

BacklogからのWebhookを受け取り、API Gateway -> Lambda -> CodeBuildの流れでSnykスキャンを実行します。
API GatewayにはBacklogからのIPリストを設定し制限しています。
また、CodeBuildの完了後はEventBridge -> Lambda -> SNS -> Amazon Q Developer -> Slackの流れでスキャン結果の通知も行います。
リポジトリ
構築に使用したTerraformコードは以下のリポジトリで公開しています。
対応手順
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の個人設定から「公開鍵」を選択し、作成した公開鍵を登録します。

Terraformの設定
terraform.tfvars.exampleファイルをコピーしてterraform.tfvarsを作成し、環境に合わせて設定します。
cp terraform.tfvars.example terraform.tfvars GitリポジトリのURLとSnykの組織IDを設定する必要があります。
git_repo_urlにはBacklog GitリポジトリのSSH URLを指定します。

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

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に登録します。

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

以下でも設定できます。
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を設定します。

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


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

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

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

これで準備は整いました。
動作確認
リポジトリにコードをプッシュして、CodeBuildが実行されることを確認します。

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

Snyk Web UI
SnykのWeb UIにアクセスし、スキャン結果を確認します。
プロジェクト一覧から該当リポジトリを選択すると、検出された脆弱性の詳細を確認できます。


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のリンクを含んでいますので、マネジメントコンソールからダウンロードして確認することができます。

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

さいごに
BacklogのWebhook機能とAWSサービスを組み合わせることで、SnykによるセキュリティスキャンをBacklog Gitリポジトリに対して実行する仕組みを構築しました。
BacklogはCI/CD機能を持たないため、このようなアーキテクチャを活用することで、自動化処理を実現できます。
この記事がどなたかの参考になれば幸いです。






