ChatOps ソリューションをデプロイして、チャットアプリケーションのカスタムアクションと CloudFormation で Amazon Q Developer を使用して SAST スキャン結果を管理する - AWS 規範的ガイダンス

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」を参照して、サービスのリンクを選択します。

アーキテクチャ

次の図表は、このパターンのアプリケーションのワークフローとアーキテクチャコンポーネントを示しています。

Amazon Q Developer を使用したリリース管理用の自動コード品質保証をデプロイするワークフロー。

この図は、自動コード品質保証ワークフローを示しています。

  1. コードの準備とアップロード:

    • 開発者はコードベースを .zip ファイルに圧縮します。

    • 開発者は、指定された Amazon Simple Storage Service (Amazon S3) バケットに手動で .zip ファイルをアップロードします。

  2. Amazon S3 イベントトリガーと AWS Step Functions オーケストレーション:

    • Amazon S3 アップロードイベントは Step Functions ワークフローの実行を開始します。

    • Step Functions は、SonarQube を使用して SAST スキャンをオーケストレーションします。

    • ワークフローは AWS CodeBuild ジョブのステータスをモニタリングして、次のアクションを決定します。CodeBuild が成功すると (品質ゲート通過)、ワークフローは終了します。CodeBuild が失敗すると、診断のために AWS Lambda 関数が呼び出されます。詳細については、このセクションの後半にある「AWS Step Functions のロジック」を参照してください。

  3. AWS CodeBuild 実行:

    • CodeBuild ジョブは、アップロードされたコードベースで SonarQube スキャンを実行します。

    • スキャンアーティファクトは、監査と分析のために別の Amazon S3 バケットに保存されます。

  4. 障害分析 (Lambda 関数):

    • CodeBuild が失敗すると、CheckBuildStatus Lambda 関数の実行が開始されます。

    • CodeBuild が成功すると、プロセスは終了し、それ以上のアクションは必要ありません。

  5. Lambda 関数が障害の原因を分析 (品質ゲートの障害またはその他の問題)

    • CheckBuildStatus 関数は、詳細な障害情報を含むカスタムペイロードを作成します。

    • CheckBuildStatus 関数は、カスタムペイロードを Amazon Simple Notification Service (Amazon SNS) トピックに発行します。

  6. 通知システム:

    • Amazon SNS は、Slack 統合用のチャットアプリケーションでペイロードを Amazon Q Developer に転送します。

  7. Slack 統合:

    • チャットアプリケーションの Amazon Q Developer は、指定された Slack チャンネルに通知を投稿します。

  8. 承認プロセス:

    • 承認者は、Slack 通知で障害の詳細を確認します。

    • 承認者は、Slack の [承認] ボタンを使用して承認を開始できます。

  9. 承認ハンドラー:

    • 承認 Lambda 関数は、Slack からの承認アクションを処理します。

    • 承認関数は、カスタムメッセージを Amazon SES に発行します。

  10. 生成されたメッセージ:

    • 承認関数は、開発者への通知用のカスタムメッセージを生成します。

  11. 開発者への通知:

    • 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 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 のサービスを組み合わせてビジネスクリティカルなアプリケーションを構築できるサーバーレスのオーケストレーションサービスです。

その他のツール

  • Salesforce の製品である Slack は、チャットと動画による共同作業を可能にし、ノーコードでプロセスを自動化し、情報共有に対応する AI を活用した会話型プラットフォームです。

  • SonarQube は、30 を超える言語、フレームワーク、IaC プラットフォームでコーディングの問題を検出するように設計されたオンプレミスの分析ツールです。

コードリポジトリ

このパターンのコードは chatops-slack GitHub リポジトリから入手可能です。

ベストプラクティス

  • CloudFormation スタック管理 – CloudFormation スタックの実行中に障害が発生した場合は、障害が発生したスタックを削除することを推奨します。次に、正しいパラメータ値を使用して再作成します。このアプローチは、クリーンなデプロイを支援し、潜在的な競合や一部だけ実装されることを回避するのに役立ちます。

  • 共有受信トレイ E メール設定SharedInboxEmail パラメータを設定するときは、関連するすべての開発者がアクセスできる共通の配布グループを使用します。このアプローチは透明性を促進し、関連するチームメンバーへの重要な通知に役立ちます。

  • 本番承認ワークフロー – 本番環境では、ビルド承認に使用される Slack チャンネルへのアクセスを制限します。指定された承認者のみがこのチャンネルのメンバーである必要があります。この習慣は、明確な責任の連鎖を維持し、重要な変更を承認できるユーザーを制限することでセキュリティを強化します。

  • IAM アクセス権限 – 最小特権の原則に従い、タスクの実行に必要最小限の権限を付与します。詳細については、IAM ドキュメントの「最小特権の付与」と「セキュリティのベストプラクティス」を参照してください。

エピック

タスク説明必要なスキル

リポジトリをクローン作成します。

このパターンの chatops-slack リポジトリを複製するには、次のコマンドを使用します。

git clone "git@github.com:aws-samples/chatops-slack.git"

AWS DevOps、ビルドリード、DevOps エンジニア、クラウド管理者

Lambda コードを含む .zip ファイルを作成する。

CheckBuildStatus および ApprovalEmail 機能の AWS Lambda 関数コードの .zip ファイルを作成します。notification.zipapproval.zip を作成するには、次のコマンドを使用します。

cd chatops-slack/src
chmod -R 775 *
zip -r approval.zip approval
zip -r notification.zip notification
AWS DevOps、ビルドリード、DevOps エンジニア、クラウド管理者
タスク説明必要なスキル

pre-requisite.yml スタックファイルを実行する。

pre-requisite.yml CloudFormation スタックファイルは、app-security.yml スタックファイルを実行する前に必要な初期リソースをデプロイします。pre-requisite.yml ファイルを実行するには、次の手順を実施します。

  1. AWS マネジメントコンソールにサインインして、CloudFormation コンソールを開きます。[スタックの作成] を選択後、[新しいリソースを使用 (標準)] を選択します。

  2. [スタックの作成] ページで、[既存のテンプレートを選択][テンプレートファイルのアップロード] を選択します。次に、[ファイルの選択] を選択後、pre-requisite.yml を選択します。[次へ] を選択します。

  3. [スタックの詳細を指定] ページで、「追加情報」の説明に従ってパラメータの値を入力します。その後、[次へ] を選択します。

  4. [スタックオプションの設定] ページで、「前提条件」の説明に従って、リソースを作成するための IAM ロールを選択します。その後、[次へ] を選択します。

  5. [確認して作成] ページで、[送信] を選択します。

  6. スタックの詳細ページで、[リソース][出力] タブを選択します。次のステップで使用される S3LambdaCKMSKeyArn、および CKMSKeyId パラメータの値を書き留めます。

AWS 管理者、AWS DevOps、ビルドリード、DevOps エンジニア

.zip ファイルを Amazon S3 バケットにアップロードする。

前に作成した notification.zip および approval.zip ファイルを、S3LambdaBucket という名前の Amazon S3 バケットにアップロードします。app-security.yml CloudFormation スタックファイルは、S3LambdaBucket を使用して Lambda 関数を割り当てます。

AWS DevOps、ビルドリード、DevOps エンジニア、AWS システム管理者
タスク説明必要なスキル

app-security.yml スタックファイルを実行する。

app-security.yml スタックファイルは、通知と承認システムの残りのインフラストラクチャをデプロイします。app-security.yml ファイルを実行するには、次の手順を実施します。

  1. AWS マネジメントコンソールにサインインして、CloudFormation コンソールを開きます。[スタックの作成] を選択後、[新しいリソースを使用 (標準)] を選択します。

  2. [スタックの作成] ページで、[既存のテンプレートを選択][テンプレートファイルのアップロード] を選択します。次に、[ファイルの選択] を選択し、app-security.yml を選択します。[次へ] を選択します。

  3. [スタックの詳細を指定] ページで、「追加情報」の説明に従ってパラメータの値を入力します。その後、[次へ] を選択します。

  4. [スタックオプションの設定] ページで、「前提条件」の説明に従って、リソースを作成するための IAM ロールを選択します。その後、[次へ] を選択します。

  5. [確認して作成] ページで、[送信] を選択します。

AWS DevOps、AWS システム管理者、DevOps エンジニア、ビルドリード

通知設定をテストする。

通知設定をテストするには、次の手順を実施します。

  1. [Amazon SNS コンソール] を開きます。左のナビゲーションペインで、[トピック] を選択します。

  2. LambdaToAWSSlackChatbot で終わるトピック名を選択します。

  3. トピックの詳細ページで、[メッセージの発行] を選択します。

  4. [トピックへのメッセージの発行] ページで、[エンドポイントに送信するメッセージ本文] に次のように入力します。

    { "version": "1.0", "source": "custom", "content": { "description": ":warning: This is a test notification" } }
  5. [メッセージの発行] を選択します。

テストメッセージが正常に配信されると、Slack チャンネルに通知が表示されます。詳細については、「Amazon Q Developer in chat applications Administrator Guide」の「Test notifications from AWS のサービス to Slack」を参照してください。

AWS DevOps、AWS システム管理者、DevOps エンジニア、ビルドリード
タスク説明必要なスキル

カスタム Lambda アクションを設定する。

カスタム AWS Lambda アクションを設定するには、次の手順を実行します。

  1. Slack チャンネルの配信通知の下部にある縦の省略記号ボタンを選択します。

  2. [Manage actions] で、[Create] を選択します。

  3. カスタムアクション名を入力します (例えば Approve)。この名前は、カスタムアクションの一意の識別子です。

  4. カスタムアクションボタンの名前を入力します (例えば Approve)。この名前は、通知上のボタンに表示されます。この名前は 20 文字以下で、絵文字を入れることができます。

  5. [Custom action type] で、[Lambda action] を選択します。

  6. [Next] を選択します。

  7. このアクションをデプロイする対象の AWS アカウントと AWS リージョンを選択します。

  8. [Load Lambdas] を選択します。

  9. [Define Lambda Function] で、ApprovalEmailLambda で終わる Lambda 関数を選択します。その後、[Next] を選択します。

  10. [Approve] ボタンを作成するには、[Display criteria] ページで [Save] を選択します。

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」を参照してください。

他の理由でのスキャン失敗

このエラーは、コードビルドタスクが失敗したことを意味します。この問題をトラブルシューティングするには、メッセージ内のリンクで示される場所に移動します。コードビルドタスクの失敗には、次の原因が考えられます。

  • アプリケーションが正しくパッケージ化されていない。sonar-scanner コマンドで sonar.project.env.properties ファイルが見つからない。

  • SonarFileNameSonarFileDirectory、または SonarToken パラメータの値が正しくない。値を確認し、スタックファイルを再度実行します。

  • Sonar ホストに到達できない。

  • ログを使用してトラブルシューティングできるその他の問題。

関連リソース

AWS ドキュメント

その他のリソース

追加情報

このソリューションは、リリース管理の目的における、チャットアプリケーションの Amazon Q Developer のカスタムアクションに重点を置いています。しかし、特定のユースケースに合わせて Lambda コードを変更し、それを活用することで、ソリューションを再利用できます。

CloudFormation スタックファイルのパラメータ

次の表は、CloudFormation スタックファイル pre-requisite.yml のパラメータとその説明を示しています。

キー

説明

StackName

CloudFormation スタックの名前。

S3LambdaBucket

Lambda コードをアップロードした Amazon S3 バケットの名前。名前はグローバルに一意である必要があります。

SonarToken

前提条件」で説明されている SonarQube ユーザートークン。

次の表は、CloudFormation スタックファイル app-security.yml のパラメータとその説明を示しています。

キー

説明

CKMSKeyArn

このスタックで作成された IAM ロールと Lambda 関数で使用される AWS KMS key Amazon リソースネーム (ARN)。

CKMSKeyId

このスタックで作成された Amazon SNS トピックで使用される AWS KMS key ID。

EnvironmentType

アプリケーションスキャンパイプラインをデプロイするクライアント環境の名前。許可された値のドロップダウンリストから環境名を選択します。

S3LambdaBucket

approval.zipnotification.zip ファイルを含む、Amazon S3 バケットの名前。

SESEmail

前提条件」で説明されている Amazon SES に登録された E メール ID の名前。この ID は送信元の E メールアドレスです。

SharedInboxMail

スキャン通知の送信先 E メールアドレス。

SlackChannelId

通知を送信する Slack チャンネルのチャンネル ID。チャンネル ID を見つけるには、Slack アプリの [Channel Details] でチャンネル名を右クリックします。チャンネル ID は下部にあります。

SlackWorkspaceId

前提条件」で説明されている Slack ワークスペース ID。Slack ワークスペース ID を見つけるには、AWS マネジメントコンソールにサインインし、チャットアプリケーションコンソールで Amazon Q Developer を開き、[設定済みクライアント][Slack][WorkspaceID] を選択します。

StackName

CloudFormation スタックの名前。

SonarFileDirectory

sonar.project.<env>.properties ファイルを含むディレクトリ。

SonarFileName

sonar.project.<env>properties ファイルの名前。

SourceCodeZip

sonar.project.<env>properties ファイルとソースコードが含まれている .zip ファイルの名前。