keenauth_connection_oidc_config

keenauth_connection_oidc_config リソースは、エンタープライズ OIDC 接続のリライングパーティー設定を行います。設定対象は、ID プロバイダの発行者、そこに登録されたクライアント ID、クライアント認証方式、プロバイダプロフィール、クライアントシークレットです。

クライアントシークレットは書き込み専用です

client_secret_wo は書き込み専用の引数です。プロバイダはこの値を API に送信しますが、state やプランファイルには書き込まず、API からも返されません。書き込み専用の引数には OpenTofu 1.11 または Terraform 1.11 以降が必要です。それより古いバージョンでは、何も送信される前に構成が拒否されます。その場合は代わりに keenauth connections oidc put でシークレットを設定してください。

OpenTofu がプランにもシークレットを保存しないように、シークレットはエフェメラル変数から指定してください。

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
}

redirect_uri(https://<sp_host>/sso/<connection_id>/callback)は ID プロバイダに登録してください。ID プロバイダが対応している場合は、client_auth_method = "private_key_jwt" を推奨します。この場合、環境の鍵がクライアントアサーションに署名するため、シークレットは一切不要になります。

ローテーション

プロバイダはシークレットを読み戻せないため、シークレットの変更を検知できません。プロバイダが client_secret_wo を送信するのは、リソースの作成時と client_secret_wo_version が変更されたときです。ローテーションするには、新しいシークレットを設定し、バージョンを増やす変更を同じ変更内で行ってください。

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 には削除操作がありません。リソースを削除すると state から削除されるだけで、設定は接続と一緒に削除されます。