![【Security Hub修復手順】[BedrockAgentCore.5] Bedrock AgentCore カスタムブラウザはパブリックネットワークモードを使用しないでください](https://devio2024-media.developers.io/image/upload/f_auto,q_auto,w_3840/f_auto,q_auto/v1790871196/eyecatch/wr309ednrjrbdx9mtsnl.png)
【Security Hub修復手順】[BedrockAgentCore.5] Bedrock AgentCore カスタムブラウザはパブリックネットワークモードを使用しないでください
こんにちは!コンサルティング部のシモンです。
本記事では、AWS Security Hubのコントロール [BedrockAgentCore.5] で検出されたAmazon Bedrock AgentCoreのカスタムブラウザを、PUBLICモードからVPCモードに移行する手順をご紹介します。
本記事の対象コントロール
[BedrockAgentCore.5] Bedrock AgentCore カスタムブラウザはパブリックネットワークモードを使用しないでください
[BedrockAgentCore.5] Bedrock AgentCore custom browsers should not use public network mode
前提条件
本記事はAWS Security Hubで「AWS基礎セキュリティのベストプラクティススタンダード」を利用されている方向けの内容となります。
AWS Security Hubの詳細についてはこちらのブログをご覧ください。
対象コントロールの説明
このコントロールは、AgentCoreのカスタムブラウザがパブリックネットワークモード(PUBLIC)で作成されていないかをチェックします。
ネットワークモードがVPCであれば、このコントロールは成功します。
AgentCore Browserは、エージェントがWebサイトを閲覧したりフォームに入力したりするためのマネージドなブラウザ実行環境です。
評価対象はユーザーが作成したカスタムブラウザのみで、AWSが提供するシステムブラウザ(aws.browser.v1)は対象外です。
PUBLICモードのブラウザは、AWSが管理するネットワークから直接インターネットへ通信します。
この通信はお客様のVPCを経由しないため、セキュリティグループやAWS Network Firewallで通信先を制限できず、VPCフローログにも記録されません。

エージェントがプロンプトインジェクションを含むWebページを閲覧すると、セッション内で扱った社内データや認証情報を任意の外部サイトへ送信するよう誘導されるおそれがあります。
PUBLICモードでは、この情報漏えいを通信先の制限で防ぐことも、後から通信記録で追跡することもできません。
送信元IPアドレスはアカウントに固有ではないAWSのアドレスのため、接続先での許可リスト登録にも使えません。
VPCモードのブラウザは、作成時に指定したプライベートサブネットのネットワークインターフェイス(ENI)を経由して通信します。
セキュリティグループ、Network Firewall、VPCフローログで通信先の制限と記録ができ、インターネット向けの通信の送信元IPアドレスはNAT GatewayのElastic IPになります。
ただし、VPCモードにするだけでは、NAT Gateway経由で任意の宛先と通信できる状態は変わりません。
ポートと宛先の範囲は手順3のセキュリティグループで、閲覧するドメインは「追加の対策(任意)」で制限します。

なお、エージェントやユーザーからブラウザへの接続は、ネットワークモードにかかわらずIAM認証が必要なAgentCoreのAPIを経由します。
PUBLICモードのリスクは、ブラウザからのアウトバウンド通信にあります。
本番環境と本番以外の環境のどちらでも対応が必要です。
修復手順
1. 関係者に確認
カスタムブラウザには update-browser に相当する更新操作がないため、ネットワークモードは作成後に変更できません。
VPCモードのカスタムブラウザを新しく作成し、エージェントやアプリケーションの参照先を切り替えてから、PUBLICモードのカスタムブラウザを削除します。
ブラウザIDが変わるため、作業前に以下を関係者に確認してください。
- 対象のカスタムブラウザを参照しているエージェントやアプリケーション
- ブラウザIDの切り替え作業(設定変更やデプロイ)の担当者と実施タイミング
- ブラウザが閲覧するWebサイトやアクセスするVPC内のリソース(セキュリティグループと、導入する場合はNetwork Firewallなどで許可する通信先の洗い出しに使います)
- NAT Gatewayの利用料金(VPCモードでインターネット上のWebサイトを閲覧する場合に必要です)
2. PUBLICモードのカスタムブラウザを特定する
Security Hubコンソールの[コントロール]から「BedrockAgentCore.5」を検索し、失敗しているリソースを確認します。
AgentCoreコンソールでは、ナビゲーションペインの[コネクター]>[ブラウザ]からカスタムブラウザを選択し、[ツールの詳細]の[セキュリティ]で確認できます。
PUBLICモードの場合は「パブリック」と表示されます。
AWS CLIでは、get-browser の networkConfiguration.networkMode で確認できます。
aws bedrock-agentcore-control get-browser \
--browser-id <ブラウザID> \
--query networkConfiguration
{
"networkMode": "PUBLIC"
}
list-browsers の結果にはネットワークモードが含まれないため、リージョン内のカスタムブラウザをまとめて確認する場合は以下のように実行します。
for id in $(aws bedrock-agentcore-control list-browsers --type CUSTOM \
--query 'browserSummaries[].browserId' --output text); do
echo "$id $(aws bedrock-agentcore-control get-browser --browser-id $id \
--query networkConfiguration.networkMode --output text)"
done
あわせて、新しいカスタムブラウザで同じ値を設定するため、PUBLICモードのカスタムブラウザの次の設定値を控えておきます。
get-browserの出力:executionRoleArn(IAMロール)、recording(セッション記録の有無と記録先のS3バケット)、browserSigning(ウェブボット認証)- AgentCoreコンソールの詳細画面: [ブラウザ管理ポリシー]、[ルート認証局]、[ツールのファイルシステム設定]
3. VPCモードの前提条件を準備する
プライベートサブネット
可用性のため、異なるアベイラビリティーゾーンにあるプライベートサブネットを2つ以上用意します。
カスタムブラウザは、AgentCoreがサポートするアベイラビリティーゾーンのサブネットにしか作成できません。
サポート対象のアベイラビリティーゾーンIDは、AgentCoreデベロッパーガイドの「サポートされているアベイラビリティーゾーン」に記載されています。
AgentCoreがVPC内に作成するネットワークインターフェイスにはプライベートIPアドレスのみが割り当てられるため、パブリックサブネットを指定してもインターネットには接続できません。
NAT Gateway
インターネット上のWebサイトを閲覧する場合は、プライベートサブネットのルートテーブルに、0.0.0.0/0 を宛先とするNAT Gatewayへのルートを追加します。
セキュリティグループ
ブラウザに関連付けるセキュリティグループには、インバウンドルールを設定しません。
アウトバウンドルールは、作成時に追加される「すべてのトラフィック」を許可するルールを削除し、ブラウザに必要な通信だけを許可します。
- インターネット上のWebサイト: TCP 443、宛先
0.0.0.0/0 - VPC内のリソース: 宛先にそのリソースのセキュリティグループを指定し、必要なポートのみ。リソース側のセキュリティグループでも、ブラウザのセキュリティグループからのインバウンドを許可します
セキュリティグループでは宛先をドメインで指定できないため、閲覧するドメインの制限は「追加の対策(任意)」のNetwork FirewallまたはRoute 53 Resolver DNS Firewallで行います。
4. VPCモードのカスタムブラウザを作成する
カスタムブラウザを作成するIAMユーザーやロールには iam:CreateServiceLinkedRole の権限が必要です(BedrockAgentCoreFullAccess に含まれます)。
AgentCoreコンソールを開き、ナビゲーションペインの[コネクター]>[ブラウザ]を選択します。
[ブラウザ]の一覧で[作成]を選択します。
[ブラウザツールの詳細]の[ツール名]に、新しいカスタムブラウザの名前を入力します。

[ツール設定]の[ブラウザアクティビティを記録する]は、既定で[記録を有効にする]にチェックが入っています。
既存のカスタムブラウザで記録を使っている場合は、手順2で控えた記録先のS3バケットを[S3 の URI]に指定します。使っていない場合はチェックを外します。
[ツール設定]の[追加設定]を展開します。
[セキュリティ]の既定値は[パブリック]のため、[VPC (仮想プライベートクラウド)]を選択します。
[VPC ID][サブネット][セキュリティグループ]に、手順3で用意したVPC、プライベートサブネット、セキュリティグループを指定します。

そのほかの設定([ブラウザ管理ポリシー]、[ルート認証局]、[ウェブボット認証]、[ツールのファイルシステム設定]、[Permissions]のIAMロール)は、手順2で控えた値に合わせて設定します。
[作成]を選択します。
作成後の詳細画面で、[セキュリティ]が「VPC (仮想プライベートクラウド)」になっていることを確認します。
VPCモードでは、[ステータス]が「Creating」から「Ready」になるまで数分かかります。
[ブラウザツール ID]の値は、次の手順で新しい参照先として使います。

AWS CLIでは以下のように作成します。
aws bedrock-agentcore-control create-browser \
--name <ブラウザ名> \
--network-configuration '{
"networkMode": "VPC",
"vpcConfig": {
"subnets": ["<サブネットID1>", "<サブネットID2>"],
"securityGroups": ["<セキュリティグループID>"]
}
}'
セッション記録などを設定する場合は、--recording、--execution-role-arn、--browser-signing に手順2で控えた値を指定します。
ブラウザ管理ポリシー、ルート認証局、ツールのファイルシステム設定を使っている場合は、create-browser に対応するオプションがないため、コンソールで作成します。
出力の browserId が新しいブラウザIDです。
get-browser で、status が READY、networkMode が VPC になっていることを確認します。
aws bedrock-agentcore-control get-browser \
--browser-id <新しいブラウザID> \
--query '{status:status,networkConfiguration:networkConfiguration}'
{
"status": "READY",
"networkConfiguration": {
"networkMode": "VPC",
"vpcConfig": {
"securityGroups": [
"sg-xxxxxxxxxxxxxxxxx"
],
"subnets": [
"subnet-xxxxxxxxxxxxxxxxx",
"subnet-yyyyyyyyyyyyyyyyy"
]
}
}
}
5. ブラウザIDを切り替える
エージェントやアプリケーションがブラウザセッションを開始する際に指定しているブラウザIDを、手順4で作成したカスタムブラウザのIDに変更します。
API(StartBrowserSession)では browserIdentifier に指定する値です。
エージェントの実行ロールなどのIAMポリシーで、ブラウザセッションの操作の対象(Resource)をPUBLICモードのブラウザのARNに限定している場合は、新しいブラウザのARNに変更します。
切り替え後、エージェントが想定どおりにWebサイトを閲覧できることを確認します。
VPC内のリソースにアクセスする場合は、そのリソースにもアクセスできることを確認します。
失敗する場合は、プライベートサブネットのルートテーブル、セキュリティグループのアウトバウンドルール、Network FirewallやDNS Firewallを導入済みの場合はそのルールを確認してください。
6. PUBLICモードのカスタムブラウザを削除する
ブラウザIDの切り替えが完了したら、PUBLICモードのカスタムブラウザを削除します。
AgentCoreコンソールの[コネクター]>[ブラウザ]で対象のカスタムブラウザを選択し、[削除]を選択します。
AWS CLIでは以下のように削除します。
aws bedrock-agentcore-control delete-browser \
--browser-id <PUBLICモードのブラウザID>
7. 修復確認
Security Hubコンソールで、BedrockAgentCore.5のコントロールのステータスが「成功」になっていることを確認します。
追加の対策(任意)
通信先の制限と記録
業務で閲覧するドメインが決まっている場合は、Network Firewallで許可するドメインを指定し、それ以外の宛先への通信を拒否してください。
DNS Firewallでも許可していないドメインの名前解決を拒否できますが、IPアドレスを直接指定した通信は防げません。
通信を記録するため、プライベートサブネットまたはVPCでVPCフローログも有効にしてください。
宛先のドメイン名を記録する場合は、Route 53 Resolverのクエリログも有効にします。
PUBLICモードのカスタムブラウザの作成を防止する
PUBLICモードのカスタムブラウザの新規作成は、IAMポリシーやSCP(サービスコントロールポリシー)で防止できます。
AWS Organizationsの複数アカウントにまとめて適用する場合はSCP、特定のIAMユーザーやロールに適用する場合はIAMポリシーを使います。
条件キー bedrock-agentcore:subnets と bedrock-agentcore:securityGroups がない bedrock-agentcore:CreateBrowser を拒否します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyPublicAgentCoreBrowser",
"Effect": "Deny",
"Action": "bedrock-agentcore:CreateBrowser",
"Resource": "*",
"Condition": {
"Null": {
"bedrock-agentcore:subnets": "true",
"bedrock-agentcore:securityGroups": "true"
}
}
}
]
}
最後に
カスタムブラウザをVPCモードに移行すると、ブラウザからのアウトバウンド通信をお客様のVPCで制御し、記録できるようになります。
最後までお読みいただきありがとうございました!どなたかのお役に立てれば幸いです。








