このガイドでは、既存のプロジェクトにモデル、ホスト型ツール、データ保持に関する設定を適用します。これらの設定で、プロジェクトのワークロードが利用できるモデルやツールと、適用する承認済みの保持ポリシーが決まります。ユーザーやサービスアカウントにプロジェクトへのアクセス権を付与するものではありません。
一連の手順を完了すると、次の設定を繰り返し適用できます。
- プロジェクトで利用できるモデルを承認済みのモデルに限定します。
- サポートされているすべてのホスト型ツールについて、利用の可否を明示します。
- 組織のデフォルトのデータ保持ポリシーをプロジェクトに適用します。
事前準備
Terraform プロバイダーのセットアップを完了し、管理者用 API キーを環境変数 OPENAI_ADMIN_KEY としてエクスポートします。次のものも必要です。
- 既存のプロジェクトの ID
- 組織で利用できるモデルの ID
- プロジェクトのデータ保持を管理する場合は、データ保持設定が有効になっている組織
手順を試す際は、テスト用プロジェクトを使用してください。特定のプロジェクトでホスト型ツールを無効にするには、そのツールを利用できるプロジェクトを組織レベルのポリシーであらかじめ限定しておく必要があります。組織がすべてのプロジェクトで有効にしているツールは、個別のプロジェクトで無効にできません。
モデルへのアクセス制限
openai_project_model_permissions を使うと、個別のプロジェクトにモデルの許可リストまたは拒否リストを適用できます。次の例では、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 は、承認済みのデータ保持タイプを個別のプロジェクトに適用します。プロジェクト固有の設定が承認されている場合を除き、組織の現在のポリシーを継承してください。
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
}
terraform.tfvars を作成し、既存のプロジェクトの ID、組織から参照できるモデルの ID、ホスト型ツールのポリシー、承認済みのデータ保持タイプを指定します。
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 つのリソースが表示されるはずです。ホスト型ツールとデータ保持のリソースが追加されると、Terraform はプロジェクトごとに 1 つずつ存在する既存の設定を管理し始めます。リモート側に別のオブジェクトが作成されることはありません。モデル利用権限のリソースは、プロジェクトのモデル利用権限の設定を作成または更新します。
terraform plan をもう一度実行し、この構成で追加の変更が発生しないことを確認します。ドリフトが表示された場合は、次の更新を適用する前に、別の管理者や自動化処理がプロジェクトの設定を変更したかどうかを確認してください。