For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
기본 탐색 메뉴
Theme

Terraform으로 프로젝트와 접근 권한 관리하기

프로젝트를 만들고 역할과 그룹을 기반으로 접근 권한을 설정하세요.

이 가이드에서는 OpenAI 프로젝트를 만들고 재사용 가능한 접근 제어 구성을 작성합니다. 먼저 프로젝트 역할로 사용자나 서비스 계정이 수행할 수 있는 작업을 정의합니다. 그런 다음 접근 권한이 필요한 계정을 조직 그룹에 추가하고 해당 그룹을 프로젝트에 연결합니다.

기본 워크플로우를 완료하면 다음 작업을 반복해서 수행할 수 있는 구성이 마련됩니다.

  • 애플리케이션용 OpenAI 프로젝트를 만듭니다.
  • 필요한 권한만 부여하는 프로젝트 역할을 정의합니다.
  • 접근 권한이 필요한 계정을 위한 조직 그룹을 만듭니다.
  • 역할을 통해 그룹에 프로젝트 접근 권한을 부여합니다.
  • 기존 조직 사용자를 그룹에 추가합니다.

시작하기 전에

Terraform 프로바이더 설정을 완료하고 관리자 API 키를 OPENAI_ADMIN_KEY 환경 변수로 내보내세요. 기존 조직 사용자의 ID와 애플리케이션에 사용하도록 승인된 권한 식별자도 필요합니다. 워크플로우를 평가할 때는 테스트용 조직을 사용하세요.

openai_project 리소스를 삭제하면 프로젝트는 영구 삭제되지 않고 보관 처리됩니다. 보관된 프로젝트는 복원할 수 없습니다.

프로젝트의 관리 범위 설정하기

애플리케이션용 프로젝트를 만드세요.

resource "openai_project" "application" {
  name = "example-application-development"
}

프로젝트는 애플리케이션의 API 사용량, 서비스 계정, 요청 한도, 지출 알림 및 프로젝트 설정을 관리하는 단위입니다. Terraform에서는 생성된 프로젝트 ID를 openai_project.application.project_id로 참조할 수 있습니다. 프로젝트 수준의 리소스가 이 값을 참조하면 Terraform은 해당 리소스보다 프로젝트를 먼저 만듭니다.

이 단계에서는 프로젝트 이름을 직접 지정합니다. 뒤에서 살펴볼 전체 예제에서는 이름을 변수로 지정해 여러 환경에서 구성을 재사용할 수 있습니다.

프로젝트 권한 정의하기

애플리케이션에 승인된 권한으로 프로젝트 역할을 만드세요.

resource "openai_project_role" "application" {
  project_id  = openai_project.application.project_id
  role_name   = "Application API access"
  description = "Permissions approved for this application"
  permissions = ["api.webhooks.read"]
}

openai_project_role 리소스는 계정이 프로젝트 내에서 수행할 수 있는 작업을 정의합니다. 이 예제에서는 웹훅 설정을 읽을 수 있는 권한을 부여합니다. api.webhooks.read를 애플리케이션에 승인된 권한 식별자로 바꾸고, 처음에는 필요한 권한만 지정하세요.

permissions를 변경하면 역할이 업데이트됩니다. 변경 사항을 적용하기 전에 terraform plan을 실행해 추가되거나 제거되는 권한을 모두 검토하세요.

그룹 만들기 또는 재사용하기

Terraform으로 그룹의 수명 주기를 관리하려면 조직 그룹을 만드세요.

resource "openai_group" "application_access" {
  name = "example-application-development-access"
}

그룹은 조직 수준에서 관리되며 여러 프로젝트에서 재사용할 수 있습니다. 그룹 이름 끝에 -access를 붙이면 이 그룹이 단순히 팀을 나타내는 것이 아니라 구성원에게 접근 권한을 부여한다는 점을 알 수 있습니다.

기존 그룹을 다른 시스템에서 관리한다면 다음과 같이 조회하세요.

data "openai_group" "application_access" {
  group_id = "group_123"
}

데이터 소스는 그룹 정보만 조회하며 이 구성에서 그룹의 수명 주기를 관리하지 않습니다. SCIM으로 관리되는 그룹도 조회할 수 있지만, 그룹 구성원의 추가와 제거는 해당 그룹을 관리하는 ID 관리 시스템에서 수행하세요.

그룹에 프로젝트 접근 권한 부여하기

프로젝트 내에서 그룹에 사용자 지정 역할을 할당하세요.

resource "openai_project_group_role" "application_access" {
  project_id = openai_project.application.project_id
  group_id   = openai_group.application_access.group_id
  role_id    = openai_project_role.application.role_id
}

이 예제에서는 Terraform이 관리하는 그룹을 사용합니다. 데이터 소스로 기존 그룹을 조회해 재사용하는 경우 group_id 표현식을 data.openai_group.application_access.group_id로 바꾸세요.

역할 할당은 다음 세 객체를 연결합니다.

  • project_id는 그룹이 접근할 프로젝트를 지정합니다.
  • group_id는 접근 권한을 받을 계정들이 속한 그룹을 지정합니다.
  • role_id는 그룹에 부여할 권한을 정의한 역할을 지정합니다.

그룹 구성원은 이 프로젝트에서 사용자 지정 역할을 상속받습니다. 역할이나 그룹을 추가하는 것만으로는 접근 권한이 부여되지 않습니다. 그룹에 역할을 할당해야 합니다.

사용자 및 기타 계정 추가하기

Terraform이 관리하는 조직 그룹에 계정을 추가하려면 openai_group_user를 사용하세요.

resource "openai_group_user" "application_developer" {
  group_id = openai_group.application_access.group_id
  user_id  = "user_123"
}

user_id에는 기존 조직 사용자나 서비스 계정의 ID를 지정할 수 있습니다. 서비스 계정을 추가하려면 openai_project_service_account.application.id를 user_id 값으로 사용하세요. 그룹을 통한 서비스 계정의 접근 권한 부여, 인증 및 자격 증명 수명 주기 관리 요건은 서비스 계정을 참고하세요.

그룹을 통한 접근 권한 부여가 적절하지 않다면 역할을 직접 할당하세요.

resource "openai_project_user_role" "application_developer" {
  project_id = openai_project.application.project_id
  user_id    = "user_123"
  role_id    = openai_project_role.application.role_id
}

조직 전체에 적용할 권한은 조직 역할로 정의한 뒤 직접 할당하거나 그룹을 통해 할당하세요.

variable "organization_role_permissions" {
  type = list(string)
}

resource "openai_role" "platform_operator" {
  role_name   = "Platform operator"
  description = "Organization permissions for the platform team"
  permissions = var.organization_role_permissions
}

resource "openai_user_role" "platform_operator" {
  user_id = "user_123"
  role_id = openai_role.platform_operator.role_id
}

organization_role_permissions에 승인된 조직 수준의 권한 식별자를 지정하세요. 역할을 할당할 때 꼭 필요한 범위의 권한만 부여하도록 조직 권한과 프로젝트 권한을 구분하세요.

현재 역할 할당 확인하기

접근 권한을 변경하기 전에 계정에 할당된 조직 역할과 프로젝트 역할을 조회하세요.

data "openai_user_roles" "current" {
  user_id = "user_123"
}

data "openai_project_user_roles" "current" {
  project_id = openai_project.application.project_id
  user_id    = "user_123"
}

output "organization_roles" {
  value = data.openai_user_roles.current.roles
}

output "project_roles" {
  value = data.openai_project_user_roles.current.roles
}

데이터 소스는 현재 역할 할당을 조회합니다. 조회한 할당이 Terraform의 관리 대상으로 등록되지는 않습니다.

역할 할당 제거하기

Terraform이 이미 관리하는 역할 할당의 리소스 블록을 구성에서 제거하면 다음 실행 계획에 해당 원격 할당의 삭제가 포함됩니다. 계획을 검토하고 삭제 후에도 다른 경로를 통해 필요한 접근 권한이 모두 유지되는지 확인하세요.

기존 역할 할당을 제거하려면 먼저 해당 리소스를 선언하고 문서에 명시된 복합 ID로 할당을 가져오세요. 첫 실행 계획에 변경 사항이 없는지 확인한 뒤 구성에서 리소스를 제거하고 삭제 계획을 적용하세요.

Terraform은 상태에 기록된 역할 할당만 제거할 수 있습니다. 기존 기본 할당을 제거하려면 먼저 해당 Terraform 리소스로 할당을 가져오세요. 그런 다음 구성에서 리소스를 제거하고 그 결과로 생성된 삭제 계획을 적용하세요. 조직에서 이 가져오기 및 삭제 워크플로우를 허용하지 않는다면 대시보드 또는 Administration API를 사용하는 승인된 절차에 따라 할당을 제거하세요.

가져오기에 사용하는 ID 형식과 기존 리소스를 Terraform 관리 대상으로 안전하게 전환하는 순서는 가져오기 및 조정을 참고하세요.

전체 예제 실행하기

앞의 단계별 예제에서는 리소스 간 관계를 쉽게 파악할 수 있도록 값을 직접 지정했습니다. 전체 구성에서는 반복해서 사용하는 환경별 값을 변수로 지정합니다. 따라서 리소스 정의를 수정하지 않고도 구성을 재사용할 수 있습니다.

다음 구성을 main.tf 파일로 저장하세요.

terraform {
  required_version = ">= 1.0"

  required_providers {
    openai = {
      source  = "openai/openai"
      version = ">= 1.0.0"
    }
  }
}

provider "openai" {}

variable "project_name" {
  type = string
}

variable "project_role_permissions" {
  type = list(string)
}

variable "user_id" {
  type = string
}

resource "openai_project" "application" {
  name = var.project_name
}

resource "openai_project_role" "application" {
  project_id  = openai_project.application.project_id
  role_name   = "Application API access"
  description = "Permissions approved for this application"
  permissions = var.project_role_permissions
}

resource "openai_group" "application_access" {
  name = "${var.project_name}-access"
}

resource "openai_project_group_role" "application_access" {
  project_id = openai_project.application.project_id
  group_id   = openai_group.application_access.group_id
  role_id    = openai_project_role.application.role_id
}

resource "openai_group_user" "application_developer" {
  group_id = openai_group.application_access.group_id
  user_id  = var.user_id
}

output "project_id" {
  value = openai_project.application.project_id
}

output "group_id" {
  value = openai_group.application_access.group_id
}

output "project_role_id" {
  value = openai_project_role.application.role_id
}

terraform.tfvars 파일을 만들고 고유한 프로젝트 이름, 기존 조직 사용자의 ID, 승인된 권한을 지정하세요.

project_name = "example-application-development"
user_id      = "user_123"

project_role_permissions = [
  "api.webhooks.read",
]

Terraform을 초기화한 다음 실행 계획을 저장하고 검토한 뒤 적용하세요.

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

첫 실행 계획에는 추가할 리소스가 5개 표시되어야 합니다. 계획을 적용하면 사용자는 그룹을 통해 사용자 지정 프로젝트 역할을 상속받습니다. terraform output을 실행하면 프로젝트 ID, 그룹 ID, 프로젝트 역할 ID가 출력됩니다. terraform plan을 다시 실행해 더 이상 변경할 사항이 없는지 확인하세요.

사용자를 더 추가하려면 사용자마다 고유한 Terraform 리소스 이름을 지정해 같은 방식으로 그룹에 추가하세요. 사람이 아닌 계정을 구성하려면 서비스 계정을 참고하세요. 프로젝트에 보호 조치를 추가하려면 모델, 도구 및 데이터 제어와 요청 한도 및 지출을 참고하세요.