Coding
PromptBeginner5 minmarkdown
Nano Banana Pro
Agent skill for nano-banana-pro
7
このプロジェクトは、AWS Security Hub のセキュリティ検出を Amazon Bedrock で日本語要約し、SNS 経由でアラート通知を行うサーバーレスシステムです。
Sign in to like and favorite skills
このプロジェクトは、AWS Security Hub のセキュリティ検出を Amazon Bedrock で日本語要約し、SNS 経由でアラート通知を行うサーバーレスシステムです。
SecurityhubBedrockAlertStack (PascalCase)SecurityHubAlertTopic, SecurityHubProcessor (PascalCase)alertTopic, lambdaRole, securityHubProcessor (camelCase)MODEL_ID (SCREAMING_SNAKE_CASE)// ✅ 推奨: 明示的なタイプと設定 const alertTopic = new sns.Topic(this, 'SecurityHubAlertTopic', { topicName: 'security-hub-bedrock-alerts', displayName: 'Security Hub Bedrock Alerts' }); // ✅ 推奨: 最小権限の原則 lambdaRole.addToPolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW, actions: ['bedrock:InvokeModel'], resources: [/* 特定のリソースARN */] })); // ❌ 避ける: ワイルドカード権限 // resources: ['*']
// 1. AWS CDK core import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; // 2. AWS CDK services (アルファベット順) import * as events from 'aws-cdk-lib/aws-events'; import * as iam from 'aws-cdk-lib/aws-iam'; import * as lambda from 'aws-cdk-lib/aws-lambda'; import * as sns from 'aws-cdk-lib/aws-sns'; // 3. Node.js built-in import * as path from 'path';
lambda_handler, generate_summary_with_bedrock (snake_case)finding_id, control_id, resources_text (snake_case)MODEL_ID, SNS_TOPIC_ARN (SCREAMING_SNAKE_CASE)# ✅ 推奨: 明確なエラーハンドリング try: summary = generate_summary_with_bedrock(finding) logger.info(f"Summary generated for finding: {finding_id}") except Exception as e: logger.error(f"Error generating summary: {str(e)}") raise Exception(f"Bedrock summary generation failed: {str(e)}") # ❌ 避ける: 曖昧なエラーハンドリング # except: # pass
# ✅ 推奨: 構造化ログ logger.info(f"Processing finding: {finding_id} - {finding_title} (Control: {control_id})") logger.error(f"Error processing finding {finding_id}: {str(e)}") # ✅ 推奨: レベル別使い分け logger.debug("Debug information") # 開発時のみ logger.info("Normal operation") # 正常な処理フロー logger.warning("Recoverable issue") # 軽微な問題 logger.error("Error occurred") # エラー発生
# ✅ 推奨: 明示的な型ヒント def lambda_handler(event: Dict[str, Any], context: Any) -> Dict[str, Any]: def generate_summary_with_bedrock(finding: Dict[str, Any]) -> str: def send_to_sns(summary: str, finding: Dict[str, Any]) -> None:
# Finding の重要なフィールド finding = { "Id": "arn:aws:securityhub:...", # 一意識別子 "Title": "Security control description", # タイトル "Description": "Detailed description", # 詳細説明 "Severity": {"Label": "HIGH"}, # 重要度 "ProductFields": {"ControlId": "EC2.19"}, # コントロールID "Compliance": {"SecurityControlId": "EC2.19"}, # セキュリティコントロールID "Resources": [...], # 影響リソース "AwsAccountId": "123456789012", # アカウントID "Region": "ap-northeast-1" # リージョン }
# ✅ 推奨: 構造化されたプロンプト prompt = f""" AWS Security Hubで以下のセキュリティ検出が報告されました。日本語で専門的な分析と要約を提供してください。 【検出情報】 - タイトル: {title} - 説明: {description} - 重要度: {severity} - セキュリティコントロールID: {control_id} - 影響リソース: {resources_text} 【必須回答形式】 - 検出内容の要約: (...) - 詳細説明: (...) - 影響: (...) - 対応の優先度: [Immediate/High/Medium/Low] - 推奨される対応: (...) - 参照リンク: (...) """
// 重要度とステータスでフィルタリング eventPattern: { source: ['aws.securityhub'], 'detail-type': ['Security Hub Findings - Imported'], detail: { findings: { Compliance: { Status: ['FAILED', 'WARNING'] // 失敗・警告のみ }, RecordState: ['ACTIVE'], // アクティブのみ Severity: { Label: ['CRITICAL', 'HIGH', 'MEDIUM'] // 高・中重要度のみ }, Workflow: { Status: ['NEW'] // 新規のみ } } } }
# ビルド npm run build # CDK差分確認 npx cdk diff # デプロイ npx cdk deploy --region ap-northeast-1
apac.anthropic.claude-sonnet-4-20250514-v1:0// SNSトピック作成 // Lambda IAMロール作成 // Bedrock権限を追加
"""BedrockでSecurity Hubのfindingを日本語要約""" # 基本情報を抽出 # コントロールIDを取得 # Bedrockプロンプト作成
原因: リージョン不一致や権限不足 解決: IAM ポリシーでの明示的な ARN 指定
原因: 想定外のイベント形式 解決: detail 構造の詳細確認とフィルター調整
原因: Bedrock 要約が長すぎる 解決: max_tokens の調整や要約の分割
securityhub-bedrock-alert/ ├── lib/ │ └── securityhub-bedrock-alert-stack.ts # CDK スタック定義 ├── lambda/ │ ├── handler.py # Lambda メイン処理 │ └── requirements.txt # Python 依存関係 ├── bin/ │ └── securityhub-bedrock-alert.ts # CDK エントリーポイント ├── generated-diagrams/ # システム構成図 ├── SPECIFICATION.md # 技術仕様書 └── package.json # Node.js 設定
重要: このプロジェクトは Security Hub の機密データを扱うため、セキュリティ要件を常に最優先に考慮してコードを作成してください。