Private Safety Processing を併用したゼロデータ保持(PSP 併用の ZDR)では、OpenAI が顧客のプロンプトや応答を保持することなく、オフラインで安全性レビューを自動実行できます。このガイドでは、PSP 併用の ZDR の仕組みと、お客様が運用上担う責任について説明します。アーキテクチャとセキュリティモデルの詳細は、Private Safety Processing 技術ホワイトペーパーを参照してください。
3 つの設計原則
- コンテンツはお客様自身が管理
お客様のコンテンツは、お客様が管理するストレージに保存されます。保護された安全性レコードの取得と復号に必要なアクセス権限と、Enterprise Key Management(EKM)による鍵の使用許可は、お客様が管理します。 - 人によるレビューの排除
安全性レビューを通じて、OpenAI の担当者が保護された顧客コンテンツを新たに閲覧できるようになってはなりません。暗号化された顧客コンテンツの復号は、人によるアクセスを無効にし、ハードウェアによるアテステーションを受けた、承認済みの安全性ランタイム内で行われます。PSP の保護下にあるレビュー環境から平文で出力されるのは、範囲を限定した安全性シグナルと運用メタデータのみです。 - 安全性の確保に限定したコンテンツ保持
お客様が管理するストレージ内のコンテンツは、承認された安全性確保の目的にのみ使用されます。顧客コンテンツをモデルのトレーニングに使用したり、OpenAI やそのパートナーの他部門に提供したりすることはできません。
PSP 併用の ZDR の仕組み
このアーキテクチャは、次の 2 つの処理フローで構成されます。
- API リクエストと保持のフローでは、対象となる API コンテンツを保護し、お客様が管理するストレージコンテナに保持します。
- 非同期安全性パイプラインでは、承認された自動安全性レビューのためにのみレコードを取得し、範囲を限定した安全性の判定結果を出力します。
API リクエストと保持
お客様のプロンプトとモデルの応答からなるやり取りは、安全性分類器によるレビューへの振り分け、または承認されたサンプリングポリシーに基づいて選定されます。レビュー対象に振り分けられた時点で、ポリシー違反が確定するわけではありません。
システムはレコードを暗号化し、お客様のリージョンのクラウドストレージに書き込みます。OpenAI が保持するのは、運用メタデータと保存先への参照を含むインデックスのみで、コンテンツのコピーは保持しません。暗号化と保存は非同期で実行されるため、推論を妨げません。


非同期安全性パイプライン
PSP 併用の ZDR では、お客様のストレージから暗号化されたレコードを取得し、復号可能かどうかを確認します。安全性レビューランタイムは、人によるアクセスを無効にし、ハードウェアによるアテステーションを受けたコンピューティング環境です。OpenAI のワークロードのうち、顧客コンテンツを復号できるのはこのランタイムだけになるよう設計されています。承認されたレビュー用プロンプトと、顧客コンテンツを開示しない出力スキーマを使用して、安全性レビューを自動実行します。
レビュー環境から平文で出力できるのは、あらかじめ範囲を限定して定義した安全性シグナルと、承認された運用メタデータのみです。詳細な結果はランタイムから出力する前に暗号化され、元のレコードと同じ有効期限でお客様のクラウドストレージに保存されます。PSP 併用の ZDR では、レコードを暗号化し、TTL を 30 日に設定してお客様のリージョンのクラウドストレージに書き込みます。


顧客コンテンツの暗号化
お客様のストレージに保持される各レコードには、次の 2 層の暗号化が適用されます。
- OpenAI が管理する HPKE 暗号化: 内側の暗号化層により、顧客コンテンツを復号できるのは、認可された安全性レビューランタイムに限られます。
- お客様が管理する暗号化: Enterprise Key Management(EKM)は、お客様が管理する鍵管理サービスを使って外側の暗号化層を追加します。
EKM が有効な場合、保存済みのレコードを復号するには、OpenAI の内側の復号鍵に加えて、お客様が管理する鍵の使用許可が必要です。その許可を取り消すと、保持されているレコードは復号できなくなります。ただし、レコードが削除されたり、完了済みの処理が取り消されたりすることはありません。
この追加の制御を利用するために、EKM を有効にすることを推奨します。EKM 鍵を保管する KMS は、設定したストレージとは異なるリージョンに配置できます。鍵の使用許可とその取り消しについては EKM 技術 FAQ を、暗号化、コンフィデンシャルコンピューティング、ガードレール、透明性については技術ホワイトペーパーを参照してください。
PSP 復号では、お客様が管理する非対称鍵を使用して、接続先のクラウドストレージに保存された PSP レコード内の顧客コンテンツを復号できます。OpenAI が使用するのは公開鍵で、秘密鍵はお客様のクラウド鍵管理サービス内にとどまります。この機能は EKM とは独立しており、OpenAI の担当者にコンテンツへのアクセス権を与えるものではありません。
非対称鍵の設定では、AWS KMS、Azure Key Vault、Google Cloud KMS の設定方法と鍵の登録手順を説明しています。PSP 復号を利用できるかどうかと、その有効化については、OpenAI の担当者に確認してください。鍵を登録するだけでは、PSP の有効化やストレージの設定は行われません。その鍵で復号できるのは、その鍵に対して PSP 復号を有効にした状態で書き込まれたレコードのみです。既存のレコードは変換されません。
復号手順、レコード形式、鍵導出については、PSP レコードの復号手順を参照してください。
プロジェクトの読み取りと書き込みが可能な組織の Admin API キーを使用します。OPENAI_ADMIN_KEY に安全な方法で読み込んでください。プロジェクトの推論用キーは使用できません。以下の例では curl と Bash 互換のシェルを使用します。
組織 ID、プロジェクト ID、鍵の登録時に返された extkey ID を設定します。
123456API_BASE="https://api.openai.com/v1"
ORG_ID="<OPENAI_ORG_ID>"
PROJECT_ID="<CUSTOMER_PROJECT_ID>"
KEY_ID="<EXTERNAL_KEY_ID>"
OPENAI_ADMIN_KEY="<OPENAI_ADMIN_KEY>"
PROJECTS_URL="$API_BASE/organization/projects"psp_decryption_key_id に、同じ組織で返された extkey ID を設定します。プロジェクトの EKM 鍵を指定する external_key_id は変更しないでください。
12345curl --fail-with-body -sS "$PROJECTS_URL/$PROJECT_ID" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $ORG_ID" \
-H "Content-Type: application/json" \
--data "{\"psp_decryption_key_id\":\"$KEY_ID\"}"成功すると HTTP 200 が返ります。プロジェクト情報を取得し、選択した鍵を確認します。
123curl --fail-with-body -sS "$PROJECTS_URL/$PROJECT_ID" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $ORG_ID"プロジェクト一覧にも psp_decryption_key_id が含まれます。鍵の登録情報の api_project_ids には、その鍵を使用するプロジェクトが表示されます。psp_decryption_key_id を省略すると、現在の選択が維持されます。同じ ID を再度選択することもできます。
まず、PSP 復号用の鍵の選択に示した API 用の変数を設定します。
null を送信すると選択が解除されます。フィールドを省略すると、現在の選択が維持されます。
12345curl --fail-with-body -sS "$PROJECTS_URL/$PROJECT_ID" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $ORG_ID" \
-H "Content-Type: application/json" \
--data '{"psp_decryption_key_id":null}'お客様の AWS S3 バケット、Azure Blob コンテナ、Google Cloud Storage バケット、または Oracle Cloud Infrastructure(OCI)Object Storage バケットを OpenAI プロジェクトに接続します。利用するクラウドの設定手順を完了してから、接続を登録して検証してください。
PSP 併用の ZDR はプロジェクト単位で有効にします。有効にすると、そのプロジェクトのすべての API トラフィックに PSP ポリシーが適用されます。通常は PSP を必要としないモデルへのリクエストも対象です。対象モデルで PSP を併用せずに ZDR を利用するには、PSP なしの ZDR を設定した別のプロジェクトからリクエストを送信してください。
事前準備
- ゼロデータ保持の承認を受けている組織は、API コンソールから直接、PSP 併用の ZDR を設定できます。ZDR の承認を受けていない場合は、利用資格と承認要件を参照してください。
- サポート対象のストレージリージョンのうち、プロジェクトのデータレジデンシー要件を満たすリージョンであれば、どれでも選択できます。クラウドアカウントでストレージを作成し、アクセス権を委任する権限が必要です。
- API コンソールでのストレージの登録と検証は、組織管理者が行ってください。Management API を使用する場合は、OpenAI 組織の Admin API キーを使用します。プロジェクト管理者は手順とステータスを確認できます。プロジェクトの推論用キーで Management API を呼び出すことはできません。
API コンソールでのストレージ設定画面の表示
- Organization settings > Data controls > Data retention を開き、Connect storage を選択します。
- Connect external storage で AWS、Azure、GCP、OCI のいずれかを選び、プロジェクトを選択します。Connect storage は Project Settings > Data retention からも開けます。
- 以下のクラウド設定を完了します。次に、ダイアログにストレージの詳細を入力し、Connect and validate を選択します。
クラウド別の設定
AWS を使用する場合は、以下の手順を実行します。他のクラウドを使用する場合は、Azure Blob Storage、Google Cloud Storage、または OCI Object Storage に進んでください。
AWS の初期設定手順(2 分 10 秒、音声なし)。設定値は以下の手順を参照してください。
1. バケットの作成
プロジェクトのデータレジデンシーに対応するリージョンに専用の S3 バケットを作成します。データレジデンシーが無効の場合は、バケットのリージョンを自由に選択できます。
- ACL 無効の設定を維持します。
- パブリックアクセスをすべてブロックを有効にします。
- バケットの ARN を控えます。以下の手順で
CUSTOMER_BUCKET_ARNとして使用します。

2. ライフサイクルルールの設定
バケットの管理 > ライフサイクルルールを作成を開き、次のように設定します。
- ルール名:
psp-retention - プレフィックス:
openai/ - アクション: オブジェクトの現行バージョンを期限切れにする
- 経過日数: 30 日
ルールを有効にします。他のルールでこれらのレコードが 30 日より前に期限切れにならないことを確認してください。このルールはオブジェクトのライフサイクル上の有効期限を設定するものです。OpenAI の復号鍵の有効期限は別途設定されます。

3. アクセスポリシーの作成
IAM > ポリシー > ポリシーの作成で JSON を選択します。CUSTOMER_BUCKET_ARN をお客様のバケットの ARN(例:arn:aws:s3:::your-psp-bucket)に置き換え、ポリシーを psp-bucket-policy という名前で保存します。
123456789101112131415{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetLifecycleConfiguration",
"Resource": "CUSTOMER_BUCKET_ARN"
},
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
"Resource": "CUSTOMER_BUCKET_ARN/*"
}
]
}4. IAM ロールの作成
IAM > ロール > ロールを作成でカスタム信頼ポリシーを選択します。

以下のポリシーを使用します。CUSTOMER_PROJECT_ID をお客様の OpenAI プロジェクト ID に置き換えてください。OpenAI のプリンシパル ARN は変更しないでください。
1234567891011121314151617{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::790389265272:role/CustomerStorage"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": ["CUSTOMER_PROJECT_ID"]
}
}
}
]
}作成するロールに psp-bucket-policy をアタッチします。ロール名には psp-role を使用できます。ロールの ARN を CUSTOMER_ROLE_ARN として控えます。sts:ExternalId のプロジェクト ID は、登録先のプロジェクトと一致する必要があります。

ストレージの登録に進みます。
Azure を使用する場合は、以下の手順を実行します。
1. ストレージアカウントの作成
商用 Azure に専用アカウントを作成します。プロジェクトのデータレジデンシーに合う、承認済みの米国または EU のストレージリージョンを選択してください。
- アカウントの種類:
StorageV2 - 基本 > パフォーマンス: Standard
- 基本 > 冗長性: LRS または ZRS(推奨)
- 詳細設定 > アクセス層: ホット
- 詳細設定 > 階層型名前空間: 無効
- ネットワーク > パブリックネットワークアクセス: すべてのネットワークから有効
- セキュリティ > 安全な転送: HTTPS 必須、TLS 1.2 以上
- セキュリティ > Blob への匿名アクセス: 無効
- セキュリティ > ストレージアカウントキーへのアクセス: 無効
- セキュリティ > Microsoft Entra 認可: 有効
ネットワーク設定がお客様のクラウド要件を満たしていることを確認します。アカウントのプライマリ Blob エンドポイントを使用してください。ソブリンクラウドのエンドポイントやカスタムエンドポイントは使用できません。


2. コンテナの作成
ストレージアカウント > データストレージ > コンテナ > コンテナの追加でプライベートコンテナを作成します。コンテナ > 設定 > メタデータを開き、openai_organization_id にお客様の OpenAI 組織 ID を正確に入力します。このフィールドは必須です。
コンテナの利用を 1 つの OpenAI プロジェクトに制限するには、openai_project_id にも対象のプロジェクト ID を正確に入力します。このフィールドは任意です。設定した場合、その ID と一致するプロジェクトだけが、コンテナの登録と検証、およびコンテナ内のデータの読み書きを行えます。
openai_project_id を省略し、ストレージのリージョンが両方のプロジェクトのデータレジデンシー要件を満たしていれば、同じ組織の 2 つの OpenAI プロジェクトでコンテナを共有できます。コンテナの登録と検証は、プロジェクトごとに行ってください。
メタデータの追加先はコンテナです。ストレージアカウントや個々の Blob には追加しないでください。
3. ライフサイクルルールの設定
ストレージアカウント > データ管理 > ライフサイクル管理 > 追加で、専用アカウント内のすべてのブロック Blob の現行バージョン(ベース Blob)を対象とするルールを追加し、有効にします。
- アクション: 最終更新から 30 日後に削除
- フィルター: プレフィックスフィルター、タグフィルターともになし


4. OpenAI へのアクセス権の付与
ディレクトリ管理者に依頼して、OpenAI のアプリケーションをテナントに追加します。以下の CUSTOMER_TENANT_ID をお客様の Azure テナント ID に置き換えてください。アプリケーション ID は変更しないでください。
123az login --tenant '<CUSTOMER_TENANT_ID>'
az ad sp create --id 'e5627955-3059-4a88-89f8-73843190624d' \
--query '{name:displayName,objectId:id}' -o tableアプリケーションがすでに存在する場合は、az ad sp show に同じ --id とクエリを指定します。アプリケーション名と、テナント内でそのアプリケーションを識別するオブジェクト ID を控えます。
ストレージアカウントでストレージアカウント > アクセス制御(IAM)> ロールの割り当ての追加を開きます。閲覧者ロールを選び、アクセスの割り当て先をユーザー、グループ、またはサービスプリンシパルに設定して、CSG - Azure Blob Storage Prod を検索し、選択します。


次に、ストレージ Blob データ共同作成者ロールを選び、アクセスの割り当て先をユーザー、グループ、またはサービスプリンシパルに設定して、CSG - Azure Blob Storage Prod を検索し、選択します。
アプリケーションの資格情報は OpenAI が管理します。ストレージキー、SAS トークン、クライアントシークレットを作成したり共有したりしないでください。
1. バケットの作成
Cloud Storage > バケットで、OpenAI プロジェクトのデータレジデンシーに対応するロケーションにバケットを作成し、次のように設定します。
- 公開アクセスの防止:オン
- アクセス制御:均一
必要に応じて、デフォルトのデータ復元用の論理削除ポリシーを無効にできます。次の手順で、ライフサイクルルールによる削除を設定します。
グローバルプロジェクトの場合、使用するリージョンごとにこの GCP 設定を行います。

2. ライフサイクルルールの設定
バケットのライフサイクルタブで、オブジェクトを削除ルールを追加し、次の条件を設定します。
- オブジェクト名がプレフィックスと一致:
openai/ - 経過日数:30 日

3. Google Cloud プロジェクト番号の確認
IAM と管理 > 設定で、ワークロード ID プールを含むプロジェクトのプロジェクト番号(数値)をコピーします。この値を <CUSTOMER_GCP_PROJECT_NUMBER> として使用します。
4. ワークロード ID プールとプロバイダの作成
IAM と管理 > ワークロード ID 連携でワークロード ID プールを作成し、OpenID Connect(OIDC) プロバイダを次の設定で追加します。
- 発行元(URL):
https://accounts.google.com - 許可するオーディエンス:
<CUSTOMER_PROJECT_ID>(お客様の OpenAI プロジェクト ID)

属性マッピングを次のように設定します。
| Google 属性 | OIDC の値 |
|---|---|
google.subject |
assertion.sub |
attribute.openai_project |
assertion.aud |
以下の属性条件を設定します。OpenAI の本番 ID のサブジェクト 112981926705442324573 は変更しないでください。
assertion.sub == '112981926705442324573' && assertion.aud == '<CUSTOMER_PROJECT_ID>'
プール ID とプロバイダ ID を、それぞれ <CUSTOMER_GCP_POOL_ID> と <CUSTOMER_GCP_PROVIDER_ID> として控えます。
複数の OpenAI プロジェクトを使用する場合
同じお客様に属するプロジェクト間では、プールとプロバイダを再利用できます。許可するオーディエンスに各プロジェクト ID を追加し、属性条件を更新します。
assertion.sub == '112981926705442324573' &&
(assertion.aud == '<CUSTOMER_PROJECT_ID_1>' || assertion.aud == '<CUSTOMER_PROJECT_ID_2>')バケットへのアクセス権の付与とストレージの登録は、プロジェクトごとに行います。
5. ストレージ用カスタムロールの作成
IAM と管理 > ロールで、バケットが属する Google Cloud プロジェクトに次の権限を持つカスタムロールを作成します。
storage.buckets.get
storage.objects.create
storage.objects.get
storage.objects.delete6. OpenAI へのバケットアクセス権の付与
バケットの権限 > アクセス権を付与で、次のプリンシパルを追加します。
principalSet://iam.googleapis.com/projects/<CUSTOMER_GCP_PROJECT_NUMBER>/locations/global/workloadIdentityPools/<CUSTOMER_GCP_POOL_ID>/attribute.openai_project/<CUSTOMER_PROJECT_ID>手順 5 で作成したカスタムロールを選択します。

ストレージの登録に進みます。
1. バケットの作成
OCI コンソールでストレージ > オブジェクト・ストレージとアーカイブ・ストレージ > バケットを開き、専用バケットを作成します。プロジェクトのデータレジデンシーに合う商用リージョンを次の表から選択してください。
| 地域 | 対応する OCI リージョン |
|---|---|
| 米国 | us-ashburn-1、us-chicago-1、us-phoenix-1、us-sanjose-1 |
| EU | eu-amsterdam-1、eu-frankfurt-1、eu-madrid-1、eu-madrid-3、eu-marseille-1、eu-milan-1、eu-paris-1、eu-stockholm-1、eu-turin-1、eu-zurich-1 |
バケットは次のように設定します。
- ストレージ層: 標準(自動階層化は無効)
- 可視性: 非公開
- オブジェクトのバージョニング: 無効
レプリケーションは無効のままにします。バケット名とリージョン識別子を、それぞれ CUSTOMER_BUCKET_NAME と CUSTOMER_OCI_REGION として控えます。プロファイルを開き、テナンシ、お客様のテナンシ名の順に選択し、その OCID を CUSTOMER_TENANCY_OCID としてコピーします。テナンシは、バケットのリージョンをサブスクライブしている必要があります。
2. バケットタグの追加
バケットの作成時に以下のタグを追加するか、バケットの タグ タブを開いて 追加 を選択します。ネームスペース を なし(フリーフォーム・タグ) に設定し、OpenAI 組織 ID とプロジェクト ID を正確に入力してください。
| キー | 値 |
|---|---|
openai_organization_id |
CUSTOMER_ORG_ID |
openai_project_id |
CUSTOMER_PROJECT_ID |
アクセスポリシーとストレージ登録にも同じ ID を使用します。各バケットは、1 つの OpenAI 組織とその組織の 1 つのプロジェクトに紐付きます。

3. OpenAI へのアクセス権の付与
アイデンティティとセキュリティ > ポリシーでテナンシのルートコンパートメントを選択し、psp-storage-access という名前のポリシーを作成します。手動エディタの表示を有効にし、以下のステートメントを入力します。CUSTOMER_... の各プレースホルダーには、バケット名、リージョン、OpenAI 組織 ID、プロジェクト ID を指定してください。OpenAI のテナンシとグループの OCID の値は変更しないでください。
Define tenancy OpenAICSG as ocid1.tenancy.oc1..aaaaaaaa4kzwe5jdr4gsxft7dfnwbnp3aozhxeskabsqo7czdkbp6fkh3uha
Define group OpenAICSGProduction as ocid1.group.oc1..aaaaaaaanuot5i5kooasr6qh6qo4ohqljrrxx3javkl2tkedb7ljsluq62sa
Admit group OpenAICSGProduction of tenancy OpenAICSG to {OBJECTSTORAGE_NAMESPACE_READ} in tenancy
Admit group OpenAICSGProduction of tenancy OpenAICSG to {BUCKET_READ} in tenancy where target.bucket.name = 'CUSTOMER_BUCKET_NAME'
Admit group OpenAICSGProduction of tenancy OpenAICSG to {OBJECT_READ, OBJECT_CREATE, OBJECT_OVERWRITE} in tenancy where all {target.bucket.name = 'CUSTOMER_BUCKET_NAME', target.object.name = 'openai/CUSTOMER_ORG_ID/CUSTOMER_PROJECT_ID/*'}
Allow service objectstorage-CUSTOMER_OCI_REGION to {BUCKET_INSPECT, BUCKET_READ, OBJECT_INSPECT, OBJECT_DELETE} in tenancy where target.bucket.name = 'CUSTOMER_BUCKET_NAME'このポリシーにより、OpenAI はお客様の Object Storage ネームスペースを検索し、バケット設定を読み取り、プロジェクトのプレフィックス配下のオブジェクトを読み書きできます。ネームスペースの検索には、バケット条件のないテナンシレベルの権限が必要です。最後のステートメントは、Oracle のリージョン別 Object Storage サービスに、期限切れオブジェクトの削除を許可します。us-ashburn-1 リージョンでは、サービス名に objectstorage-us-ashburn-1 を使用してください。
ポリシーを保存します。資格情報は OpenAI が管理するため、API 署名キーやアクセスキーを作成したり共有したりする必要はありません。
4. ライフサイクルルールの設定
バケットのポリシータブを開きます。ライフサイクル・ポリシー・ルールでルールの作成を選択し、次のように設定します。
- 名前:
psp-retention - ターゲット: オブジェクト
- ライフサイクル・アクション: 削除
- 日数: 30

拡張オプションを展開し、状態は有効のままにします。オブジェクト名フィルタでフィルタの追加を選び、プレフィックスで含めるを選択して、末尾のスラッシュを含めた openai/CUSTOMER_ORG_ID/CUSTOMER_PROJECT_ID/ を入力します。

ルールを保存します。OCI からライフサイクル管理に必要な権限の自動追加を提案された場合も、手順 3 で付与したバケット単位の権限を維持してください。他のルールがこれらのオブジェクトを 30 日より前に削除したり、アーカイブストレージに移動したりしないことを確認します。保持ルールは、ライフサイクルによる削除ルールの代わりにはなりません。
ストレージの登録に進みます。
ストレージの登録
上記のクラウド設定を完了したら、プロジェクトで利用できる基本のデータ保持ポリシーを選択します。Private Safety Processing は、ゼロデータ保持または Modified Abuse Monitoring と併用できます。Private Safety Processing が接続先のストレージを使用している間も、選択したポリシーは引き続き適用されます。次に、API コンソールまたは Management API でストレージを登録し、検証します。どちらか一方の方法で行ってください。
方法 1:API コンソール
組織管理者としてサインインします。API コンソールではサインイン済みのセッションを使用するため、この方法では Admin API キーや curl コマンドは不要です。
1. ストレージ接続画面の表示
Organization settings > Data controls > Data retention を開き、Connect storage を選択します。Project Settings > Data retention からも接続できます。

2. ストレージ情報の入力
AWS、Azure、GCP、OCI のいずれかを選び、プロジェクトを選択します。Data retention policy で、組織で利用できるポリシーに応じて Zero Data Retention with Private Safety Processing または Modified Abuse Monitoring with Private Safety Processing を選択します。プロジェクト設定からダイアログを開いた場合、そのプロジェクトは選択済みです。Registered storage が表示された場合は、Connect new storage を選択して接続先を追加します。
AWS の場合、クラウド設定で控えた Bucket ARN と IAM role ARN を入力します。

Azure の場合、Tenant ID、Subscription ID、Resource group、Storage account name、Container name を入力します。ダイアログ内を下にスクロールして、すべての項目に入力してください。

GCP の場合、Bucket name、Workload identity project number、Workload identity pool ID、Workload identity provider ID を入力します。ダイアログ内を下にスクロールして、すべての項目に入力してください。

OCI の場合、Tenancy OCID、Region、Bucket name を入力します。リージョンには us-ashburn-1 などの識別子を指定し、バケットには OCID や URL ではなく名前を指定します。Object Storage ネームスペースは OpenAI が自動検出します。ダイアログ内を下にスクロールして、すべての項目に入力してください。

3. 接続と検証
Connect and validate を選択します。API コンソールは選択した基本のデータ保持ポリシーを保存し、ストレージを登録して検証を実行し、ストレージとプロジェクトのステータスを更新します。検証に成功すると、選択した基本ポリシーを維持したまま Private Safety Processing が有効になります。
Storage validated が表示され、プロジェクトで Private Safety Processing が有効になったことを確認できたら、Done を選択します。

登録後に検証が失敗した場合は、表示された問題を修正して Retry validation を選択します。後で再開する場合は、Registered storage で接続先を選び、Validate storage を選択します。API コンソールで結果を更新できない場合は、最初からやり直す前に Refresh status を選択してください。
方法 2:Management API
この方法では、組織の Admin API キーを使用します。プロジェクトの基本のデータ保持ポリシーを設定してからストレージを登録し、4. 設定の検証に従って検証を実行してください。
1. API 設定の準備
組織の Admin API キーを OPENAI_ADMIN_KEY に安全な方法で読み込みます。
OPENAI_API_BASE には、プロジェクト用に確認済みのエンドポイントを設定します。グローバルの場合は https://api.openai.com、米国の場合は https://us.api.openai.com、欧州の場合は https://eu.api.openai.com です。
以下のプレースホルダーを、そのエンドポイントとお客様の OpenAI 組織 ID に置き換えます。以降のコマンドは同じシェルセッションで実行してください。
123OPENAI_API_BASE='<OPENAI_API_BASE>'
OPENAI_ORG_ID='<OPENAI_ORG_ID>'
OPENAI_STORAGE_URL="$OPENAI_API_BASE/v1/organization/external_storage"2. 基本のデータ保持ポリシーの設定
ストレージを登録する前に、プロジェクトで利用できる基本のデータ保持ポリシーを設定します。ZDR の場合は zero_data_retention、MAM の場合は modified_abuse_monitoring を指定します。Private Safety Processing を有効にした後も、選択したポリシーは引き続き適用されます。
123456curl --fail-with-body -sS -X POST \
"$OPENAI_API_BASE/v1/organization/projects/CUSTOMER_PROJECT_ID/data_retention" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID" \
-H 'Content-Type: application/json' \
--data-binary '{"retention_type":"zero_data_retention"}'Modified Abuse Monitoring を使用する場合は、代わりに {"retention_type":"modified_abuse_monitoring"} を送信します。成功すると、応答に object: "project.data_retention" と、選択したポリシーを示す type が含まれます。
3. 登録リクエストの送信
利用するプロバイダのリクエストのみを実行します。すべての CUSTOMER_... プレースホルダーを、お客様の ID と作成したリソースの情報に置き換えてください。
AWS S3
123456789101112curl --fail-with-body -sS -X POST "$OPENAI_STORAGE_URL" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID" \
-H 'Content-Type: application/json' \
--data-binary '{
"project_id": "CUSTOMER_PROJECT_ID",
"provider": {
"type": "aws",
"bucket": "CUSTOMER_BUCKET_ARN",
"role_arn": "CUSTOMER_ROLE_ARN"
}
}'Azure Blob Storage
123456789101112131415curl --fail-with-body -sS -X POST "$OPENAI_STORAGE_URL" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID" \
-H 'Content-Type: application/json' \
--data-binary '{
"project_id": "CUSTOMER_PROJECT_ID",
"provider": {
"type": "azure",
"tenant_id": "CUSTOMER_TENANT_ID",
"subscription_id": "CUSTOMER_SUBSCRIPTION_ID",
"resource_group": "CUSTOMER_RESOURCE_GROUP",
"account_name": "CUSTOMER_STORAGE_ACCOUNT",
"container": "CUSTOMER_CONTAINER_NAME"
}
}'Google Cloud Storage
1234567891011121314curl --fail-with-body -sS -X POST "$OPENAI_STORAGE_URL" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID" \
-H 'Content-Type: application/json' \
--data-binary '{
"project_id": "<CUSTOMER_PROJECT_ID>",
"provider": {
"type": "gcp",
"bucket": "<CUSTOMER_GCP_BUCKET_NAME>",
"workload_identity_project_number": "<CUSTOMER_GCP_PROJECT_NUMBER>",
"workload_identity_pool_id": "<CUSTOMER_GCP_POOL_ID>",
"workload_identity_provider_id": "<CUSTOMER_GCP_PROVIDER_ID>"
}
}'OCI Object Storage
12345678910111213curl --fail-with-body -sS -X POST "$OPENAI_STORAGE_URL" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID" \
-H 'Content-Type: application/json' \
--data-binary '{
"project_id": "CUSTOMER_PROJECT_ID",
"provider": {
"type": "oci",
"tenancy_ocid": "CUSTOMER_TENANCY_OCID",
"region": "CUSTOMER_OCI_REGION",
"bucket": "CUSTOMER_BUCKET_NAME"
}
}'応答には、id(extstorage_ で始まる値)と status: "pending" が含まれます。検証に使用するため、ID を控えてください。API コンソールには Pending validation と表示され、プロジェクトで選択した基本のデータ保持ポリシーが維持されます。検証に成功するまで、Private Safety Processing は有効になりません。
4. 設定の検証
API で検証するには、EXTERNAL_STORAGE_ID を登録時に返された ID に置き換え、次のコマンドを実行します。
12345EXTERNAL_STORAGE_ID='<EXTERNAL_STORAGE_ID>'
curl --fail-with-body -sS -X POST \
"$OPENAI_STORAGE_URL/$EXTERNAL_STORAGE_ID/validate" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID"成功すると、応答に status: "validated" が含まれます。検証では設定とアクセス権を確認します。検証に成功すると、選択した基本のデータ保持ポリシーを維持したまま、お客様が管理するストレージを使用して Private Safety Processing が有効になります。API コンソールには Validated と、基本ポリシーに Private Safety Processing を組み合わせたプロジェクトのポリシーが表示されます。たとえば、Zero Data Retention with Private Safety Processing や Modified Abuse Monitoring with Private Safety Processing です。
Management API を使用した場合は、保存された登録情報を取得します。
1234curl --fail-with-body -sS \
"$OPENAI_STORAGE_URL/$EXTERNAL_STORAGE_ID" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID"どちらの方法でも、Project Settings > Data retention を開き、Refresh を選択します。接続先、プロバイダ、地域と、ステータスが Validated であることを確認します。次に、選択した基本ポリシーに Private Safety Processing が表示されていることを確認してください。組織のデータ保持の一覧でも、プロジェクトごとのストレージとステータスを確認できます。

Validated は検証に成功した時点の記録であり、ストレージが継続して正常に動作していることを示すものではありません。Refresh を選択しても、検証は再実行されません。継続的な監視と再検証については、運用とトラブルシューティングを参照してください。
ストレージのステータス確認
プロジェクトの一覧を表示するには Organization settings > Data controls > Data retention を、個別プロジェクトのストレージ詳細を表示するには Project Settings > Data retention を開きます。接続先と地域を確認してから、ステータスを確認してください。ストレージの設定と検証で説明した API を使って登録情報を取得することもできます。
- Pending validation(
pending):ストレージは登録されていますが、まだ検証に成功していません。検証に成功するまでプロジェクトの保持ポリシーは変更されません。 - Validated(
validated):ストレージの検証に成功しました。現在も接続できることを保証するものではありません。 - Needs attention(
unhealthy):チェックでストレージまたは設定の問題が見つかりました。原因を解消し、再度検証してください。
Refresh は保存済みのステータスを再読み込みする操作です。接続テストは実行されません。実行時に障害が発生しても、表示されるステータスは変わらない場合があります。API コンソールでストレージ情報を読み込めない場合は、バケットの障害と判断する前に API で確認してください。
ストレージのアクティビティ監視
以下の情報を個別に確認します。
- ストレージの登録情報: プロジェクト、プロバイダ、地域、検証結果を確認します。
- クラウドのアクティビティ: ログ記録を有効にしている場合は、プロバイダのアクセスログと読み書きのエラーを確認します。検証用のリクエストと実際の PSP のアクティビティを区別してください。
- 安全性とコンプライアンスのイベント: Compliance API を別途有効にしている場合は、コンテンツのライフサイクルに関する利用可能なイベントを確認します。これらのイベントは、ストレージ登録イベントやクラウドのアクセスログとは異なります。
どのリクエストで保持対象のオブジェクトが作成されるかは、サンプリングポリシーによって決まります。オブジェクトやイベントが見当たらないという理由だけでは、ストレージの障害とは判断できません。
検証用リクエストの識別
AWS、Azure、GCP、OCI のいずれでも、検証時に設定済みのストレージ接続先にテストオブジェクトを書き込みます。名前には csg_validation_ と、それに続くランダムな 16 進数のサフィックスが含まれます。各オブジェクトの本文には customer-storage-gateway-validation:csg_validation_<suffix> というテキストが含まれ、サフィックスはオブジェクト名のものと一致します。顧客のプロンプトや応答は含まれません。OpenAI は設定済みのアクセス権で各テストオブジェクトを読み取り、その後、同じオブジェクトに対して認証なしで GET を試み、公開アクセスの可否を確認します。プライベートストレージでは、この未認証リクエストが拒否されるのが正常です。ログ設定によっては、これらのリクエストがプロバイダのアクセスログに記録されます。
AWS の場合、検証ではロールの sts:ExternalId による制限も確認します。OpenAI は、プロジェクトの外部 ID を使って設定済みのロールを引き受けられることを確認した後、AssumeRole を 2 通りの条件でテストします。一方は外部 ID を指定せず、もう一方は意図的に無効なテスト ID proj_smoketest-verifier を指定します。どちらの呼び出しも AccessDenied を返すのが正常です。どちらも同じ OpenAI ID と設定済みのロールを使用します。テスト ID は他のお客様のプロジェクトを示すものではありません。AWS CloudTrail は、拒否されたこれらのクロスアカウントのロール引き受け試行を、お客様のアカウントには記録しません。信頼ポリシーでは、実際のプロジェクト ID のみを許可してください。これらのテスト呼び出しを成功させるために、テスト ID を許可したり外部 ID の条件を削除したりしないでください。
障害からの復旧
1. エラーの確認
customer_managed_retention_not_enabled:組織に利用権限があることをオンボーディング担当者に確認してください。- 認証または権限のエラー: 外部ストレージに必要な権限を持つ組織の Admin キーを使用していることを確認します。
- 設定の問題: クラウド側の ID、信頼ポリシーまたはアクセス権、ライフサイクルルール、承認されたネットワーク構成を確認します。
401 customer_storage_not_ready:リクエスト先のプロジェクトの地域に、検証済みのストレージがあることを確認します。incorrect_hostname:データレジデンシーの地域を固定したプロジェクトでは、その設定に対応するホスト名を使用します。503 external_storage_validation_unavailable:時間をおいて再試行してください。問題が解消しない場合は、サポートにお問い合わせください。
AWS のプロジェクトベースの登録方式(AWS へのサインアップ(新方式))を使用している場合、デフォルトのリソースコントロールポリシー(RCP)によって、OpenAI によるクロスアカウントのロール引き受けがブロックされます。そのアカウントを使用するには、必要に応じて有料プランにアップグレードし、高度な機能を有効化して、OpenAI に sts:AssumeRole の実行を許可するよう RCP を更新します。
2. 再検証
設定を修正したら、プロジェクトの Connect storage を開き、組織の Admin API キーで検証コマンドを実行します。登録情報を取得するか、Refresh を選択して、ステータスが Validated になっていることを確認してください。表示の更新だけでは検証は実行されません。
ストレージの切断
ストレージを切断するには、Project Settings > Data retention を開きます。External storage で接続の横にあるごみ箱アイコンを選択し、Disconnect storage で確定します。
PSP 併用の ZDR を使用するプロジェクトで最後のストレージ接続を切断すると、保持ポリシーは自動的に組織のデフォルトに戻ります。他に接続が残っている場合、ポリシーは変更されません。ポリシーが変更されると、PSP 併用の ZDR を必要とするモデルは利用できなくなる場合があります。
ストレージを切断しても、お客様のクラウドストレージやその中のデータは削除されません。既存のレコードについては、引き続き保持要件を満たしてください。新しいプロジェクトやデータレジデンシーのロケーションごとに、設定と検証を完了してください。
運用中のお客様の責任
PSP 併用の ZDR を利用するお客様には、以下の対応が求められます。
- PSP ストレージの登録と検証。PSP を有効にしたプロジェクトとデータレジデンシーのロケーションごとに、OpenAI の管理 API を通じてストレージバケットを登録し、検証してください。OpenAI が公開している手順に従い、PSP サービスがバケットにアクセスできるように設定してください。
- 暗号化されたレコードを 30 日以上保持すること。PSP レコードが 30 日より前に削除されないよう、ストレージのライフサイクルルールを設定してください。
- ストレージと鍵へのアクセスの維持。リージョンのストレージ、サービスの権限、お客様が管理する鍵の使用許可を適切に設定し、その状態を維持してください。
- 設定上の問題の修正。OpenAI から通知を受けたら、ストレージ設定の問題を修正してください。
- 安全性に関する懸念の通知への対応。OpenAI と協力して問題を調査し、対処してください。
関連資料
- Private Safety Processing 技術ホワイトペーパー - アーキテクチャの全体像、セキュリティ対策、適用範囲
- API のデータ管理 - ZDR の利用資格、エンドポイントごとのデータ保持、例外
- データレジデンシー - 対応リージョンとデータ処理の地理的範囲
サポートへの問い合わせ
トラブルシューティングを行ってもストレージまたは検証の問題が解決しない場合は、OpenAI サポートにお問い合わせください。