keenauth_connection_oidc_config

keenauth_connection_oidc_config 리소스는 엔터프라이즈 OIDC 연결의 신뢰 당사자(RP) 구성을 설정합니다. 여기에는 ID 공급자의 발급자(issuer), 해당 공급자에 등록된 클라이언트 ID, 클라이언트 인증 방식, 공급자 프로필, 클라이언트 시크릿이 포함됩니다.

클라이언트 시크릿은 쓰기 전용입니다

client_secret_wo는 쓰기 전용 인수입니다. 프로바이더는 이 값을 API로 전송하며, 상태(state) 파일이나 계획(plan) 파일에는 기록하지 않습니다. API도 이 값을 반환하지 않습니다. 쓰기 전용 인수는 OpenTofu 1.11 이상 또는 Terraform 1.11 이상이 필요합니다. 이전 버전에서는 아무것도 전송되기 전에 구성이 거부됩니다. 이 경우 keenauth connections oidc put으로 시크릿을 설정하십시오.

OpenTofu가 계획에도 시크릿을 저장하지 않도록 임시(ephemeral) 변수에서 시크릿을 전달하십시오.

variable "corp_idp_client_secret" {
  type      = string
  sensitive = true
  ephemeral = true
}

resource "keenauth_connection" "corp" {
  key      = "corp-oidc"
  type     = "enterprise"
  strategy = "oidc"
  name     = "corp-oidc"
}

resource "keenauth_connection_oidc_config" "corp" {
  connection_id      = keenauth_connection.corp.id
  sp_host            = "acme.eu.keenauth.app"
  issuer             = "https://login.idp.example.com"
  client_id          = "keenauth-rp"
  client_auth_method = "client_secret_basic"

  client_secret_wo         = var.corp_idp_client_secret
  client_secret_wo_version = 1
}

ID 공급자에 redirect_uri(https://<sp_host>/sso/<connection_id>/callback)를 등록하십시오. ID 공급자가 지원하는 경우 client_auth_method = "private_key_jwt"를 사용하는 것을 권장합니다. 이 방식에서는 환경의 키가 클라이언트 어설션에 서명하므로 시크릿이 전혀 필요하지 않습니다.

교체

프로바이더는 시크릿을 다시 읽을 수 없으므로 시크릿의 변경을 감지할 수 없습니다. 프로바이더는 리소스를 생성할 때와 client_secret_wo_version이 변경될 때마다 client_secret_wo를 전송합니다. 시크릿을 교체하려면 같은 변경 작업에서 새 시크릿을 설정하고 버전을 올리십시오.

client_secret_expires_at은 ID 공급자가 시크릿을 무효화하는 시점을 알려 주는 참고 값입니다. API는 이 값을 시크릿과 함께만 기록하므로, 버전과 같은 변경 작업에서 변경하십시오.

계획 시점에 검사되는 규칙

규칙 이유
private_key_jwt와 함께 client_secret_wo를 사용할 수 없습니다. 이 방식은 시크릿을 사용하지 않으며, 이 방식으로 전환하면 저장된 시크릿이 삭제됩니다.
client_secret_* 방식은 생성 시 client_secret_wo가 필요하며, 저장된 시크릿이 없으면 새 버전이 필요합니다. 그렇지 않으면 ID 공급자가 토큰 요청을 거부합니다.
첫 번째 쓰기 이후에는 sp_host를 변경할 수 없습니다. 콜백은 구성을 처음 기록할 때 고정됩니다.
provider_profile = "entra"일 때는 entra_tenant_id가 필요하며, 이 경우에만 사용할 수 있습니다. API 규칙입니다.
client_secret_expires_at은 초 단위까지의 UTC여야 합니다(예: 2027-01-31T00:00:00Z). API가 이 형식으로 값을 반환하므로, 다른 형식을 사용하면 계획할 때마다 차이가 표시됩니다.

가져오기와 삭제

연결 ID로 가져오십시오. API는 sp_host, entra_tenant_id, 시크릿을 반환하지 않으므로, 다음 계획에서 구성 값으로 구성을 한 번 기록합니다.

API에는 이 구성을 삭제하는 기능이 없습니다. 리소스를 삭제하면 상태에서만 제거되며, 구성은 해당 연결과 함께 삭제됩니다.