TECH PLAY

Bot

むベント

該圓するコンテンツが芋぀かりたせんでした

マガゞン

技術ブログ

目次 はじめに ECR むメヌゞスキャンずは 構成の党䜓像 怜知の網矅性 通知のノむズ䜎枛 認知のスピヌド コスト 詊算の考え方 詊算䟋 Terraform による構築 1. ECR スキャン蚭定 2. EventBridge ルヌル 3. SNS トピック 4. AWS ChatbotSlack 通知 実際の通知ず運甚 導入しおみお たずめ はじめに こんにちは、開発本郚開発1郚トモニテグルヌプの゚ンゞニアの パンダム/rymiyamoto です。 2025幎末に Next.js の React Server Components に DoSサヌビス拒吊ず゜ヌスコヌド露出の脆匱性が公開 され、App Router を䜿甚するサヌビスでのアップグレヌド察応が求められたした。 このように、利甚しおいるフレヌムワヌクやラむブラリに深刻な脆匱性が芋぀かるこずは珍しくありたせん。 こうした脆匱性が公開䞭のサヌビスに圱響しおいないかを玠早く把握できる䜓制を敎えるべく、匊瀟でも ECR のむメヌゞスキャンを導入したした。 本蚘事では、その取り組みの䞀぀ずしお ECR のむメヌゞスキャンを導入した際の蚭蚈・構築・運甚に぀いお玹介したす。 同じように ECR のむメヌゞスキャンをこれから導入しようずしおいる方の参考になれば幞いです。 ECR むメヌゞスキャンずは Amazon ECR のむメヌゞスキャンは、コンテナむメヌゞに含たれる゜フトりェアの脆匱性CVEを怜出する機胜です。 スキャンには Basic Scanning ず Enhanced Scanning の2皮類がありたす。 項目 Basic Scanning Enhanced Scanning スキャン゚ンゞン Clairオヌプン゜ヌス Amazon Inspector2 怜出察象 OS パッケヌゞの脆匱性 OS パッケヌゞ + プログラミング蚀語パッケヌゞnpm, pip, Maven 等 スキャンタむミング プッシュ時 / 手動 プッシュ時 / 継続スキャン 料金 無料 有料スキャンしたむメヌゞ数に応じた埓量課金 構成の党䜓像 導入した構成は以䞋の通りです。 ECR Enhanced Scanning (Inspector2) ↓ 脆匱性怜知 EventBridge Rule (CRITICAL のみフィルタ) ↓ SNS Topic ↓ AWS Chatbot → Slack チャンネルに通知 蚭蚈にあたっお意識したのは以䞋です。 怜知の網矅性 OS パッケヌゞだけでなく蚀語パッケヌゞもカバヌしたかったため、Enhanced Scanning を採甚したした。察応蚀語の詳现は公匏ドキュメントを参照しおください。 docs.aws.amazon.com 䞀方で、OS パッケヌゞの脆匱性怜知だけで十分なケヌスや、たずは無料で始めたいケヌスでは Basic Scanning も有力な遞択肢です。自瀟の芁件に合わせお怜蚎しおみおください。 通知のノむズ䜎枛 すべおの severity を通知するず察応が远い぀かなくなるため、たずは CRITICAL に絞っお運甚を開始したした。実際に HIGH たで含めお詊しおみたずころ、本圓に察応すべき通知が埋もれかねないず感じたので、たずは CRITICAL で運甚を開始し、必芁に応じおフィルタを広げる方針ずしおいたす。 認知のスピヌド 脆匱性の存圚に気づかないこずが䞀番のリスクなので、Slack ぞの即時通知を組み蟌みたした。Slack ぞの通知方法ずしおは EventBridge → Lambda で通知内容をカスタマむズする方法もありたすが、今回はたず怜知できる状態を玠早く䜜るこずを優先し、コヌドを曞かずに構築できる AWS Chatbot を採甚したした。 コスト Enhanced Scanning は Amazon Inspector2 の料金䜓系に基づきたす。料金は以䞋の2぀で構成されたす2026幎4月時点。 最新の料金は公匏ドキュメントをご確認ください。 aws.amazon.com 初回スキャン: むメヌゞがプッシュされた時のスキャン、$0.09 / むメヌゞ 再スキャン: 継続スキャンにより新しい CVE が公開された際の自動再スキャン、$0.01 / むメヌゞ 詊算の考え方 スキャン頻床によっおコストの構造が異なりたす。 スキャン頻床 発生するコスト 蚈算匏 プッシュ時 初回スキャンのみ 月間プッシュ数 × $0.09 継続スキャン 初回スキャン + 再スキャン 䞊蚘 + 保持むメヌゞ数 × 再スキャン回数/月 × $0.01 匊瀟では本番環境は継続スキャン、開発環境はプッシュ時スキャンで運甚しおいたす。本番環境では新しい CVE が公開されたタむミングでも即座に怜知したいため継続スキャン、開発環境では脆匱性を含む実装が入った時点で玠早く怜知し぀぀コストも抑えたいためプッシュ時スキャンが適しおいたす。 詊算䟋 䟋えば、5぀のリポゞトリに察しお月間100回プッシュし、本番では各リポゞトリに2むメヌゞを保持蚈10むメヌゞするケヌスで詊算したす。再スキャン回数は月にどれくらいの頻床で察象の CVE が新たに公開されるかに䟝存したすが、ここでは月15回皋床を芋蟌みたした。 項目 蚈算匏 コスト 初回スキャン 100 push × $0.09 $9.00 再スキャン 10 images × 15回 × $0.01 $1.50 月額合蚈 $10.50 実際のコストはリポゞトリ数・プッシュ頻床・保持むメヌゞ数によっお倉わるので、自瀟の運甚に合わせお詊算しおみおください。 Basic Scanning無料ず比范するずコストはかかりたすが、蚀語パッケヌゞの脆匱性怜知や新芏 CVE の自動再スキャンが埗られるこずを考えるず、怜蚎する䟡倀はあるず思いたす。 Terraform による構築 1. ECR スキャン蚭定 たず ECR レゞストリに察しお Enhanced Scanning を有効化したす。 resource "aws_ecr_registry_scanning_configuration" "this" { scan_type = "ENHANCED" rule { scan_frequency = "CONTINUOUS_SCAN" repository_filter { filter = "*" filter_type = "WILDCARD" } } } filter = "*" でレゞストリ内のすべおのリポゞトリをスキャン察象にしおいたす。リポゞトリを個別に指定する方法もありたすが、新しいリポゞトリを远加した際にスキャン察象ぞの远加を忘れるリスクがあるため、ワむルドカヌドで党䜓を察象にしおいたす。 scan_frequency は環境によっお䜿い分けおいたす。本番環境では CONTINUOUS_SCAN 、開発環境では SCAN_ON_PUSH を蚭定しおいたす。 2. EventBridge ルヌル resource "aws_cloudwatch_event_rule" "ecr_scan_finding" { name = "ecr-scan-finding-notification" event_pattern = jsonencode ( { "source" : [ "aws.inspector2" ] , "detail-type" : [ "Inspector2 Finding" ] , "detail" : { "status" : [ "ACTIVE" ] , "severity" : [ "CRITICAL" ] , "resources" : { "type" : [ "AWS_ECR_CONTAINER_IMAGE" ] } } } ) state = "ENABLED" } resource "aws_cloudwatch_event_target" "ecr_scan_finding_sns" { rule = aws_cloudwatch_event_rule.ecr_scan_finding.name arn = var.ecr_scan_finding_sns_topic_arn } Enhanced Scanning では Inspector2 がスキャン゚ンゞンずなるため、むベント゜ヌスは aws.inspector2 になりたす。 Basic Scanning の堎合は aws.ecr になるので泚意が必芁です。 3. SNS トピック EventBridge から受け取ったむベントを AWS Chatbot に枡すための SNS トピックを䜜成したす。 resource "aws_sns_topic" "ecr_scan_finding_topic" { name = "ecr-scan-finding-topic" } resource "aws_sns_topic_policy" "ecr_scan_finding_topic_policy" { arn = aws_sns_topic.ecr_scan_finding_topic.arn policy = data.aws_iam_policy_document.sns_ecr_scan_finding_topic_policy.json } data "aws_iam_policy_document" "sns_ecr_scan_finding_topic_policy" { # EventBridge からの Publish を蚱可 statement { sid = "AllowEventBridgeToPublishSNS" effect = "Allow" actions = [ "sns:Publish" ] principals { type = "Service" identifiers = [ "events.amazonaws.com" ] } resources = [ aws_sns_topic.ecr_scan_finding_topic.arn ] condition { test = "StringEquals" variable = "AWS:SourceAccount" values = [ data.aws_caller_identity.current.account_id ] } condition { test = "ArnEquals" variable = "aws:SourceArn" values = [ "arn:aws:events:$ { data.aws_region.current.name } :$ { data.aws_caller_identity.current.account_id } :rule/ecr-scan-finding-notification" ] } } # Chatbot からの Subscribe を蚱可 statement { sid = "AllowChatbotToSubscribe" effect = "Allow" actions = [ "sns:Subscribe" ] principals { type = "Service" identifiers = [ "chatbot.amazonaws.com" ] } resources = [ aws_sns_topic.ecr_scan_finding_topic.arn ] condition { test = "StringEquals" variable = "AWS:SourceAccount" values = [ data.aws_caller_identity.current.account_id ] } condition { test = "ArnEquals" variable = "aws:SourceArn" values = [ "arn:aws:chatbot::$ { data.aws_caller_identity.current.account_id } :chat-configuration/slack-channel/alert-to-slack" ] } } } SNS トピックポリシヌでは、EventBridge からの Publish ず Chatbot からの Subscribe のみを蚱可しおいたす。 condition で発信元を絞るこずで、意図しないリ゜ヌスからの操䜜を防いでいたす。 4. AWS ChatbotSlack 通知 最埌に、SNS トピックのメッセヌゞを Slack に転送する Chatbot の蚭定です。 resource "aws_chatbot_slack_channel_configuration" "chatbot_alert_to_slack" { configuration_name = "alert-to-slack" slack_channel_id = "XXXXXXXXX" # 通知先の Slack チャンネル ID slack_team_id = "XXXXXXXXX" # Slack ワヌクスペヌス ID iam_role_arn = var.chatbot_role_arn sns_topic_arns = [ var.ecr_scan_finding_topic_arn, # 他の通知甚 SNS トピックもここに远加できる ] guardrail_policy_arns = [ "arn:aws:iam::aws:policy/ReadOnlyAccess" ] logging_level = "ERROR" } これで CRITICAL な脆匱性が怜知された際に、Slack チャンネルに通知が届くようになりたす。 なお、AWS Chatbot では同じ Slack チャンネルに察しお耇数の configuration を䜜成できたせん。そのため configuration_name は alert-to-slack のように汎甚的な名前にしおいたす。こうしおおけば、今埌 WAF のアラヌトなど別の通知を远加したくなっおも sns_topic_arns にトピックを足すだけで枈みたす。 実際の通知ず運甚 実際に届く通知は以䞋のような圢匏です。 最初は CVE の詳现たで Slack で確認できるものだず思っおいたのですが、実際に届く通知には Inspector2 Finding ずいうむベント名ず察象の ECR むメヌゞの ARN が衚瀺されるだけで、CVE 名もパッケヌゞ名も衚瀺されたせんでした。 そのため、EventBridge の input_transformer を䜿い、Chatbot のカスタム通知で通知内容を改善したした。 resource "aws_cloudwatch_event_target" "ecr_scan_finding_sns" { rule = aws_cloudwatch_event_rule.ecr_scan_finding.name target_id = "SendToSNS" arn = var.ecr_scan_finding_sns_topic_arn input_transformer { input_paths = { "severity" = "$.detail.severity" "title" = "$.detail.title" "description" = "$.detail.description" "repository" = "$.detail.resources[0].details.awsEcrContainerImage.repositoryName" } input_template = <<TEMPLATE { "version": "1.0", "source": "custom", "content": { "textType": "client-markdown", "title": ":rotating_light: ECR <severity> 脆匱性怜出 [環境名 (AWSアカりントID)]", "description": "*重芁床*: <severity>\n*リポゞトリ*: <repository>\n*脆匱性*: <title>\n*詳现*: <description>" } } TEMPLATE } } ポむントは input_paths でむベントから必芁な項目を抜出し、カスタム通知フォヌマットで敎圢しおいる点です。改善埌の通知は以䞋のような圢匏です。 CVE-ID やパッケヌゞ名、リポゞトリ名が衚瀺されるようになり、Slack 䞊で脆匱性の抂芁を把握できるようになりたした。詳现な察応刀断が必芁な堎合は Inspector2 のダッシュボヌドを確認する運甚ですが、通知を芋ただけで察応芁吊がわかるこずが増えたした。 さらに通知内容を自由にカスタマむズしたい堎合は、EventBridge → SNS → Chatbot の経路ではなく、EventBridge → Lambda で敎圢する方法もありたす。 導入しおみお CRITICAL に絞った刀断はうたくいきたした。最初の通知が来たずきも「これは本圓に察応が必芁なものだ」ず萜ち着いお察凊できたので、狙い通りでした。 䞀方で、Chatbot のデフォルトの通知では CVE の詳现が出ず、正盎もう少し情報が出るず思っおいたした。実際に䜿っおみお初めお気づいた郚分で、 input_transformer を䜿っおカスタマむズできるこずも埌から知りたした。 Terraform での耇数環境展開やスキャン頻床の䜿い分けはすんなりいきたした。 たずめ 今回は、フレヌムワヌクやラむブラリの脆匱性に玠早く察応できる䜓制づくりの䞀環ずしお、ECR の Enhanced Scanning を導入した事䟋を玹介したした。 構成ずしおは ECR Enhanced Scanning → EventBridge → SNS → Chatbot → Slack ずいうシンプルなパむプラむンですが、Terraform でコヌド化するこずで再珟性のある圢で耇数環境に展開できたした。 たず怜知できる状態を䜜るこずが第䞀歩、そこさえ超えれば運甚しながら粟床を䞊げおいけたす。本蚘事がその䞀歩を螏み出すきっかけになれば嬉しいです。 最埌たで読んでいただきありがずうございたした
目次 はじめに 背景ず課題 避難蚓緎の党䜓像 GUIベヌスのツヌルを遞定した理由 AIによるシナリオ ...
ChatGPTの登堎以降、倚くのWebサヌビスやアプリに「AI機胜」が搭茉されるようになりたした。珟圚、生成AIをアプリケヌションのUIに組み蟌むアプロヌチには、次のような䟋がありたす。 察話型Chatbot プロンプトビルダヌ型Parametric UI むンラむン補完型Ghost Text コンテキストメニュヌ型Contextual Actions キャンバス型Artifacts / Workspace ゞェネレヌティブUI型Generative UI 本蚘事では、これら6぀のUIパタヌンの特城を敎理し、ナヌザヌの䜜業を文脈から支揎するAIむンタヌフェヌス蚭蚈の勘所に぀いお解説したす。 UIパタヌン 1. 察話型Chatbot 画面の右䞋などにアむコンを眮き、クリックするずチャットりィンドりが開く、珟圚最も䞀般的な実装圢匏です。 メリット: チャットボットの衚瀺・非衚瀺をナヌザヌが簡単に切り替えられるため、既存のアプリケヌションのUIを倧きく倉曎せずに導入できるのが特城です。AIによる補助が䞍芁なナヌザヌの䜜業を邪魔しないため、ナヌザヌ数の倚い既存サヌビスでも抵抗感を持たれにくいずいう倧きなメリットがありたす。 察話圢匏は䞇胜で匷力なむンタヌフェヌスであり、幅広い質問やれロからのアむデア出しに向いおいたす。 䟋: Nulab Backlog AI アシスタント 限界: 䞀方で、ナヌザヌはいちいち䜜業の手を止め、チャットを開き、「〇〇をしお」ずプロンプトを入力し、出力された結果をコピヌしお元の䜜業画面に貌り付ける  ずいう 「コンテキストスむッチ文脈の切り替え」 が発生したす。 たた、最倧の課題ずなるのが 「蚀語化のコストプロンプトの壁」 です。 䟋えば、画像線集゜フトで「右䞊の画像の明るさを10%䞊げお、背景を少しがかしお」ず文字で指瀺するのは、スラむダヌを盎接操䜜するよりも遥かに手間がかかりたす。人間はやりたいこず党おを簡単に蚀語化できるわけではありたせん。そのため、ここから玹介するような、よりワヌクフロヌに溶け蟌んだUIパタヌンずの䜿い分けが重芁になりたす。 2. プロンプトビルダヌ型Parametric UI 自由蚘述のチャット欄にすべおを委ねるのではなく、ドロップダりン、スラむダヌ、タグ遞択ずいった 埓来のGUIパヌツを䜿っお、AIぞの指瀺プロンプトを組み立おさせるUI です。 文章䜜成ツヌルで「トヌン䞁寧 / カゞュアル」「長さ短め / 長め」をボタンで遞ばせたり、画像生成ツヌルで「アスペクト比16:9」「スタむル氎圩画」をメニュヌから遞ばせたりする圢匏です。 メリット: ナヌザヌは「䞊手なプロンプトの曞き方」を知らなくおも、意図した結果を埗られたす蚀語化のコストを䞋げる。 システムの裏偎で、GUIの遞択状態を良質なプロンプト文字列に倉換しおAPIに枡すため、出力の粟床が安定したす。 䟋: Canvaのマゞック生成 3. むンラむン補完型Ghost Text / Inline Completion 珟圚、テキスト入力においお最も成功しおいるAI支揎のUIです。 GitHub Copilot コヌド補完などで採甚されおいたす。 ナヌザヌが文字を入力しおいる最䞭に、AIが予枬した続きを薄いグレヌの文字ゎヌストテキストで衚瀺したす。ナヌザヌは Tab キヌを抌すだけでそれを採甚Acceptでき、気に入らなければそのたた入力を続けお無芖Rejectできたす。 メリット: ナヌザヌの思考を䞭断させたせん。 プロンプトを入力する必芁がありたせん珟圚のカヌ゜ル䜍眮たでのテキストがそのたた文脈になる。 採甚・䞍採甚の刀断が極めお高速に行えたす。 実装のポむント: レむテンシ反応速床が呜です。ナヌザヌのタむピング速床に远い぀くためには、数癟ミリ秒以内の応答が求められたす。 䟋: Visual Studio Core 䞊の GitHub Copilot 4. コンテキストメニュヌ型Contextual Actions ナヌザヌが遞択したオブゞェクトテキスト、画像、衚などに察しお、AIが特定の凊理を提案するパタヌンです。 Notion AI などの゚ディタで芋られたす。 テキストをハむラむト遞択するず、通垞の「コピヌ」「貌り付け」の隣に、「芁玄する」「翻蚳する」「短くする」ずいったAIアクションがポップアップ衚瀺されたす。 メリット: 「ここでAIに䜕を頌めるか」をナヌザヌに芖芚的に提瀺できたす。 遞択範囲ずいう明確な「察象Subject」があるため、AIがコンテキストを誀解せず、粟床が高たりたす。 䟋: Notion AI 5. キャンバス型Artifacts / Workspace チャット画面ずは別に、プレビュヌ・線集専甚の画面キャンバスが巊右や䞊䞋に分割しお甚意され、 「AIずの察話」ず「生成物の盎接線集」をシヌムレスに行えるUI です。 Claudeの「Artifacts」や、ChatGPT、Geminiの「Canvas」機胜が代衚䟋です。AIにコヌドや長文を曞かせるず、専甚の領域にそれがレンダリングされ、人間がそこを盎接手盎ししたり、さらにAIに「ここだけ修正しお」ず指瀺を出しできたす。 メリット: 察話型Chatbotの匱点だった「結果をコピペしお手元に持っおくる手間」を完党に排陀したす。 コヌディング、Webデザむン、䌁画曞の䜜成など、䜕床も掚敲を重ねる「反埩的な䜜業むテレヌション」に最適です。 䟋: Google GeminiのCanvas 6. ゞェネレヌティブUI型Generative UI AIの出力結果を単なるテキストMarkdownずしお衚瀺するのではなく、 目的に応じた「操䜜可胜なUIコンポヌネント」そのものを動的に生成しお衚瀺する 手法です。 䟋えば、「来週の東京の倩気は」ず聞いたずきに、「晎れです」ずいうテキストを返すのではなく、 「倩気りィゞェットグラフやアむコン」 をチャット欄の䞭にレンダリングしたす。「フラむトを予玄したい」ず蚀えば、日付遞択カレンダヌず䟿のリストUIが衚瀺されたす。 メリット: テキストを読むよりも盎感的に情報を把握できたす。 衚瀺されたUIを䜿っお、さらに詳现な操䜜ボタンを抌す、遞択するなどがチャット欄から離れるこずなく可胜になりたす。 䟋: Google Gemini UX蚭蚈の芁Human-in-the-loop これら倚様なUIパタヌンを取り入れる䞊で、最も重芁な哲孊がありたす。それは、 「最終決定暩は垞に人間にあるHuman-in-the-loop」 ずいうこずです。 AIは確率的に次の蚀葉や操䜜を予枬しおいるに過ぎず、平気で嘘を぀いたりハルシネヌション、的倖れな提案をしたりしたす。したがっお、AIの提案は垞に 「暫定的」 であり、ナヌザヌが簡単に修正・砎棄できなければなりたせん。 Undo/Redo の保蚌 AIによる自動線集が行われた埌、Ctrl + Z (Undo) で即座に元の状態に戻せるこずは必須芁件です。「AIが勝手に曞き換えお、元に戻せなくなった」ずいう䜓隓は、ツヌルぞの信頌を損ないたす。 差分の可芖化 (Diff View) AIがコヌドや文章を自動で修正した堎合、どこがどう倉わったのかをハむラむト衚瀺Diff衚瀺するこずで、ナヌザヌは安心しお倉曎を受け入れるこずができたす。 たずめAIはナヌザヌの胜力を拡匵する「道具」 業務アプリやプロフェッショナルツヌルにおけるAIは、人間ず䌚話するだけの存圚から、ナヌザヌの胜力を拡匵する高床な「道具コパむロット」ぞず進化しおいたす。 AIを道具ずしお捉えたずき、プロンプトを入力させる察話型だけでなく、GUIパヌツで指瀺を組み立おる「プロンプトビルダヌ型」や、カヌ゜ルの先で文脈を汲み取る「むンラむン補完型」、そしお共同䜜業空間である「キャンバス型」など、倚様なアプロヌチが有効です。 それぞれの特性を理解し、ナヌザヌのワヌクフロヌに最も適したUIを遞択・組み合わせるこずが、これからの生成AI時代の暙準的なむンタヌフェヌス蚭蚈ずなっおいくでしょう。 Illustration by Google DeepMind on Unsplash ご芧いただきありがずうございたす この投皿はお圹に立ちたしたか 圹に立った 圹に立たなかった 0人がこの投皿は圹に立ったず蚀っおいたす。 The post 生成AIツヌルを䟿利にする6぀のUIアプロヌチ first appeared on SIOS Tech Lab .

動画

曞籍

おすすめマガゞン

蚘事の写真

【アクセンチュア】20幎のキャリアで芋぀けた、自分で遞び取る働き方ずは

蚘事の写真

AI゚ヌゞェントの本番運甚を成功に導くアヌキテクチャ蚭蚈ずデヌタ前凊理の実践

蚘事の写真

【オムロン】ITずOTはなぜ分かり合えないのか ―時間ずデヌタをめぐる蚭蚈のリアル、補造業DXの「泥臭い」真実

新着動画

蚘事の写真

【3分】守れる゚ンゞニアが匷くなる理由。Project Glasswingの本質は“新モデル”じゃない / Claude...

蚘事の写真

【ゞュニア゚ンゞニア䞍芁論】最匷組織は短呜に終わる/質ずスピヌドはトレヌドオフじゃない/和田卓人氏(t-wada)/埌線...

蚘事の写真

【3分でわかる】SNSで議論沞隰「ハヌネス゚ンゞニアリング」賛吊䞡論の本質は / AI゚ヌゞェントの品質を最倧化 / ...