Suivez ce guide pour configurer l’accès aux modèles et aux outils hébergés ainsi que la conservation des données d’un projet existant. Ces paramètres déterminent les modèles et les outils que les charges de travail du projet peuvent utiliser, ainsi que la politique de conservation approuvée qui s’applique au projet. Ils n’accordent aucun accès au projet aux utilisateurs ni aux comptes de service.
À l’issue du workflow principal, vous disposerez d’une configuration réutilisable qui :
- Limite l’accès du projet à un ensemble de modèles approuvés.
- Définit explicitement si chaque outil hébergé pris en charge est autorisé.
- Applique au projet la politique de conservation des données par défaut de l’organisation.
Avant de commencer
Terminez la configuration du fournisseur Terraform, puis exportez une clé d’API d’administration dans la variable d’environnement OPENAI_ADMIN_KEY. Vous aurez également besoin des éléments suivants :
- L’identifiant d’un projet existant.
- Les identifiants des modèles disponibles pour votre organisation.
- Une organisation pour laquelle les contrôles de conservation des données sont activés, si vous comptez gérer la conservation des données du projet.
Utilisez un projet de test pour évaluer le workflow. Pour désactiver un outil hébergé dans un projet, la politique de l’organisation doit déjà réserver cet outil à certains projets. Un projet ne peut pas désactiver un outil que l’organisation a activé pour tous ses projets.
Limitez l’accès aux modèles
openai_project_model_permissions applique à un projet une liste de modèles autorisés ou interdits. Cet exemple autorise uniquement gpt-5.4-mini :
resource "openai_project_model_permissions" "application" {
project_id = "proj_123"
mode = "allow_list"
model_ids = ["gpt-5.4-mini"]
}
Attribuez à mode l’une des valeurs suivantes :
allow_listpour autoriser uniquement les modèles figurant dansmodel_ids.deny_listpour autoriser tous les modèles disponibles sauf ceux qui figurent dansmodel_ids.
Chaque identifiant de modèle doit être visible pour l’organisation. Cette exigence vaut aussi pour les instantanés de modèles affinés que vous ajoutez à la politique. Terraform prend en compte les modifications du mode et de la liste de modèles lors de la génération du prochain plan, puis les met en œuvre lorsque vous appliquez ce plan.
Configurez les outils hébergés
openai_project_hosted_tool_permissions gère les autorisations de cinq outils au niveau du projet. Renseignez chaque champ pour que la configuration que vous examinez décrive la politique dans son intégralité :
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
}
Ces champs contrôlent l’accès à la recherche dans les fichiers, à la recherche web, à la génération d’images, aux serveurs MCP distants et à l’Interpréteur de code. Pour chaque outil hébergé, l’organisation dispose de trois modes : autoriser l’outil pour tous les projets, l’interdire pour tous les projets ou le réserver à certains projets. La valeur true autorise le projet à utiliser l’outil, sous réserve des autres conditions d’éligibilité et de conservation des données de l’organisation. La valeur false retire le projet de la liste des projets autorisés à utiliser cet outil. Si l’organisation autorise actuellement l’outil pour tous les projets, la tentative de définir ce champ sur false échoue. Modifiez la politique de l’organisation pour réserver l’outil à certains projets avant de le désactiver dans un projet donné.
Terraform actualise les cinq valeurs à partir de celles d’OpenAI. Si elles ont été modifiées dans le tableau de bord, le prochain plan signale l’écart.
Configurez la conservation des données
openai_project_data_retention applique un type de conservation approuvé à un projet. Faites hériter le projet de la politique en vigueur dans l’organisation, sauf si une dérogation a été approuvée pour ce projet :
resource "openai_project_data_retention" "application" {
project_id = "proj_123"
type = "organization_default"
}
Le fournisseur accepte également les valeurs none, zero_data_retention, modified_abuse_monitoring, enhanced_zero_data_retention et enhanced_modified_abuse_monitoring. Les modes disponibles et les transitions autorisées dépendent de la configuration de votre organisation et de la région de résidence des données du projet.
Consultez la page Vos données et le contrat de votre organisation avec OpenAI avant de choisir un paramètre dérogatoire pour un projet.
Gérez la politique par défaut de l’organisation
Utilisez openai_organization_data_retention uniquement si Terraform gère le paramètre de conservation déjà en place au niveau de l’organisation :
resource "openai_organization_data_retention" "default" {
type = "zero_data_retention"
}
Cette ressource modifie un paramètre existant de l’organisation. Elle ne permet pas d’inscrire l’organisation à un programme de conservation des données. Selon les niveaux de conservation concernés, certaines transitions nécessitent l’intervention de l’assistance ou sont impossibles.
Si vous retirez openai_project_hosted_tool_permissions ou
openai_project_data_retention de la configuration, Terraform retire la ressource
de son état, mais conserve les paramètres distants. En revanche, si vous retirez
openai_project_model_permissions, Terraform supprime la configuration des
autorisations d’accès aux modèles du projet. Tenez compte de ces différences
lorsque vous examinez un plan de destruction.
Détectez les modifications effectuées en dehors de Terraform
Générez un plan pour actualiser l’état distant et le comparer à la configuration que vous avez examinée :
terraform plan -detailed-exitcode
Le code de sortie 0 indique qu’il n’y a aucune modification, 2 que le plan contient des modifications et 1 que Terraform a rencontré une erreur. Examinez toute modification inattendue avant d’appliquer le plan. Si un administrateur a effectué une modification en urgence, déterminez d’abord à quoi elle sert avant de laisser une automatisation l’écraser.
Exécutez l’exemple complet
L’exemple suivant gère les trois contrôles du projet dans une même configuration. Créez le fichier 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
}
Créez le fichier terraform.tfvars en indiquant l’identifiant d’un projet existant, les identifiants de modèles visibles pour l’organisation, la politique d’accès aux outils hébergés et un type de conservation approuvé :
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"
Cet exemple active tous les outils hébergés pour pouvoir s’exécuter lorsque la politique de l’organisation les autorise pour tous les projets. Ne passez une valeur à false qu’une fois que la politique de l’organisation réserve l’outil correspondant à certains projets. Avant d’appliquer le plan, vérifiez que l’identifiant du modèle et le type de conservation sont disponibles pour votre organisation.
Initialisez Terraform, puis examinez et appliquez le plan enregistré :
terraform init
terraform fmt
terraform validate
terraform plan -out=tfplan
terraform show tfplan
terraform apply tfplan
Le premier plan devrait prévoir l’ajout de trois ressources. Pour les outils hébergés et la conservation des données, chaque ajout signifie que Terraform prend en charge un paramètre existant, unique pour le projet. Aucun objet distant distinct n’est créé. La ressource qui gère les autorisations d’accès aux modèles crée ou met à jour la configuration de ces autorisations pour le projet.
Exécutez de nouveau terraform plan pour vérifier que la configuration n’entraîne aucune autre modification. Si le plan signale un écart, vérifiez si un autre administrateur ou une automatisation a modifié un paramètre du projet avant d’appliquer une nouvelle mise à jour.