Amazon GuardDutyの新機能「AI Protection」を有効化してAIワークロードの脅威検知を試してみた

Amazon GuardDutyの新機能「AI Protection」を有効化してAIワークロードの脅威検知を試してみた

Amazon GuardDuty AI Protection(2026/7/14 GA)を東京リージョンで有効化し、サービスリンクチャネルの自動作成、サンプルFindingの構造、Bedrock Guardrailsによるプロンプト攻撃ブロックの動作を確認しました。
2026.07.15

はじめに

2026年7月14日、Amazon GuardDuty AI Protection が一般提供されました。BedrockやSageMakerで動くAIワークロードに対して、コスト搾取や異常なモデル呼び出し、プロンプトインジェクションといったAI固有の脅威を検知する機能です。

https://aws.amazon.com/jp/about-aws/whats-new/2026/07/amazon-guardduty-ai-protection-aws/

これまでのGuardDutyでも、Foundational検知はCloudTrail管理イベントを通じてAIワークロード関連の不審操作を検知していました。Bedrock Guardrailsの不審な削除やモデル呼び出しログの無効化などが対象です。AI Protectionはこれに加え、モデル呼び出しのデータイベントを分析してAI固有の脅威を検知する専用のFindingタイプを追加します。

観点 Foundational検知 AI Protection追加後
検知対象 EC2, IAM, S3, EKS, Lambda等に加え、CloudTrail管理イベント上のBedrock/SageMaker AI関連操作 左記に加え、AIワークロードのモデル呼び出しを対象とした専用検知
AI関連の検知 Bedrock Guardrailsの不審な変更、モデル呼び出しログの無効化など CostHarvesting, AnomalousModelInvocation, PromptInjection.Direct
データソース VPCフローログ, DNSログ, CloudTrail管理イベント等 CloudTrail管理イベントおよびデータイベント(データイベントはサービスリンクチャネル経由)
追加設定 各Protection Planごとに有効化 トグル1つ(CloudTrail証跡の手動設定不要)

AI Protectionが検知する脅威は3タイプです。CostHarvesting はモデルの不正利用によるコスト搾取を、AnomalousModelInvocation は普段と異なるモデルやAPI、送信元からの異常な呼び出しを検知します。どちらもユーザーやアカウントごとのベースラインを学習した上で異常を判定します。PromptInjection.Direct は、Bedrock Guardrailsがプロンプト攻撃をブロックしたイベントを起点に、直接的なプロンプトインジェクションを検知します。

各タイプの詳細はGuardDuty AI Protection のドキュメントにまとまっています。本記事では東京リージョンでAI Protectionを有効化し、サービスリンクチャネルの自動作成、サンプルFindingの構造、Bedrock Guardrails連携の動作を順に見ていきます。

有効化手順

AI Protectionはマネジメントコンソールから3クリックで有効化できます。GuardDutyコンソールの「Protection plans」を開き、設定画面に進みます。

GuardDuty Protection Plans設定画面

一覧の中から AI Protection のトグルを有効化します。

AI Protectionトグルを有効化

最後に「Save all」で設定を保存します。

Save allで保存

CLIからも有効化できます。詳細な手順はスタンドアロンアカウントでのAI Protection有効化ドキュメントを参照してください。

aws guardduty update-detector \
  --detector-id <your-detector-id> \
  --region ap-northeast-1 \
  --features '[{"Name": "AI_PROTECTION", "Status": "ENABLED"}]'

成功時のレスポンスは空です。get-detector で確認します。

aws guardduty get-detector \
  --detector-id <your-detector-id> \
  --region ap-northeast-1 \
  --query 'Features[?Name==`AI_PROTECTION`]'
[
    {
        "Name": "AI_PROTECTION",
        "Status": "ENABLED",
        "UpdatedAt": "2026-07-15T06:47:02+09:00"
    }
]

コンソール・CLIのどちらの方法でも、設定は即時に反映されました。

サービスリンクチャネルの確認

AI Protectionを有効化すると、CloudTrailのサービスリンクチャネルが自動作成されます。ユーザーが証跡を作成する必要はなく、サービスリンクチャネル経由でデータイベントがGuardDutyに配信されます。

aws cloudtrail list-channels --region ap-northeast-1
{
    "Channels": [
        {
            "ChannelArn": "arn:aws:cloudtrail:ap-northeast-1:123456789012:channel/aws-service-channel/guardduty/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "Name": "aws-service-channel/guardduty/default"
        }
    ]
}

チャネルの詳細は以下のとおりです。

項目
Name aws-service-channel/guardduty/default
Source CloudTrail
ApplyToAllRegions false(リージョン単位)
Destination guardduty(AWS_SERVICE)

このチャネルが監視するリソースタイプは全34種です。内訳はBedrockコアが18種、Bedrock AgentCoreが14種、その他(BedrockMantleとSageMaker)が2種です。

監視対象リソースタイプ全34種

Bedrock コア(18種):

# リソースタイプ 説明
1 AWS::Bedrock::Model モデル呼び出し(InvokeModel等)
2 AWS::Bedrock::AgentAlias Agentの呼び出し
3 AWS::Bedrock::AsyncInvoke 非同期呼び出し
4 AWS::Bedrock::FlowAlias フロー呼び出し
5 AWS::Bedrock::Guardrail ガードレール評価
6 AWS::Bedrock::InlineAgent インラインエージェント
7 AWS::Bedrock::KnowledgeBase ナレッジベース検索
8 AWS::Bedrock::PromptVersion プロンプト管理
9 AWS::Bedrock::Session セッション
10 AWS::Bedrock::FlowExecution フロー実行
11 AWS::Bedrock::AutomatedReasoningPolicy 自動推論ポリシー
12 AWS::Bedrock::AutomatedReasoningPolicyVersion 同上バージョン
13 AWS::Bedrock::AdvancedOptimizePromptJob プロンプト最適化ジョブ
14 AWS::Bedrock::DataAutomationProject データ自動化プロジェクト
15 AWS::Bedrock::DataAutomationInvocation データ自動化呼び出し
16 AWS::Bedrock::DataAutomationProfile データ自動化プロファイル
17 AWS::Bedrock::Blueprint ブループリント
18 AWS::Bedrock::Tool ツール

Bedrock AgentCore(14種):

# リソースタイプ 説明
19 AWS::BedrockAgentCore::CodeInterpreter コードインタプリタ
20 AWS::BedrockAgentCore::Browser ブラウザー
21 AWS::BedrockAgentCore::WorkloadIdentity ワークロードID
22 AWS::BedrockAgentCore::WorkloadIdentityDirectory ワークロードIDディレクトリ
23 AWS::BedrockAgentCore::TokenVault トークンボールト
24 AWS::BedrockAgentCore::APIKeyCredentialProvider APIキープロバイダ
25 AWS::BedrockAgentCore::Runtime ランタイム
26 AWS::BedrockAgentCore::RuntimeEndpoint ランタイムエンドポイント
27 AWS::BedrockAgentCore::Gateway ゲートウェイ
28 AWS::BedrockAgentCore::Memory メモリ
29 AWS::BedrockAgentCore::OAuth2CredentialProvider OAuth2プロバイダ
30 AWS::BedrockAgentCore::BrowserCustom カスタムブラウザー
31 AWS::BedrockAgentCore::CodeInterpreterCustom カスタムコードインタプリタ
32 AWS::BedrockAgentCore::Evaluator 評価器

その他:

# リソースタイプ 説明
33 AWS::BedrockMantle::Project プロジェクト
34 AWS::SageMaker::Endpoint SageMakerエンドポイント

サンプルFindingの確認

AI Protectionが出力するFindingの構造を確認するため、サンプルFindingを生成しました。

aws guardduty create-sample-findings \
  --detector-id <your-detector-id> \
  --region ap-northeast-1 \
  --finding-types "Impact:IAMUser/CostHarvesting"

3タイプのうち、サンプル生成に対応しているのは CostHarvesting のみでした。

Finding タイプ サンプル生成
Impact:IAMUser/CostHarvesting ✅ 対応
Impact:IAMUser/AnomalousModelInvocation ❌ 未対応
Impact:IAMUser/PromptInjection.Direct ❌ 未対応

生成された CostHarvesting Findingの主要フィールドを確認します。

フィールド
Type Impact:IAMUser/CostHarvesting
Title "Unusual model invocation activity associated with cost harvesting was observed."
Severity 5.0(MEDIUM)
FeatureName AIProtection
Service.Action.ActionType AWS_API_CALL
Service.Action.AwsApiCallAction.Api InvokeModel
Service.Action.AwsApiCallAction.ServiceName bedrock
Resource.ResourceType AccessKey

Descriptionには、どのIAM IDがどのモデルをどこから呼び出し、なぜ疑わしいと判断したのかが自然文で記述されます。

The IAM identity GeneratedFindingUserName invoked the following APIs:

  • bedrock.amazonaws.com: ConverseStream completed without error.
    The model anthropic.claude-3-opus-20240229 was invoked from 198.51.100.23
    located in GeneratedFindingCountryName from GeneratedFindingISP (ASN=12345).
    GuardDuty considers these invocations suspicious because:
  • The organization GeneratedFindingASNOrg (ASN=12345) has not been previously observed for this user or account.
  • The ConverseStream API has not been previously observed for this user or account.
  • The model anthropic.claude-3-opus-20240229 has not been previously observed for this user or account.

検知対象のモデルはModelDetailsフィールドにIDまたはARNで記録されます(オンデマンド、カスタムモデルデプロイ、プロビジョンドスループット等の形式を含みます)。

異常と判定した根拠は Detection 構造に格納されます。

Detection 構造(Anomaly Detection)
"Detection": {
    "Anomaly": {
        "Profiles": {
            "<Scope>": {
                "<Feature>": {
                    "ProfileType": "VOLUME" | "FREQUENCY",
                    "ProfileSubtype": "AVERAGE" | "COUNT" | "FREQUENT" | "UNSEEN",
                    "Observations": {
                        "Number": [...] | "Text": [...]
                    }
                }
            }
        }
    }
}

ProfileType は異常の種類を表し、VOLUME(呼び出し量の異常)と FREQUENCY(頻度の異常)があります。ProfileSubtype はその内訳で、平均との比較(AVERAGE)、回数(COUNT)、頻出(FREQUENT)、未観測(UNSEEN)といった観点で異常が判定されます。

生成されたAI Protection FindingはfeatureNameで絞り込めます。

aws guardduty list-findings \
  --detector-id <your-detector-id> \
  --region ap-northeast-1 \
  --finding-criteria '{"Criterion":{"service.featureName":{"Eq":["AIProtection"]}}}'

各Findingタイプには前提条件とベースライン期間があります。

Finding タイプ 前提条件 ベースライン期間
CostHarvesting AI Protection有効化のみ 7〜14日
AnomalousModelInvocation AI Protection有効化のみ 7〜14日
PromptInjection.Direct Bedrock Guardrails + Converse API 不要(イベント駆動)

Bedrock Guardrails連携

PromptInjection.Direct Findingは、Bedrock Guardrailsがプロンプト攻撃をブロックしたイベントを前提に生成されます。プロンプト攻撃フィルタを有効にしたガードレールを用意し、動作を試しました。

項目
guardrailId abcdef123456
name guardduty-ai-protection-test
PROMPT_ATTACK inputStrength HIGH
PROMPT_ATTACK outputStrength NONE
tier CLASSIC

このガードレールを使い、InvokeModel APIと Converse APIでプロンプト攻撃の扱いがどう異なるかを比較しました。

API ガードレール動作 備考
InvokeModel guardrailAction: NONE(通過)
Converse stopReason: guardrail_intervened(ブロック) 正しく動作する

Converse APIで正常なプロンプトを送ると、通常どおり応答が返りました。

{
    "stopReason": "end_turn",
    "usage": {"inputTokens": 19, "outputTokens": 66, "totalTokens": 85}
}

一方、プロンプト攻撃を送るとガードレールが介入し、stopReason が guardrail_intervened になりました。

プロンプトインジェクション検知時のレスポンス
{
    "output": {
        "message": {
            "role": "assistant",
            "content": [{"text": "プロンプト攻撃が検知されました。リクエストはブロックされました。"}]
        }
    },
    "stopReason": "guardrail_intervened",
    "usage": {"inputTokens": 0, "outputTokens": 0, "totalTokens": 0},
    "metrics": {"latencyMs": 346},
    "trace": {
        "guardrail": {
            "inputAssessment": {
                "abcdef123456": {
                    "contentPolicy": {
                        "filters": [{
                            "type": "PROMPT_ATTACK",
                            "confidence": "HIGH",
                            "filterStrength": "HIGH",
                            "action": "BLOCKED",
                            "detected": true
                        }]
                    },
                    "invocationMetrics": {
                        "guardrailProcessingLatency": 196,
                        "usage": {"contentPolicyUnits": 1},
                        "guardrailCoverage": {"textCharacters": {"guarded": 111, "total": 111}}
                    }
                }
            },
            "actionReason": "Guardrail blocked."
        }
    }
}

今回の検証ではガードレールによるプロンプト攻撃のブロック(手順1〜2)まで実測しています。手順3〜5はドキュメントベースの記載です。

  1. ユーザーが Converse API でガードレール付きモデルを呼び出す ✅
  2. Guardrailが PROMPT_ATTACK を検知し、guardrail_intervened となる ✅
  3. CloudTrailデータイベント(AWS::Bedrock::Guardrail)が記録される
  4. GuardDutyがサービスリンクチャネル経由でデータイベントを受信する
  5. GuardDutyが Impact:IAMUser/PromptInjection.Direct Finding を生成する

Security Hub連携

GuardDutyのFindingは、統合が有効であればSecurity Hubに自動連携されます。まず統合状態を見てみます。

aws securityhub list-enabled-products-for-import \
  --region ap-northeast-1 \
  --query "ProductSubscriptions[?contains(@, 'guardduty')]"
["arn:aws:securityhub:ap-northeast-1:123456789012:product-subscription/aws/guardduty"]

GuardDuty → Security Hub の統合は有効です。ただし、先ほど生成したサンプルFindingをSecurity Hub側で検索しても結果は空でした。

aws securityhub get-findings \
  --region ap-northeast-1 \
  --filters '{"ProductName":[{"Value":"GuardDuty","Comparison":"EQUALS"}],"Title":[{"Value":"Unusual model invocation","Comparison":"PREFIX"}]}'
{"Findings": []}

サンプルFinding(sample: true)が転送対象外である可能性とタイミングの問題を切り分けられなかったため、この結果だけでは連携の成否を判断していません。実際のFindingであればタイプで絞り込めます。

aws securityhub get-findings \
  --region ap-northeast-1 \
  --filters '{
    "ProductName": [{"Value": "GuardDuty", "Comparison": "EQUALS"}],
    "Type": [{"Value": "TTPs/Impact/Impact:IAMUser-CostHarvesting", "Comparison": "EQUALS"}]
  }'

実際のFindingがSecurity Hubに連携されることは、既存のRuntime Monitoring Findingで確認できました。

aws securityhub get-findings \
  --region ap-northeast-1 \
  --filters '{"ProductName":[{"Value":"GuardDuty","Comparison":"EQUALS"}],"RecordState":[{"Value":"ACTIVE","Comparison":"EQUALS"}]}' \
  --sort-criteria '{"Field":"CreatedAt","SortOrder":"desc"}' \
  --max-results 3 \
  --query 'Findings[].{Title: Title, Type: Types[0], CreatedAt: CreatedAt}'
[
    {
        "Title": "Security-sensitive file modification is detected in a resource of type KubernetesCluster.",
        "Type": "TTPs/Privilege Escalation/PrivilegeEscalation:Runtime-SensitiveFileModified",
        "CreatedAt": "2026-07-02T00:59:30.271Z"
    }
]

PrivilegeEscalation:Runtime-SensitiveFileModified のFindingが正常にSecurity Hubへ連携されています。AI ProtectionのFindingも同じ仕組みで自動連携されます。

https://dev.classmethod.jp/articles/security-hub-ai-inventory-auto-detection

まとめ

Amazon GuardDuty AI Protection は、トグル1つで有効化でき、CloudTrail証跡の個別設定なしにAIワークロードの脅威検知を開始できます。既存のGuardDuty・Security Hub運用にそのまま乗るため、導入のハードルは低いと感じました。

CostHarvesting と AnomalousModelInvocation はベースライン形成に7〜14日かかるため、検知が効き始めるのは有効化してしばらく経ってからです。PromptInjection.Direct は Converse API + Guardrails が前提ですが、イベント駆動なので即時性があります。ベースライン形成後に実Findingが生成される挙動は、別途確認予定です。

AI Protectionには30日間の無料トライアルがあり、今回の検証規模ではコストはほぼ$0でした。料金の詳細はGuardDutyの料金ページを参照してください。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事