ChatOps ソリューションをデプロイして、チャットアプリケーションのカスタムアクションと CloudFormation で Amazon Q Developer を使用して SAST スキャン結果を管理する
Amazon Web Services、Anand Bukkapatnam Tirumala
概要
このパターンは、チャットアプリケーションで Amazon Q Developer を使用して、SonarQube を通じて報告された静的アプリケーションセキュリティテスト (SAST) のスキャン障害の管理を合理化する包括的なソリューションを示しています。この革新的なアプローチは、カスタムアクションと通知を会話型インターフェイスに統合し、開発チーム内での効率的な共同作業と意思決定プロセスを可能にします。
今日のペースの速いソフトウェア開発環境では、SAST スキャン結果を効率的に管理することは、コードの品質とセキュリティを維持する上で不可欠です。しかし、多くの組織は次のような大きな課題に直面しています。
非効率的な通知システムによる重大な脆弱性の認識の遅延
分断された承認ワークフローによる時間のかかる意思決定プロセス
SAST スキャン障害に対する即時の実用的な対応の欠如
セキュリティ検出結果に関する断片化されたコミュニケーションとコラボレーション
セキュリティツールに関する、時間がかかり、エラーが発生しやすい手動インフラストラクチャ設定
これらの問題は、多くの場合、セキュリティリスクの増加、リリースの遅延、チームの生産性の低下につながります。これらの課題に効果的に対処するには、SAST の結果管理を合理化し、チームのコラボレーションを強化し、インフラストラクチャの割り当てを自動化できるソリューションが必要です。
このソリューションの主な機能は次のとおりです。
カスタマイズされた通知 – リアルタイムの警告と通知はチームチャットチャネルに直接配信されるため、SAST スキャンの脆弱性や障害に対する迅速な認識とアクションが保証されます。
会話による承認 – 利害関係者は、チャットインターフェイス内で途切れなく SAST スキャン結果の承認ワークフローを開始および完了できるため、意思決定プロセスが加速されます。
カスタムアクション – チームは、品質ゲートの障害に対する E メールメッセージの自動トリガー、セキュリティ問題への応答性の向上など、SAST スキャンの結果に基づいてカスタムアクションを定義して実行できます。
一元化されたコラボレーション – SAST スキャン関連の議論、決定、アクションはすべて統一されたチャット環境内に保持されるため、チームメンバー間のコラボレーションと知識共有が向上します。
Infrastructure as Code (IaC) – ソリューション全体が AWS CloudFormation テンプレートでラップされているため、手動設定エラーを減らしながら、より迅速で信頼性の高いインフラストラクチャ割り当てが可能になります。
前提条件と制限
前提条件
アクティブな AWS アカウント。
「ツール」にリストされている AWS のサービスに関連付けられたリソースを作成および管理するためのアクセス許可を持つ AWS Identity and Access Management (IAM) ロール。
Slack ワークスペース。
必要な Slack ワークスペースにプラグインとして追加されたチャットアプリケーションの Amazon Q Developer。詳細については、Slack ドキュメントの「Slack ワークスペースにアプリを追加する
」を参照してください。登録に成功したら、AWS マネジメントコンソールに示される Slack ワークスペース ID を書き留めます。 CloudFormation コンソールですぐに入力できるよう準備されたワークスペース ID と、チャットアプリケーションクライアントで設定された Amazon Q Developer。手順については、「Amazon Q Developer in chat applications Administrator Guide」の「Configure a Slack client」を参照してください。
承認 E メールメッセージを送信するために Amazon Simple Email Service (Amazon SES) で作成および検証される送信元 E メールアカウント。セットアップ手順については、「Amazon Simple Email Service Developer Guide」の「Creating and verifying email identities」を参照してください。
承認通知を受信するための送信先 E メールアドレス。このアドレスは、共有受信トレイまたは特定のチームの配布グループにすることができます。
AWS アカウントからアクセスできる稼働中の SonarQube インスタンス。詳細については「SonarQube installation instructions
」を参照してください。 パイプラインを介してプロジェクトをトリガーおよび作成するためのアクセス許可を持つ SonarQube ユーザートークン
。
機能制限
カスタムアクションボタンの作成は、このソリューションでは手動プロセスです。
一部の AWS のサービスは、すべての AWS リージョンで利用できるわけではありません。各リージョンで利用できるサービスの詳細は、「AWS のサービス by Region
」をご確認ください。特定のエンドポイントについては、「Service endpoints and quotas」を参照して、サービスのリンクを選択します。
アーキテクチャ
次の図表は、このパターンのアプリケーションのワークフローとアーキテクチャコンポーネントを示しています。

この図は、自動コード品質保証ワークフローを示しています。
コードの準備とアップロード:
開発者はコードベースを .zip ファイルに圧縮します。
開発者は、指定された Amazon Simple Storage Service (Amazon S3) バケットに手動で .zip ファイルをアップロードします。
Amazon S3 イベントトリガーと AWS Step Functions オーケストレーション:
Amazon S3 アップロードイベントは Step Functions ワークフローの実行を開始します。
Step Functions は、SonarQube を使用して SAST スキャンをオーケストレーションします。
ワークフローは AWS CodeBuild ジョブのステータスをモニタリングして、次のアクションを決定します。CodeBuild が成功すると (品質ゲート通過)、ワークフローは終了します。CodeBuild が失敗すると、診断のために AWS Lambda 関数が呼び出されます。詳細については、このセクションの後半にある「AWS Step Functions のロジック」を参照してください。
AWS CodeBuild 実行:
CodeBuild ジョブは、アップロードされたコードベースで SonarQube スキャンを実行します。
スキャンアーティファクトは、監査と分析のために別の Amazon S3 バケットに保存されます。
障害分析 (Lambda 関数):
CodeBuild が失敗すると、
CheckBuildStatusLambda 関数の実行が開始されます。CodeBuild が成功すると、プロセスは終了し、それ以上のアクションは必要ありません。
Lambda 関数が障害の原因を分析 (品質ゲートの障害またはその他の問題)
CheckBuildStatus関数は、詳細な障害情報を含むカスタムペイロードを作成します。CheckBuildStatus関数は、カスタムペイロードを Amazon Simple Notification Service (Amazon SNS) トピックに発行します。
通知システム:
Amazon SNS は、Slack 統合用のチャットアプリケーションでペイロードを Amazon Q Developer に転送します。
Slack 統合:
チャットアプリケーションの Amazon Q Developer は、指定された Slack チャンネルに通知を投稿します。
承認プロセス:
承認者は、Slack 通知で障害の詳細を確認します。
承認者は、Slack の [承認] ボタンを使用して承認を開始できます。
承認ハンドラー:
承認 Lambda 関数は、Slack からの承認アクションを処理します。
承認関数は、カスタムメッセージを Amazon SES に発行します。
生成されたメッセージ:
承認関数は、開発者への通知用のカスタムメッセージを生成します。
開発者への通知:
Amazon SES は、次のステップまたは必要なアクションを含む E メールメッセージを開発者に送信します。
このワークフローは、手動コードアップロードと自動品質チェックを組み合わせて、Slack を通じて即座にフィードバックを提供し、必要に応じて人間の介入を可能にし、堅牢で柔軟なコードレビュープロセスを確実にします。
AWS Step Functions のロジック
前のアーキテクチャ図に示すように、SonarQube の品質ゲート通過が失敗すると、ワークフローは CheckBuildStatus Lambda 関数に移ります。CheckBuildStatus 関数は、Slack チャンネルで通知をトリガーします。各通知には、次に実行すべきステップに関する情報が含まれています。次に示すのが通知のタイプです。
アプリケーションがコードセキュリティスキャンで不合格だった – アップロードされたコードが SonarQube セキュリティスキャンに合格しなかった場合、ユーザーはこの通知を受け取ります。ユーザーは [APPROVE] を選択してビルドを受け入れることができます。しかし、この通知は、潜在的なコードの品質問題とセキュリティリスクに注意するようユーザーに忠告します。通知には、次の詳細が含まれます。
Next steps: Error: Quality gate status: FAILED – 指定された URL に詳細が表示されます。
指定された URL でドキュメントに記載されている脆弱性の優先順位付けをします。
CodeBuild の詳細は、指定された URL で示される場所にあります。
アプリケーションスキャンパイプラインが他の理由で失敗した – ユーザーは、コードセキュリティスキャンの失敗以外の理由でパイプラインが失敗したときにこの通知を受け取ります。通知には、次の詳細が含まれます。
次のステップについては、さらなるトラブルシューティング用のリンク先を参照してください。
Slack チャンネルに表示される通知のスクリーンショットを表示するには、chatops-slack GitHub リポジトリのアセットフォルダ
次の図は、品質ゲート通過に失敗した後の Step Functions ステップステータスの例を示しています。

ツール
AWS のサービス
チャットアプリケーションの Amazon Q Developer を使用すると、Amazon Chime、Microsoft Teams、Slack チャットチャンネルを使用して、AWS アプリケーションの運用イベントをモニタリングして対応できます。サポート終了通知: 2026 年 2 月 20 日に、AWS は Amazon Chime サービスのサポートを終了します。2026 年 2 月 20 日以降、Amazon Chime コンソールまたは Amazon Chime アプリケーションリソースにアクセスできなくなります。詳細については、こちらのブログ記事
をご覧ください。これは Amazon Chime SDK サービス の可用性には影響しません。 AWS CloudFormation を使用すると、AWS リソースを設定し、迅速かつ一貫した割り当てを行い、AWS アカウントと AWS リージョンをまたいでライフサイクル全体を通じたリソース管理ができます。
AWS CodeBuild は完全マネージド型の構築サービスです。ソースコードのコンパイル、ユニットテストの実行、すぐにデプロイできるアーティファクトの生成を行います。
「AWS Identity and Access Management (IAM)」では、リソースの使用を認証、許可されるユーザーを制御することで、AWSリソースへのアクセスを安全に管理できます。
AWS Key Management Service (AWS KMS) は、データの保護に役立つ暗号化キーの作成および管理を支援します。
AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
AWS Secrets Manager を使用すると、コード内のハードコードされた認証情報 (パスワードを含む) を Secrets Manager への API コールで置き換えて、プログラムでシークレットを取得することができます。
Amazon Simple Email Service (Amazon SES) は、独自の E メールアドレスとドメインを使用して E メールを送受信するのに役立ちます。
「Amazon Simple Notification Service (Amazon SNS)」は、ウェブサーバーやメールアドレスなど、パブリッシャーとクライアント間のメッセージの交換を調整および管理するのに役立ちます。
Amazon Simple Storage Service (Amazon S3) は、量にかかわらず、データを保存、保護、取得する上で役立つクラウドベースのオブジェクトストレージサービスです。
AWS Step Functions は、AWS Lambda 関数と他の AWS のサービスを組み合わせてビジネスクリティカルなアプリケーションを構築できるサーバーレスのオーケストレーションサービスです。
その他のツール
コードリポジトリ
このパターンのコードは chatops-slack
ベストプラクティス
CloudFormation スタック管理 – CloudFormation スタックの実行中に障害が発生した場合は、障害が発生したスタックを削除することを推奨します。次に、正しいパラメータ値を使用して再作成します。このアプローチは、クリーンなデプロイを支援し、潜在的な競合や一部だけ実装されることを回避するのに役立ちます。
共有受信トレイ E メール設定 –
SharedInboxEmailパラメータを設定するときは、関連するすべての開発者がアクセスできる共通の配布グループを使用します。このアプローチは透明性を促進し、関連するチームメンバーへの重要な通知に役立ちます。本番承認ワークフロー – 本番環境では、ビルド承認に使用される Slack チャンネルへのアクセスを制限します。指定された承認者のみがこのチャンネルのメンバーである必要があります。この習慣は、明確な責任の連鎖を維持し、重要な変更を承認できるユーザーを制限することでセキュリティを強化します。
IAM アクセス権限 – 最小特権の原則に従い、タスクの実行に必要最小限の権限を付与します。詳細については、IAM ドキュメントの「最小特権の付与」と「セキュリティのベストプラクティス」を参照してください。
エピック
| タスク | 説明 | 必要なスキル |
|---|---|---|
リポジトリをクローン作成します。 | このパターンの chatops-slack
| AWS DevOps、ビルドリード、DevOps エンジニア、クラウド管理者 |
Lambda コードを含む .zip ファイルを作成する。 |
| AWS DevOps、ビルドリード、DevOps エンジニア、クラウド管理者 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
|
| AWS 管理者、AWS DevOps、ビルドリード、DevOps エンジニア |
.zip ファイルを Amazon S3 バケットにアップロードする。 | 前に作成した | AWS DevOps、ビルドリード、DevOps エンジニア、AWS システム管理者 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
|
| AWS DevOps、AWS システム管理者、DevOps エンジニア、ビルドリード |
通知設定をテストする。 | 通知設定をテストするには、次の手順を実施します。
テストメッセージが正常に配信されると、Slack チャンネルに通知が表示されます。詳細については、「Amazon Q Developer in chat applications Administrator Guide」の「Test notifications from AWS のサービス to Slack」を参照してください。 | AWS DevOps、AWS システム管理者、DevOps エンジニア、ビルドリード |
| タスク | 説明 | 必要なスキル |
|---|---|---|
カスタム Lambda アクションを設定する。 | カスタム AWS Lambda アクションを設定するには、次の手順を実行します。
| AWS 管理者、AWS DevOps、ビルドリード、DevOps エンジニア、Slack 管理者 |
承認フローを検証する。 | 承認フローが期待どおりに機能することを検証するには、Slack の [Approve] ボタンを選択します。 承認 E メールが正常に送信されたことを示す確認文字列の通知が、Slackbot からメッセージスレッドに送信されるはずです。 | AWS 管理者、AWS DevOps、DevOps エンジニア、Slack 管理者 |
トラブルシューティング
| 問題 | ソリューション |
|---|---|
Slack の設定ミス | Slack の設定ミスに関連する問題のトラブルシューティングについては、「Amazon Q Developer in chat applications Administrator Guide」の「Troubleshooting Amazon Q Developer」を参照してください。 |
他の理由でのスキャン失敗 | このエラーは、コードビルドタスクが失敗したことを意味します。この問題をトラブルシューティングするには、メッセージ内のリンクで示される場所に移動します。コードビルドタスクの失敗には、次の原因が考えられます。
|
関連リソース
AWS ドキュメント
その他のリソース
Slack ワークスペースにアプリを追加する
(Slack ドキュメント) Generating and using tokens
(SonarQube ドキュメント) Introduction to the server installation
(SonarQube ドキュメント)
追加情報
このソリューションは、リリース管理の目的における、チャットアプリケーションの Amazon Q Developer のカスタムアクションに重点を置いています。しかし、特定のユースケースに合わせて Lambda コードを変更し、それを活用することで、ソリューションを再利用できます。
CloudFormation スタックファイルのパラメータ
次の表は、CloudFormation スタックファイル pre-requisite.yml のパラメータとその説明を示しています。
キー | 説明 |
|---|---|
| CloudFormation スタックの名前。 |
| Lambda コードをアップロードした Amazon S3 バケットの名前。名前はグローバルに一意である必要があります。 |
| 「前提条件」で説明されている SonarQube ユーザートークン。 |
次の表は、CloudFormation スタックファイル app-security.yml のパラメータとその説明を示しています。
キー | 説明 |
|---|---|
| このスタックで作成された IAM ロールと Lambda 関数で使用される AWS KMS key Amazon リソースネーム (ARN)。 |
| このスタックで作成された Amazon SNS トピックで使用される AWS KMS key ID。 |
| アプリケーションスキャンパイプラインをデプロイするクライアント環境の名前。許可された値のドロップダウンリストから環境名を選択します。 |
|
|
| 「前提条件」で説明されている Amazon SES に登録された E メール ID の名前。この ID は送信元の E メールアドレスです。 |
| スキャン通知の送信先 E メールアドレス。 |
| 通知を送信する Slack チャンネルのチャンネル ID。チャンネル ID を見つけるには、Slack アプリの [Channel Details] でチャンネル名を右クリックします。チャンネル ID は下部にあります。 |
| 「前提条件」で説明されている Slack ワークスペース ID。Slack ワークスペース ID を見つけるには、AWS マネジメントコンソールにサインインし、チャットアプリケーションコンソールで Amazon Q Developer を開き、[設定済みクライアント]、[Slack]、[WorkspaceID] を選択します。 |
| CloudFormation スタックの名前。 |
|
|
|
|
|
|