For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navegación principal

Controles de modelos, herramientas y datos con Terraform

Configura el acceso a modelos, las herramientas alojadas y la retención de datos del proyecto.

Usa esta guía para aplicar controles de modelos, herramientas alojadas y retención de datos a un proyecto existente. Estos controles determinan qué pueden usar las cargas de trabajo del proyecto y qué política de retención aprobada se aplica. No otorgan acceso al proyecto a usuarios ni a cuentas de servicio.

Al completar el flujo de trabajo principal, tendrás una configuración reproducible que:

  • Limita el proyecto a un conjunto de modelos aprobados.
  • Establece un permiso explícito para cada herramienta alojada compatible.
  • Aplica al proyecto la política de retención de datos predeterminada de la organización.

Antes de comenzar

Completa la configuración del proveedor de Terraform y exporta una clave de la API de administración como OPENAI_ADMIN_KEY. También necesitas:

  • El ID de un proyecto existente.
  • Los IDs de los modelos disponibles para tu organización.
  • Una organización con los controles de retención de datos habilitados si planeas administrar la retención del proyecto.

Usa un proyecto de prueba para evaluar el flujo de trabajo. Para deshabilitar una herramienta alojada en un proyecto, la política de herramientas de la organización ya debe limitar esa herramienta a proyectos seleccionados. Un proyecto no puede deshabilitar una herramienta que la organización haya habilitado para todos los proyectos.

Restringir el acceso a modelos

openai_project_model_permissions aplica una lista de modelos permitidos o una lista de modelos denegados a un proyecto. Este ejemplo solo permite gpt-5.4-mini:

resource "openai_project_model_permissions" "application" {
  project_id = "proj_123"
  mode       = "allow_list"
  model_ids  = ["gpt-5.4-mini"]
}

Establece mode en:

  • allow_list para permitir únicamente los modelos incluidos en model_ids.
  • deny_list para permitir los modelos disponibles, excepto los incluidos en model_ids.

Cada ID de modelo debe ser visible para la organización. Esto incluye cualquier instantánea de un modelo con ajuste fino que agregues a la política. Terraform concilia los cambios en el modo y la lista de modelos durante las siguientes operaciones de planificación y aplicación.

Configurar herramientas alojadas

openai_project_hosted_tool_permissions administra cinco permisos de herramientas a nivel de proyecto. Establece todos los campos para que la configuración revisada describa la política completa:

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
}

Los campos controlan la búsqueda de archivos, la búsqueda web, la generación de imágenes, los servidores MCP remotos y el intérprete de código. La política de herramientas alojadas de cada organización tiene tres modos: permitir todos los proyectos, denegar todos los proyectos o permitir proyectos seleccionados. Establecer un campo en true permite usar esa herramienta en el proyecto, sujeto a los demás requisitos de elegibilidad y retención de la organización. Establecer un campo en false elimina el proyecto de la política de proyectos seleccionados de esa herramienta. Si la organización permite actualmente la herramienta para todos los proyectos, establecer el campo en false falla. Cambia la política de herramientas de la organización para permitir proyectos seleccionados antes de deshabilitar la herramienta en un proyecto individual.

Terraform actualiza los cinco valores con los datos de OpenAI y, en el siguiente plan, informa los cambios realizados en el panel como desviaciones de la configuración.

Configurar la retención de datos

openai_project_data_retention aplica un tipo de retención aprobado a un proyecto. Configura el proyecto para que herede la política actual de la organización, a menos que tenga una configuración específica aprobada:

resource "openai_project_data_retention" "application" {
  project_id = "proj_123"
  type       = "organization_default"
}

El proveedor también acepta none, zero_data_retention, modified_abuse_monitoring, enhanced_zero_data_retention y enhanced_modified_abuse_monitoring. Los modos disponibles y las transiciones permitidas dependen de la configuración de tu organización y de la región de residencia de datos del proyecto.

Revisa Tus datos y el acuerdo de tu organización con OpenAI antes de seleccionar una configuración específica para el proyecto.

Administrar la configuración predeterminada de la organización

Usa openai_organization_data_retention solo cuando Terraform sea responsable de administrar la configuración existente a nivel de organización:

resource "openai_organization_data_retention" "default" {
  type = "zero_data_retention"
}

Este recurso modifica una configuración existente de la organización; no inscribe a una organización en un programa de retención de datos. Algunas transiciones requieren asistencia del equipo de soporte o no están disponibles entre niveles de retención.

Quitar openai_project_hosted_tool_permissions o openai_project_data_retention de la configuración elimina el recurso del estado de Terraform, pero deja intacta la configuración remota. Quitar openai_project_model_permissions elimina la configuración de permisos de modelos del proyecto. Revisa los planes de destrucción teniendo en cuenta estas diferencias de comportamiento.

Detectar cambios fuera de Terraform

Ejecuta un plan para actualizar el estado remoto y compararlo con la configuración revisada:

terraform plan -detailed-exitcode

El código de salida 0 significa que no hay cambios, 2 significa que el plan contiene cambios y 1 significa que Terraform encontró un error. Investiga los cambios inesperados antes de aplicarlos. No sobrescribas automáticamente un cambio administrativo de emergencia sin antes comprender su propósito.

Ejecutar el ejemplo completo

El siguiente ejemplo administra los tres controles del proyecto en conjunto. Crea 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
}

Crea terraform.tfvars con el ID de un proyecto existente, los IDs de modelos visibles, la política de herramientas alojadas y un tipo de retención aprobado:

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"

El ejemplo habilita todas las herramientas alojadas para que pueda ejecutarse cuando la política de la organización habilita las herramientas para todos los proyectos. Cambia un valor a false solo después de que la política correspondiente de la organización use el acceso para proyectos seleccionados. Confirma que el ID de modelo y el tipo de retención estén disponibles para tu organización antes de aplicar los cambios.

Inicializa Terraform y luego revisa y aplica un plan guardado:

terraform init
terraform fmt
terraform validate
terraform plan -out=tfplan
terraform show tfplan
terraform apply tfplan

El primer plan debería contener tres recursos para agregar. En el caso de los controles de herramientas alojadas y retención de datos, agregar un recurso significa que Terraform comienza a administrar una configuración existente que tiene una única instancia por proyecto; no crea un objeto remoto independiente. Los permisos de modelos crean o actualizan la configuración de permisos de modelos del proyecto.

Vuelve a ejecutar terraform plan para confirmar que la configuración no produzca más cambios. Si muestra desviaciones, determina si otro administrador o una automatización modificó algún control del proyecto antes de aplicar otra actualización.