このガイドでは、既存のプロジェクトにモデル、ホスト型ツール、データ保持の制御を適用します。これらの制御は、プロジェクトのワークロードで利用できる機能と、適用される承認済みの保持ポリシーを決定します。ユーザーやサービスアカウントにプロジェクトへのアクセス権を付与するものではありません。
主なワークフローを完了すると、次の内容を繰り返し適用できる構成ができあがります。
- プロジェクトで利用できるモデルを承認済みのモデルに限定
- サポートされているすべてのホスト型ツールに権限を明示的に設定
- 組織のデフォルトのデータ保持ポリシーをプロジェクトに適用
事前準備
Terraform プロバイダーのセットアップを完了し、管理 API キーを OPENAI_ADMIN_KEY としてエクスポートしてください。次のものも必要です。
- 既存のプロジェクトの ID
- 組織で利用できるモデルの ID
- プロジェクトのデータ保持を管理する場合は、データ保持の制御が有効になっている組織
ワークフローを評価する際は、テスト用のプロジェクトを使用してください。特定のプロジェクトでホスト型ツールを無効にするには、組織レベルのツールポリシーで、そのツールの利用を選択したプロジェクトにあらかじめ限定しておく必要があります。組織がすべてのプロジェクトで有効にしているツールを、プロジェクト側で無効にすることはできません。
モデルアクセスの制限
openai_project_model_permissions は、許可リストまたは拒否するモデルのリストを 1 つのプロジェクトに適用します。この例では、gpt-5.4-mini のみを許可します。
resource "openai_project_model_permissions" "application" {
project_id = "proj_123"
mode = "allow_list"
model_ids = ["gpt-5.4-mini"]
}
mode を次のいずれかに設定します。
allow_list:model_idsに含まれるモデルのみを許可deny_list:利用可能なモデルのうち、model_idsに含まれるモデル以外を許可
各モデル ID は、組織から参照可能である必要があります。ポリシーに追加するファインチューニング済みモデルのスナップショットも同様です。Terraform は、次回のプラン作成と適用時に、モードとモデルリストの変更を反映します。
ホスト型ツールの設定
openai_project_hosted_tool_permissions は、プロジェクトレベルの 5 つのツール権限を管理します。レビュー済みの構成でポリシー全体を定義できるように、すべてのフィールドを設定してください。
resource "openai_project_hosted_tool_permissions" "application" {
project_id = "proj_123"
file_search_enabled = true
web_search_enabled = false
image_generation_enabled = false
mcp_enabled = false
code_interpreter_enabled = true
}
これらのフィールドは、ファイル検索、ウェブ検索、画像生成、リモート MCP サーバー、Code Interpreter を制御します。各組織のホスト型ツールのポリシーには、すべてのプロジェクトを許可、すべてのプロジェクトを拒否、選択したプロジェクトを許可という 3 つのモードがあります。フィールドを true に設定すると、組織のその他の利用資格要件とデータ保持要件を満たす範囲で、そのプロジェクトでのツールの利用が許可されます。フィールドを false に設定すると、そのツールのポリシーで選択されているプロジェクトから、対象のプロジェクトが除外されます。組織が現在、すべてのプロジェクトでそのツールを許可している場合、フィールドを false に設定すると失敗します。個別のプロジェクトでツールを無効にする前に、組織のツールポリシーを、選択したプロジェクトを許可する設定に変更してください。
Terraform は OpenAI から 5 つすべての値を再取得し、ダッシュボードでの変更を次回のプランでドリフトとして報告します。
データ保持の設定
openai_project_data_retention は、承認済みの保持タイプを 1 つのプロジェクトに適用します。プロジェクトに対する上書き設定が承認されている場合を除き、組織の現在のポリシーを継承してください。
resource "openai_project_data_retention" "application" {
project_id = "proj_123"
type = "organization_default"
}
このプロバイダーでは、none、zero_data_retention、modified_abuse_monitoring、enhanced_zero_data_retention、enhanced_modified_abuse_monitoring も指定できます。利用可能なモードと許可される移行は、組織の構成とプロジェクトのデータレジデンシーのリージョンによって異なります。
プロジェクトの上書き設定を選択する前に、お客様のデータと、組織が OpenAI と締結している契約を確認してください。
組織のデフォルト設定の管理
openai_organization_data_retention は、組織レベルの既存の設定を Terraform で管理している場合にのみ使用してください。
resource "openai_organization_data_retention" "default" {
type = "zero_data_retention"
}
このリソースは組織の既存の設定を変更するものであり、組織をデータ保持プログラムに登録するものではありません。保持ティア間の移行には、サポートへの問い合わせが必要なものや、利用できないものがあります。
構成から openai_project_hosted_tool_permissions または
openai_project_data_retention を削除すると、リソースは
Terraform の状態から削除されますが、リモートの設定は変更されません。
openai_project_model_permissions を削除すると、プロジェクトのモデル権限の設定が削除されます。
削除プランをレビューする際は、この動作の違いを考慮してください。
Terraform 外部での変更の検出
プランを実行してリモートの状態を更新し、レビュー済みの構成と比較します。
terraform plan -detailed-exitcode
終了コード 0 は変更なし、2 はプランに変更が含まれること、1 は Terraform でエラーが発生したことを意味します。予期しない変更があれば、適用する前に調査してください。管理者が緊急対応として行った変更は、その目的を理解せずに自動で上書きしないでください。
完全なサンプルの実行
次の例では、プロジェクトの 3 種類の制御をまとめて管理します。main.tf を作成してください。
terraform {
required_version = ">= 1.0"
required_providers {
openai = {
source = "openai/openai"
version = ">= 1.0.0"
}
}
}
provider "openai" {}
variable "project_id" {
type = string
description = "ID of the existing OpenAI project."
}
variable "model_permission_mode" {
type = string
description = "Whether model_ids is an allowlist or denylist."
default = "allow_list"
validation {
condition = contains(["allow_list", "deny_list"], var.model_permission_mode)
error_message = "The model permission mode must be allow_list or deny_list."
}
}
variable "model_ids" {
type = list(string)
description = "Model IDs included in the project model policy."
}
variable "hosted_tools" {
type = object({
file_search = bool
web_search = bool
image_generation = bool
mcp = bool
code_interpreter = bool
})
description = "Hosted tools enabled for the project."
}
variable "project_data_retention_type" {
type = string
description = "Approved data-retention type for the project."
validation {
condition = contains([
"organization_default",
"none",
"zero_data_retention",
"modified_abuse_monitoring",
"enhanced_zero_data_retention",
"enhanced_modified_abuse_monitoring",
], var.project_data_retention_type)
error_message = "Provide a supported project data-retention type."
}
}
resource "openai_project_model_permissions" "application" {
project_id = var.project_id
mode = var.model_permission_mode
model_ids = var.model_ids
}
resource "openai_project_hosted_tool_permissions" "application" {
project_id = var.project_id
file_search_enabled = var.hosted_tools.file_search
web_search_enabled = var.hosted_tools.web_search
image_generation_enabled = var.hosted_tools.image_generation
mcp_enabled = var.hosted_tools.mcp
code_interpreter_enabled = var.hosted_tools.code_interpreter
}
resource "openai_project_data_retention" "application" {
project_id = var.project_id
type = var.project_data_retention_type
}
output "controlled_project_id" {
value = var.project_id
}
output "model_permission_mode" {
value = openai_project_model_permissions.application.mode
}
output "project_data_retention_type" {
value = openai_project_data_retention.application.type
}
既存のプロジェクト ID、参照可能なモデル ID、ホスト型ツールのポリシー、承認済みの保持タイプを指定して、terraform.tfvars を作成してください。
project_id = "proj_123"
model_permission_mode = "allow_list"
model_ids = ["gpt-5.4-mini"]
hosted_tools = {
file_search = true
web_search = true
image_generation = true
mcp = true
code_interpreter = true
}
project_data_retention_type = "organization_default"
この例では、組織のポリシーがすべてのプロジェクトでツールを有効にしている場合でも実行できるように、すべてのホスト型ツールを有効にしています。値を false に変更するのは、対応する組織レベルのポリシーで、アクセスを選択したプロジェクトに限定した後にしてください。適用する前に、そのモデル ID と保持タイプを組織で利用できることを確認してください。
Terraform を初期化してから、保存したプランをレビューして適用します。
terraform init
terraform fmt
terraform validate
terraform plan -out=tfplan
terraform show tfplan
terraform apply tfplan
最初のプランには、追加するリソースが 3 つ含まれるはずです。ホスト型ツールとデータ保持の制御では、追加とは、プロジェクトごとに 1 つだけ存在する既存の設定を Terraform が管理し始めることを意味します。別のリモートオブジェクトを作成するわけではありません。モデル権限では、プロジェクトのモデル権限の設定を作成または更新します。
terraform plan をもう一度実行し、この構成による追加の変更がないことを確認してください。ドリフトが表示された場合は、再度更新を適用する前に、別の管理者や自動化処理がプロジェクトの制御設定を変更したかどうかを確認してください。