Kiro やその他のコーディングアシスタントで MCP サーバーを使用してリアルタイムのコーディングセキュリティ検証をデプロイする - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Kiro やその他のコーディングアシスタントで MCP サーバーを使用してリアルタイムのコーディングセキュリティ検証をデプロイする

Ivan Girardi と Iker Reina Fuente、Amazon Web Services

概要

このパターンでは、3 つの業界標準のセキュリティスキャンツールを統合して包括的なコードセキュリティ分析を提供するモデルコンテキストプロトコル (MCP) サーバーを実装する方法について説明します。サーバーは、AI コーディングアシスタント (Kiro、Amazon Q Developer、Cline など) がコードスニペットとInfrastructure as Code (IaC) 設定を自動的にスキャンできるようにします。これらのスキャンにより、コーディングアシスタントはセキュリティの脆弱性、設定ミス、コンプライアンス違反を特定するのに役立ちます。

何百万ものコードスニペットでトレーニングされた AI コードジェネレーターは、セキュリティの死角を作成します。そのトレーニングデータはどの程度安全ですか? このパターンは、コード生成中のリアルタイムのセキュリティ検証を提供し、デベロッパーがコード化する潜在的なセキュリティ問題を特定して理解するのに役立ちます。このアプローチは、開発者が直接的な脆弱性と依存関係から継承されたリスクの両方に対処するのに役立ちます。AI 効率とセキュリティコンプライアンスのギャップを埋めることで、このパターンは AI を活用した開発ツールを安全に導入するのに役立ちます。

このパターンは、組織が AI 支援のコーディングツールを使用して開発セキュリティプラクティスを強化し、複数のプログラミング言語とインフラストラクチャ定義にわたって継続的なセキュリティスキャン機能を提供するのに役立ちます。このソリューションは、次のツールの機能を組み合わせています。

  • Terraform、、Kubernetes マニフェストなどの IaC AWS CloudFormationファイルをスキャンするための Checkov

  • Python、JavaScript、Java などの複数のプログラミング言語を分析するための Semgrep

  • 特殊な Python セキュリティスキャン用の Bandit

このソリューションの主な機能は次のとおりです。

  • 新しいコードセグメントのデルタスキャンによる計算オーバーヘッドの削減

  • 分離されたセキュリティツール環境、クロスツールの汚染の防止

  • AI コーディングアシスタント (Kiro、Amazon Q Developer、Cline など) とのシームレスな統合

  • コード生成中のリアルタイムのセキュリティフィードバック

  • 組織コンプライアンスのためのカスタマイズ可能なスキャンルール

このパターンは、標準化されたレスポンス形式でセキュリティスキャン用の統合インターフェイスを提供するため、セキュリティチェックを開発ワークフローに統合することが容易になります。このパターンでは、Python と MCP フレームワークを使用して、自動化されたセキュリティフィードバックを提供します。このアプローチは、開発者が開発プロセスの早い段階でセキュリティ問題を特定して対処し、詳細な検出結果を通じてセキュリティのベストプラクティスを学ぶのに役立ちます。

前提条件と制限

前提条件

  • これらのコーディングアシスタントのいずれかを使用する場合、Kiro または Amazon Q Developer を使用するためのアクセス権 AWS アカウント を持つアクティブな 。

  • Python バージョン 3.10 以降がインストールされている

  • uv パッケージマネージャーのインストール

  • セキュリティスキャンのツールと概念に精通している

  • IaC とアプリケーションセキュリティの基本的な理解

制限事項

  • バンディットスキャンは Python ファイルのみに制限されます。

  • リアルタイムスキャンは、大規模なコードベースのパフォーマンスに影響を与える可能性があります。

  • ツール固有の制限は、サポートされているファイル形式と言語に基づいています。

  • セキュリティの検出結果を検証するには、手動によるレビューが必要です。

  • セキュリティスキャンの結果には、適切な解釈のためのセキュリティの専門知識が必要です。

  • 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「AWS サービス (リージョン別)」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択してください。

製品バージョン

  • Python バージョン 3.10 以降

  • Checkov バージョン 3.0.0 以降

  • Semgrep バージョン 1.45.0 以降

  • Bandit バージョン 1.7.5 以降

  • MCP[cli] バージョン 1.11.0 以降

  • Pydantic バージョン 1.10.0 以降

  • Loguru バージョン 0.6.0 以降

アーキテクチャ

このソリューション用のアーキテクチャを次の図に示します。

AI アシスタントはコードを MCP セキュリティスキャナーサーバーに送信して、特殊なスキャナーにルーティングします。スキャン結果は開発者に送信されます。

この図表は、次のワークフローを示しています:

  1. 開発者は AI アシスタント (Kiro、Cline、Amazon Q Developer、Roo Code など) を使用してコードを生成または分析します。AI アシスタントは、セキュリティスキャンのためにコードを送信します。

  2. MCP セキュリティスキャナーサーバーは、IaC ファイルの場合は Checkov、複数のプログラミング言語分析の場合は Semgrep、Python 固有のセキュリティスキャンの場合は Bandit などの適切な専用スキャナーにルーティングしてリクエストを処理します。

  3. セキュリティ検出結果、重要度レベル、詳細な説明、推奨される修正を含むスキャナーの結果は、AI アシスタントを通じて開発者に返送されます。

  4. 開発者がリアルタイムのセキュリティ検証を受ける継続的なフィードバックループが確立され、AI アシスタントによる自動修正が可能になり、開発中のセキュリティのベストプラクティスが促進されます。

このアーキテクチャは、以下の一般的なセキュリティリスクを軽減します。

  • コマンドインジェクション

  • プロンプトインジェクション

  • パストラバーサル

  • 依存関係攻撃

  • リソースの枯渇

このアーキテクチャは、以下のベストプラクティスを実装することで、これらの一般的なセキュリティリスクを軽減します。

  • ユーザーと AI モデルの入力はすべて一時ファイルに書き込まれます。

  • コマンドラインインターフェイス (CLI) コマンドへの直接入力は提供されません。

  • ファイルシステムへのアクセスは、一時ディレクトリとファイルのみに制限されます。

  • 一時ファイルは自動的にクリーンアップされます。

  • スキャンレスポンスはサニタイズされます。

  • プロセス機能を制限するプロセス分離が適用されます。

  • すべてのスキャンアクティビティがログに記録されます。

自動化とスケール

このパターンでは、次の機能による自動化がサポートされています。

  • 自動コードスキャンのための AI コーディングアシスタントとの統合

  • 自動処理のための標準化された API レスポンス

  • MCP 設定ファイルによる設定

  • 複数のファイルのバッチ処理のサポート

  • 複数のプログラミング言語と IaC 形式でのスケーラブルなスキャン

スキャンプロセスは、提供された API エンドポイントを使用して自動化できます。

  • scan_with_checkov IaC スキャン用

  • scan_with_semgrep 多言語コードスキャン用

  • scan_with_bandit Python 固有のスキャン用

  • get_supported_formats 形式検証用

スキャンツールを拡張する場合は、このセクションで前述した設計原則とベストプラクティスに従ってください。ベストプラクティスも参照してください。

ツール

AWS のサービス

  • Kiro は、デベロッパーと協力してプロンプトを詳細な仕様に変換し、作業コード、ドキュメント、テストに変換するエージェントコーディングサービスです。Kiro エージェントは、開発者が困難な問題を解決し、ドキュメントの生成や単体テストなどのタスクを自動化するのに役立ちます。

  • Amazon Q Developer は、生成 AI を活用した会話アシスタントであり、 AWS アプリケーションの理解、構築、拡張、運用に役立ちます。

その他のツール

  • Bandit は特殊な Python セキュリティスキャナーツールです。安全でない関数、ハードコードされたシークレット、インジェクションの脆弱性などの一般的な Python セキュリティの問題を検出します。Bandit は、詳細な信頼度と重要度の評価を提供します。

  • Checkov は、IaC のセキュリティとコンプライアンスの設定ミスをチェックする静的コード分析ツールです。さらに、Checkov はコンプライアンス違反とセキュリティのベストプラクティスを検出します。

  • Cline は、VS Code で実行される AI を活用したコーディングアシスタントです。

  • Loguru は Python 用のデータ検証ライブラリです。

  • Model Context Protocol (MCP) は、AI 支援開発ツールを構築するためのオープンソースフレームワークです。

  • Pydantic は Python 用のデータ検証ライブラリです。

  • Semgrep は、ソースコードでセキュリティの脆弱性とバグを分析します。複数のプログラミング言語をサポートしています。Semgrep は、セキュリティに焦点を当てたルールセットを使用して包括的な分析を行います。詳細な信頼度と重要度の評価を提供します。

コードリポジトリ

このパターンのコードは、GitHub MCP Security Scanner: Real-Time Protection for AI Code Assistants リポジトリで入手できます。リポジトリには、MCP サーバーの実装、Kiro、Amazon Q Developer、Cline などの MCP 設定の詳細、設定例、テストユーティリティが含まれます。

リポジトリ構造には以下が含まれます。

  • security_scanner_mcp_server/ - メインサーバーの実装

  • docs/ - ドキュメントとデモ資料

  • tests/ - テストファイル

  • mcp-config-example.json - MCP 設定の例

  • requirements.txt - プロジェクトの依存関係

ベストプラクティス

セキュリティスキャンの実装

  • セキュリティの検出結果を確認して、問題を検証し、優先順位を付けます。

  • スキャンツール (Checkov、Semgrep、Bandit) を最新バージョンに更新し続けます。

  • このパターンの MCP セキュリティツールは、他のセキュリティ対策やツールと組み合わせて使用します。

  • セキュリティルールセットとポリシーを定期的に更新します。

設定管理

  • 公式バージョン管理ソースの MCP 設定ファイルを使用します。

  • カスタムルールと設定を文書化します。

Integration

  • 開発サイクルの早い段階でセキュリティスキャンを統合します。

  • コミット前フックまたは継続的インテグレーションと継続的デプロイ (CI/CD) パイプラインで自動スキャンを設定します。

  • 環境に適した重要度のしきい値を設定します。

  • セキュリティの検出結果を処理するための明確な手順を確立します。

運用上の考慮事項

  • スキャンパフォーマンスとリソース使用量をモニタリングします。

  • 適切なエラー処理とログ記録を実装します。

  • カスタム設定のドキュメントを維持します。

  • セキュリティルールを確認および更新するプロセスを確立します。

また、次のベストプラクティスにも注意してください。

  • 常に特定のコンテキストでセキュリティ検出結果を検証します。

  • セキュリティツールと依存関係を最新の状態に保ちます。

  • 包括的なカバレッジを実現するには、複数のセキュリティツールを使用します。

  • 開発プロセスでセキュリティのベストプラクティスに従ってください。

エピック

タスク説明必要なスキル

MCP 設定を構成します。

Kiro の設定ファイルは、 (オプション 1) で設定ファイルを手動で検索するか、(オプション 2) で Kiro IDE を使用して編集できます。

  • (オプション 1) 次のように設定ファイルを手動で検索して編集します。

    • パス: .kiro/settings/mcp.json (ローカル) または ~/.kiro/settings/mcp.json (グローバル)

  • (オプション 2) Kiro IDE を使用して次のように設定ファイルを変更します。

    • 左側のナビゲーションメニューで Kiro 記号を選択します。

    • 「MCP SERVERS」セクションに移動します。

    • 設定を編集します。Kiro IDE で行われた変更は、 (ローカル) または .kiro/settings/mcp.json (~/.kiro/settings/mcp.jsonグローバル) のいずれかの設定ファイルに保存されます。

  • (両方のオプション) オプション 1 またはオプション 2 のいずれかを完了したら、セキュリティスキャナー設定 .kiro/settings/mcp.json (ローカル) または ~/.kiro/settings/mcp.json (グローバル) を追加します。

{ "mcpServers": { "security-scanner": { "command": "uvx", "args": [ "--from", "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main", "security_scanner_mcp_server" ], "env": { "FASTMCP_LOG_LEVEL": "ERROR" }, "disabled": false, "autoApprove": [] } } }
アプリ開発者
タスク説明必要なスキル

MCP 設定を構成します。

MCP 設定を手動で設定するには、次の手順を実行します。

  1. (グローバル) または ~/.aws/amazonq/mcp.json (.amazonq/mcp.jsonローカル) で MCP 設定ファイルを編集します。

  2. 次のセキュリティスキャナー設定 ~/.aws/amazonq/mcp.json (グローバル) または .amazonq/mcp.json (ローカル) を追加します。

{ "mcpServers": { "security-scanner": { "command": "uvx", "args": [ "--from", "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main", "security_scanner_mcp_server" ], "env": { "FASTMCP_LOG_LEVEL": "ERROR" } } } }
アプリ開発者
タスク説明必要なスキル

MCP 設定を構成します。

MCP 設定を手動で設定するには、次の手順を実行します。

  1. 拡張機能を選択して開き、MCP サーバーを選択します。

  2. Installed タブを選択し、Configure MCP Servers を選択してcline_mcp_settings.jsonファイルを開きます。

  3. 次のセキュリティスキャナー設定 を追加しますcline_mcp_settings.json

{ "mcpServers": { "security-scanner": { "command": "uvx", "args": [ "--from", "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main", "security_scanner_mcp_server" ], "env": { "FASTMCP_LOG_LEVEL": "ERROR" }, "disabled": false, "autoApprove": [] } } }
アプリ開発者
タスク説明必要なスキル

コード分析を実行します。

Python と Bandit を使用してコード分析を実行するには、次の手順を実行します。

  1. 次の内容bandit_test.pyで という名前の新しい Python ファイルを作成します。

    import pickle import yaml import subprocess from flask import Flask, request import hashlib app = Flask(__name__) @app.route("/unsafe_pickle", methods=["POST"]) def unsafe_pickle_usage(): data = request.get_data() return pickle.loads(data) @app.route("/command_injection", methods=["GET"]) def command_injection(): command = request.args.get("cmd") return subprocess.Popen(command, shell=True) def weak_crypto(): password = "secret_password" return hashlib.md5(password.encode()).hexdigest() PASSWORD = "super_secret_password123"
  2. コーディングアシスタントを開きます。チャットで次のアクションをリクエストします: 現在のスクリプトをスキャンして結果を知らせます。

アプリ開発者
タスク説明必要なスキル

コード分析を実行します。

Terraform と Checkov を使用してコード分析を実行するには、次の手順を実行します。

  1. 次の内容terraform_test.tfで という名前の新しい Terraform ファイルを作成します。

    resource "aws_s3_bucket" "insecure_bucket" { bucket = "my-insecure-bucket" acl = "public-read" } resource "aws_security_group" "wide_open" { name = "allow_all" description = "Allow all inbound traffic" ingress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } }
  2. コーディングアシスタントを開きます。チャットで次のアクションをリクエストします: 現在のスクリプトをスキャンして結果を表示します。

アプリ開発者
タスク説明必要なスキル

ターゲットスキャンを実行します。

ターゲットスキャンの実行に使用できるリクエストの例を次に示します。

  • 現在のプロジェクトをスキャンして結果を教えてください。

  • 現在のスクリプトの 6~10 行をスキャンします。

アプリ開発者

コード生成でセキュリティスキャンを使用します。

コード生成ループを使用してセキュリティ上の検出結果を解決するには、次のステップを使用します (この例では、コーディングアシスタントとして Kiro を使用します)。

  1. Kiro で、次のように尋ねます。Terraform で DynamoDB テーブルを作成し、セキュリティスキャナーでコードをスキャンします。

  2. Kiro で、生成されたコードとセキュリティスキャンの結果を確認し、セキュリティ検出結果を解決するコード生成ループに従います。

アプリデベロッパー

トラブルシューティング

問題ソリューション

環境設定の問題

  • Python バージョン 3.10 以降がインストールされていることを確認します。

  • uv パッケージマネージャーがインストールされていることを確認します。

スキャナーの問題

  • ファイル形式がサポートされていることを確認します。

  • ファイル構文が有効であることを確認します。

  • 適切なファイル拡張子が使用されていることを確認します。

  • スキャンタイムアウト設定を確認します。

統合の問題

  • MCP サーバーが実行されていることを確認します。

  • 設定ファイルが正しいことを確認します。

  • API エンドポイントを検証します。

  • レスポンス形式が有効であることを確認します。

追加のサポート

  • 詳細なエラーメッセージについては、ログを確認してください。

  • ツール固有のドキュメントを確認します。

  • リポジトリに問題を作成します。

関連リソース

AWS ドキュメント

その他の AWS リソース

その他のリソース

追加情報

自動承認が有効になっている MCP 設定の例

autoApprove 設定されていない場合、ユーザーはスキャンのために MCP セキュリティサーバーにコードを送信する承認を付与する必要があります。autoApprove を設定すると、コードアシスタントはユーザーの承認なしでツールを呼び出すことができます。これらのツールはマシン上でローカルに実行され、データは送信されず、コードスキャンのみが実行されます。

次の設定では、すべてのセキュリティスキャン関数の自動実行を有効にします。

{ "mcpServers": { "security-scanner": { "command": "uvx", "args": [ "--from", "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main", "security_scanner_mcp_server" ], "env": { "FASTMCP_LOG_LEVEL": "ERROR" }, "disabled": false, "autoApprove": [ "scan_with_checkov", "scan_with_semgrep", "scan_with_bandit", "get_supported_formats" ] } } }

デバッグログ記録を有効にするには、 "FASTMCP_LOG_LEVEL"を に設定します"DEBUG"

セキュリティスキャンツールでサポートされているファイル形式

このソリューションの各セキュリティスキャンツールは、次のファイル形式をサポートしています。

Checkov (IaC)

  • Terraform – .tf、.tfvars、.tfstate

  • CloudFormation – .yaml、.yml、.json、.template

  • Kubernetes – .yaml、.yml

  • Dockerfile – Dockerfile

  • ARM – .json (Azure リソースマネージャー)

  • Bicep – .bicep

  • サーバーレス – .yml、.yaml

  • Helm – .yaml、.yml、.tpl

  • GitHub アクション – .yml、.yaml

  • GitLab_ci – .yml、.yaml

  • Ansible – .yml、.yaml

Semgrep (ソースコード)

  • Python – .py

  • JavaScript – .js

  • TypeScript – .ts

  • Java – .java

  • Go – .go

  • C – .c

  • C++ – .cpp

  • C# – .cs

  • Ruby – .rb

  • PHP – .php

  • Scala – .scala

  • Kotlin – .kt

  • Rust – .rs

Bandit (Python のみ)

  • Python – .py

デモ

コードスキャンでは、AI アシスタントで次のサンプルプロンプトを試してください。

  • 「現在のスクリプトをスキャンして結果を教えてください。」

  • 「20~60 行をスキャンして結果を教えてください」

  • 「この Amazon DynamoDB テーブルリソースをスキャンして結果を教えてください。」

詳細については、このパターンの GitHub リポジトリにあるこのコードスキャンデモを参照してください。

安全なコードを生成するには、次のサンプルプロンプトを試してください。

  • 「Terraform 設定を生成して、暗号化が有効になっている DynamoDB テーブルを作成し、セキュリティ上の問題がないかスキャンします。」

  • DynamoDB に書き込み、脆弱性がないかスキャンする Python Lambda 関数を作成します。」

  • 「適切なセキュリティ設定で S3 バケットの CloudFormation テンプレートを生成し、セキュリティチェックに合格することを確認します。」

  • 「ページ分割を使用して DynamoDB をクエリし、セキュリティのベストプラクティスをスキャンする Python スクリプトを作成します。」

  • 「セキュリティを強化したマイクロサービスの Kubernetes デプロイマニフェストを作成し、検証します。」

詳細については、このパターンの GitHub リポジトリの「セキュリティスキャンデモを使用したこのコード生成」を参照してください。