はじめに
GMOコネクトの永田です。
生成AIを使う機能のセキュリティ確認で、「AIの事業者に送った文は、不正利用の監視のために最大30日保存される」という回答案を確かめることになりました。OpenAI の API について、以前からよく聞く数字です。そのまま通してよいと思っていました😇
確かめてみると、呼び方によってはこの一文が成り立ちませんでした。Amazon Bedrock(以下 Bedrock)で OpenAI の GPT-6 Luna を東京から呼ぶと、store を書かなかった応答は送った文ごと30日残り、あとから取り出せました。置き場所は東京ではなく、処理した米国のリージョンです。
この記事は、送った文が何日・どこに残るかを、公式文書と実機で確かめた記録です。個人情報保護法などの法的な判断には踏み込まず、判断に使える事実だけを並べます。前回は、送る前に個人情報を伏せる話でした。
先にまとめ
Bedrock で GPT-6 Luna を東京から呼んだとき、送った文が残る経路は3つありました。
| 残るもの | 期間 | 置き場所 | 利用者から確かめられるか | 残さない方法 |
|---|---|---|---|---|
Responses API で保存される応答(store を書かないと保存される) |
30日。その後は自動で削除 | 処理したリージョン。実測では2つの時間帯の111回すべて us-east-1
|
GET で取り出せた。続きの呼び出しで、送った文をそのまま返した | 毎回 store=false を付ける。作った後なら DELETE で消せる |
分類器が検知した通信(store に関係なく) |
最大30日 | 処理したリージョン | どのリクエストが保持されたかは分からない | 完全な ZDR(データを保持しない契約)を AWS のアカウントチームに申請する |
| 参考: Claude Fable 5・5.1 の全通信 | 最大30日。検知された通信は AWS の人が確認し得る | 処理したリージョン | 分からない | 保持を許す設定(aws_review 以上)にしないと呼べない |
-
storeの既定は true です。書かずに作った応答は、作成時に"store": trueと返り、GET で3回中3回取り出せました。store=falseは3回中3回 404 でした - 東京から global で呼んだ111回(約10時間あけた2つの時間帯)は、すべて
us-east-1で処理されました。公式文書では、保存された応答も検知で保持された通信も、処理したリージョンに置かれます - アカウントの保持の設定を
none(保持しない)にすると、GPT-6・6.1・5.6 の各モデルと Claude Fable は使えません。モデルごとに受け付ける設定が公開されていて、そこにnoneがありません - 他社にも「最大30日」で済まない経路があります。OpenAI の Responses API は「少なくとも30日」、Gemini API の不正利用の検知は55日、Vertex AI は最大90日、Anthropic は違反と判定されると最大2年です
1. 何をどう確かめたか
GPT-6 Luna は、東京・大阪からは global の推論プロファイル(世界の商用リージョンのどこかで処理する呼び方)でしか呼べません(モデルカード)。日本の中で処理する jp. の呼び方はありません。
Bedrock の Responses API(OpenAI の Responses API と同じ形の API)には、bedrock-runtime と bedrock-mantle の2つの入口があります。公式が新規に勧めている bedrock-runtime を使いました。
| 項目 | 内容 |
|---|---|
| 観測日 | 2026年10月8日21時台と、約10時間後の10月9日7〜8時台(日本時間) |
| アカウント | 検証用の AWS アカウント。保持の設定は既定の inherit のままで、変更していない |
| 呼んだ場所 | 東京リージョン(ap-northeast-1)の bedrock-runtime。Files API の確認だけ us-east-1 の bedrock-mantle(1回) |
| モデル | global.openai.gpt-6-luna |
| 呼び方 | Responses API(/openai/v1/responses、AWS の認証情報で署名)と Converse |
| 回数 | Responses API は store なし・store=false・store=true を各3回作り、作成直後と約10時間後に GET。Converse は各時間帯で50回。ファイルの渡し方(Files API・file_url・file_data)は各1〜2回 |
| 送った文 | 自作の1文(「保存の確認用の文です。りんごとみかんを1つずつ足すと、果物はいくつですか。…」)。ファイルは、合言葉を1行書いた自作のテキストと PDF を、東京に作った使い捨ての S3 バケットに置いた。個人情報は含まない |
2. 「最大30日」はどこから来て、どこで崩れるか
「最大30日」は、OpenAI の不正利用監視のログの既定値です(Data controls)。
By default, abuse monitoring logs are generated for all API feature usage and retained for up to 30 days, unless longer retention is required by law, or is reasonably necessary to protect our services or any third party from harm.
これはログの話で、API の機能が自分で保存するもの(会話の状態やファイル)は別に数えます。Bedrock でも、各社の API でも、この2つを分けると「最大30日」で済まない経路が出てきます。
| 事業者 | 30日を超える、または30日で消えない経路 | 出典 |
|---|---|---|
| OpenAI API | Responses API の store(既定 true)は "stored for at least 30 days"(少なくとも30日)。Conversations と Files(purpose=batch 以外)は削除するまで。Files は ZDR の対象外 |
Responses API、Files API |
| Amazon Bedrock | Responses API の store(既定 true)は30日。GPT-6 系は検知した通信を最大30日、Claude Fable 5・5.1 は全通信を最大30日 |
Responses API、abuse detection |
| Gemini API | 不正利用の検知のため、プロンプトと出力を55日 | 利用ポリシー |
| Vertex AI | 分類器で疑わしいとされたプロンプトは最大90日(Google Cloud の利用規約で使う場合) | abuse monitoring |
| Anthropic API | 利用ポリシー違反と判定されると、入出力は最大2年 | プライバシーセンター |
OpenAI を直接呼ぶ場合、Files API に上げたファイルは削除するまで残り、ZDR を結んでも対象外です(Data controls の表で /v1/files は "Until deleted"、ZDR eligible は "No")。同じ表で /v1/files の不正利用監視のログは30日なので、既定ではファイルを消しても、ログには最大30日残ります。期限は expires_after(1時間〜30日)で付けられます。
Bedrock では、推論で使うファイルを Files API に預けられませんでした。bedrock-runtime の API 一覧に Files API は無く(endpoints)、bedrock-mantle で purpose=user_data を指定して上げると、400(Invalid file purpose: user_data)で断られました。
リクエストの input_file に URL(file_url)を書いて、S3 から読ませる形も試しました。S3 以外の URL は、S3 の presigned URL(署名付き URL)も含めて Only S3 URLs are supported for file_url. で断られます。s3:// で渡すと、filename を添えない場合はテキストも PDF も Unsupported file type: 'unknown' で断られました。添えると、テキストは Text-based files (TXT, MD, HTML, CSV) are only supported via inline file_data, not file_url で断られ、PDF は download returned 403 Forbidden で読み込めませんでした。バケットポリシーで bedrock.amazonaws.com に読み取りを許しても同じで、通す条件は文書に見つかりませんでした。
ファイルの中身をリクエストに入れて送る形(file_data)なら、PDF を読めました。試した範囲ではこの形しか通らず、残り方は送った文と同じです。
Bedrock は既定では入出力を保存しません("by default, Amazon Bedrock does not store model inputs or outputs")。ただし、同じページにモデルごとの例外が並んでいます。
For OpenAI GPT-6 Astra, GPT-6 Sol, GPT-6 Luna, … classifier-flagged traffic will be retained for up to 30 days for automated offline abuse detection.
For Anthropic Claude Fable 5 and Claude Fable 5.1, all traffic will be retained for up to 30 days for automated offline abuse detection. Classifier-flagged traffic will be subject to potential human review performed by AWS.
GPT-6 Luna で保持されるのは、分類器が検知した通信だけです。Claude Fable は全通信で、検知された通信は AWS の人が確認し得ます。
3. store を書かずに作った応答は、あとから丸ごと取り出せた
Responses API は、store を書かないと応答を保存します。Bedrock の公式文書は次のとおりです(Responses API)。
When store is true (the default), Amazon Bedrock retains the response, including the input and output, for 30 days. … After 30 days, the response is automatically deleted and is no longer retrievable.
既定が true なのは、OpenAI の Responses API の仕様に合わせたためと書かれています。送った文を残したくないなら、毎回 store=false を付けるよう勧めています。
本当に残るのかを、作った直後に取り出して確かめました。
POST /openai/v1/responses {"model": "global.openai.gpt-6-luna", "input": "保存の確認用の文です。…"}
→ 応答に "store": true
GET /openai/v1/responses/{id}
→ 200。応答全体が返る
POST /openai/v1/responses {"previous_response_id": "{id}", "input": "直前に私が送った文を、一字一句そのまま繰り返してください。", "store": false}
→ 送った文をそのまま返した
| 条件 | 作成時の store
|
作成直後の GET | 続きの呼び出しで元の文を繰り返させる |
|---|---|---|---|
store なし |
true と返る |
3回中3回 200 | 元の文を一字一句返した |
store=false |
false |
3回中3回 404 |
previous_response_not_found で失敗 |
store=true |
true |
3回中3回 200 | 元の文を一字一句返した |
GET で返るのは出力側です。入力を取り出す input_items は、bedrock-runtime で呼ぶと UnknownOperationException が返りました。それでも、続きの呼び出しで元の文が返ってくるので、送った文はサーバー側に残っています。
保存した応答は、DELETE /openai/v1/responses/{id} で消せました(200、"deleted": true。直後の GET は 404)。
約10時間後にもう一度 GET すると、store なしの残り2つと store=true の3つは200で取り出せ、store=false の3つは404のままでした。store なしの応答に続きの呼び出しをすると、このときも元の文がそのまま返りました。
30日を過ぎて本当に消えるかは、今度確かめたいと考えています。
4. 東京から呼んでも、置き場所は処理したリージョン
global の呼び方では、どのリージョンで処理したかが CloudTrail に残ります(cross-Region inference)。Converse と Responses API の呼び出しは管理イベントなので、トレイルを作らなくても東京のイベント履歴に出ます。
aws cloudtrail lookup-events --region ap-northeast-1 \
--lookup-attributes AttributeKey=EventName,AttributeValue=Converse \
--query 'Events[].CloudTrailEvent' --output json \
| jq -r '.[] | fromjson | .additionalEventData.inferenceRegion' | sort | uniq -c
| 呼び方 | 時間帯(日本時間) | 回数 | 処理したリージョン(inferenceRegion) |
|---|---|---|---|
| Converse | 1回目(21時台) | 50回 |
us-east-1 が50回 |
| Responses API(3章の作成と続き) | 1回目(21時台) | 成功した11回 |
us-east-1 が11回 |
| Converse | 2回目(約10時間後の7時台) | 50回 |
us-east-1 が50回 |
測ったのは2つの時間帯の111回だけなので、ほかの時間帯や混み具合によっては、別のリージョンに行くかもしれません。行き先の候補を前もって調べる方法も見つかりませんでした。モデルカードは US Geo(us.)の行き先だけを載せていて、GetInferenceProfile を東京で呼んでも、global はリージョンを持たない arn:aws:bedrock:::foundation-model/openai.gpt-6-luna が返るだけでした。
保存される場所について、Responses API のページは次のように書いています。
On bedrock-runtime, a request that uses cross-Region inference can be processed in another AWS Region, and the response is stored in the Region that processed it — so a request that uses a global inference profile can store data in any commercial Region that profile routes to. If you have data residency requirements, use a geographic inference profile rather than a global one.
分類器が検知して保持する通信も "stored in destination regions (i.e., the region where your inference request is processed)" です。今回の呼び出しなら、保存された応答は us-east-1 に置かれたことになります。どの通信が検知されて保持されたかは、利用者には知らされません。違反の可能性を見つけたときに、AWS アカウントのメールアドレスに問い合わせが来る、とだけ書かれています。
OpenAI の API を直接呼ぶ場合も、似た形です。日本のデータレジデンシー(jp.api.openai.com)で日本に置かれるのは、保存されるデータだけです。推論も選んだ地域で行う「regional processing」に対応しているのは米国・欧州・アラブ首長国連邦で、日本は対象外です。日本を選んだ場合は "OpenAI may also process and temporarily store Customer Content outside of the Region to deliver the services." とされています(Data controls)。日本の外のどこで処理するかは書かれていません。
5. 保持させない設定にすると、GPT-6 Luna は使えない
Bedrock には、アカウントの保持の設定(data retention)があります。リージョンごとに設定し、ほかのリージョンには伝わりません。
| モード | 内容 |
|---|---|
none |
保持しない。保持が要るモデルへのリクエストは断られる。store=true も断られる |
default |
モデルごとの既定に従う(GPT-6 Luna なら、検知した通信を保持) |
aws_review |
AWS の人による確認を許す。Claude Fable はこれ以上でないと呼べない |
inherit |
上の階層に従う。新しいアカウントの既定 |
検証用のアカウントは、東京も us-east-1 も inherit でした(aws bedrock get-account-data-retention)。
設定を none に変えて呼ぶ確認はしていません。代わりに、bedrock-mantle のモデル一覧(GET /v1/models)が返す、モデルごとに受け付ける設定(allowed_modes)を読みました(us-east-1、60モデルから抜粋)。
| モデル |
none を受け付けるか |
既定の設定のままで |
|---|---|---|
openai.gpt-6-luna・gpt-6-sol・gpt-6-astra・gpt-6.1-sol
|
受け付けない | 使える |
openai.gpt-5.6-sol・gpt-5.6-terra・gpt-5.6-luna
|
受け付けない | 使える |
openai.gpt-oss-20b・gpt-oss-120b
|
受け付ける | 使える |
anthropic.claude-opus-5・claude-opus-5-5
|
受け付ける | 使える |
anthropic.claude-fable-5 |
受け付けない(aws_review 以上だけ) |
使えない(unavailable) |
送った文を一切残さないことを優先すると、OpenAI の新しいモデルと Claude Fable は選べません。GPT-6 Luna を保持なしで使うには、アカウントチームに完全な ZDR を申請します。
なお、store=false にしても保持が無いとは限りません。保持の設定のページには "Some models may still retain data for safety review even when store=false — in this case, data is retained but is not retrievable by the customer through GET /v1/responses/{id}." とあります。OpenAI 側の Bedrock の案内も "Setting store: false does not guarantee ZDR." です(OpenAI models in Amazon Bedrock)。一方、Responses API のページは store=false を "does not retain any data" と書いていて、文書どうしで食い違っています。
6. 判断する人に渡すときに添えること
セキュリティや法務の担当に渡すときは、少なくとも次の事実を添えると、回答の前提が揃います。
| 項目 | GPT-6 Luna を Bedrock で東京から呼んだ場合 |
|---|---|
| 誰が持つか | AWS。"AWS does not share request or response content with OpenAI when the effective retention mode is default or none."(OpenAI の Bedrock の案内) |
| 何のために |
store の応答は続きの呼び出しのため。検知した通信は "automated offline abuse detection" |
| 何日 |
store の応答は30日で、過ぎると自動で削除("for 30 days")。検知した通信は最大30日("up to 30 days")。OpenAI を直接呼ぶ場合の store は「少なくとも30日」("at least 30 days")で、書き方が違う |
| どこに | 処理したリージョン(global ならどの商用リージョンもあり得る。今回の111回は us-east-1) |
| 人が見るか | GPT-6 Luna では記載なし。Claude Fable 5・5.1 は検知分を AWS が確認し得る |
| 止められるか |
store=false、DELETE、完全な ZDR の申請。保持の設定 none では GPT-6 Luna が使えない |
| 契約の相手 | Bedrock の OpenAI のモデルは "sold by OpenAI"(第三者モデルの条件) |
公式文書どうしの食い違いも、そのまま添えます。
- 保存の場所: Bedrock の FAQ は "stored at rest in the AWS Region where you are using Amazon Bedrock"、abuse detection と Responses API のページは処理したリージョン
-
store=false: Responses API のページは「保持しない」、保持の設定のページは「安全目的の保持はあり得る」 - Claude Fable 5・5.1 の保持期間: AWS の abuse detection のページは "up to 30 days"(最大30日)、Anthropic の Covered Models のページは提供先に Amazon Bedrock を含めたうえで "retained for at least 30 days"(少なくとも30日)
まとめ
- Responses API は
storeを書かないと、送った文ごと30日残ります。Bedrock でも、作った直後の GET で3回中3回取り出せ、続きの呼び出しで元の文がそのまま返りました - 東京から global で呼んだ111回は、すべて
us-east-1で処理されました。保存された応答も検知で保持された通信も、処理したリージョンに置かれます - 保持しない設定(
none)では、GPT-6・6.1・5.6 の各モデルと Claude Fable が使えません。store=falseでも、安全目的の保持は無いとは言い切れません - 「最大30日」は不正利用監視のログの数字です。各社とも、30日を超える経路や、削除するまで残る経路があります
「最大30日」と答える前に、実装が store を指定しているか、どのモデルを、どの推論プロファイル(global か、us. などの地域内か)で呼んでいるかを確かめる必要がありました。何が何日残るかは store とモデルで、どこに残るかは推論プロファイルで決まります。
最後に、GMOコネクトではサービス開発支援や技術支援をはじめ、幅広い支援を行っておりますので、何かありましたらお気軽にお問合せください。