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機能を持たないため、このようなアーキテクチャを活用することで、自動化処理を実現できます。
この記事がどなたかの参考になれば幸いです。






