
# keenauth_directory

`keenauth_directory` kaynağı bir organizasyon için SCIM 2.0 dizini oluşturur. Dizin, organizasyonun kimlik sağlayıcısının (Okta, Entra ID ve diğerleri) kullanıcı ve grupları sağladığı uç noktadır.

```terraform
resource "keenauth_directory" "acme_okta" {
  organization_id = keenauth_organization.acme.id
  name            = "Okta"
  scim_host       = "acme.eu.keenauth.app"
}

output "scim_base_url" {
  value = keenauth_directory.acme_okta.base_url
}
```

`base_url` değeri `https://<scim_host>/scim/v2/<id>` biçimindedir. Kimlik sağlayıcıya bir SCIM token'ıyla birlikte verin.

## Yerinde değişiklik ve yeniden oluşturma

`name` ve dizin ayarları yerinde değişir. Sağlayıcı yalnız değişen alanları taşıyan bir JSON birleştirme yaması ve son okumanın ETag değerini `If-Match` olarak gönderir; dizin bu okumadan sonra yapılandırma dışında değiştiyse API `412` döner, hiçbir şey değişmez ve plan'ı yeniden çalıştırırsınız. API dizini oluştururken ayar almaz; bu yüzden yapılandırdığınız ayarlar oluşturmanın hemen ardından aynı apply içinde uygulanır.

`organization_id`, `scim_host` ya da `type` değişirse dizin yeniden oluşturulur.

- Yeniden oluşturma önce eski dizini siler. Dizin silme anında ve kalıcıdır: token'ları, sağlanan kullanıcılar, gruplar, grup üyelikleri ve bekleyen pasifleştirme bekletmeleri onunla gider; kimlik sağlayıcının SCIM istekleri `401` alır. Yeni dizinin kimliği ve taban URL'si yenidir; kimlik sağlayıcıyı yeni token ile ona yönlendirmeniz gerekir.
- Kaybetmeyi göze alamayacağınız bir dizini `lifecycle { prevent_destroy = true }` ile koruyun.
- Yeni dizin `inactive` durumundadır. Sağlayıcı dizini etkinleştirmez ya da pasifleştirmez (bunu `keenauth directories activate` ve `deactivate` yapar); `state` yalnız okunur.
- Organizasyonu silmek dizinlerini de siler. Sağlayıcı dışında silinen dizin durumdan düşer ve yeniden planlanır.

## Ayarlar

```terraform
resource "keenauth_directory" "acme_okta" {
  organization_id = keenauth_organization.acme.id
  name            = "Okta"
  scim_host       = "acme.eu.keenauth.app"

  provisioning_mode   = "user_store"
  attribute_allowlist = ["title", "urn:ietf:params:scim:schemas:extension:enterprise:2.0:user:department"]
  delete_action       = "remove_membership"

  mass_deprovision_guard = {
    percent      = 20
    absolute_min = 50
  }
}
```

| Ayar | Değerler | Varsayılan |
|---|---|---|
| `provisioning_mode` | `user_store` (ortam kullanıcıları, organizasyon üyelikleri ve grup rolleri yazılır) ya da `mirror` (yalnız dizin kayıtları tutulur) | `user_store` |
| `attribute_allowlist` | Dizin kullanıcılarında saklanan en çok 40 isteğe bağlı SCIM özniteliği: `title`, `usertype`, `phonenumbers` ve kurumsal uzantı anahtarları | boş |
| `unverified_domain_action` | E-posta alan adı organizasyon için doğrulanmamış kullanıcı için `invite` ya da `mirror_only` | `invite` |
| `delete_action` | SCIM `DELETE /Users` için `remove_membership` ya da `delete_user` | `remove_membership` |
| `on_delete_memberships` | Dizin silinince dizinden gelen üyelikler için `keep`, `suspend` ya da `remove` | `keep` |
| `mass_deprovision_guard` | `enabled`, `percent` (5–50) ve `absolute_min` (10–1000); 5 dakika içinde ikisini de aşan pasifleştirmeler onaya bekletilir | açık, 10, 25 |
| `send_welcome_email` | `true` ya da `false`: yeni dizin kullanıcılarına hesap etkinleştirme e-postası | `false` |

- Yapılandırmadığınız ayar sunucudaki değeri korur; bir ayarı yapılandırmadan çıkarmak son değerini korur. `mass_deprovision_guard` içinde yazmadığınız alan değerini korur.
- `attribute_allowlist`'ten çıkarılan anahtar, aynı güncellemede dizinin bütün kullanıcı kayıtlarından silinir. Boş küme (`[]`) listeyi temizler.
- Dizinde kullanıcı kaydı varken `provisioning_mode` değişmez; API `409` döner.

## SCIM token'ları

SCIM token'ı bir sırdır. API onu dizini oluşturan yanıtta bir kez döndürür ve sonradan hiçbir uç nokta onu okuyamaz. Sağlayıcı onu durum dosyasına, plan dosyasına, çıktıya ya da loga hiçbir zaman yazmaz. Bu güvenceyi korumak ve kimsenin elinde olmayan geçerli bir kimlik bilgisi kalmaması için sağlayıcı, oluşturmanın döndürdüğü token'ı hemen iptal eder.

Kimlik sağlayıcınız için token'ı [`keenauth_directory_token`](/docs/terraform/directory-token) ile oluşturun. Bu kaynak token'ı durum dosyasında yalnız RSA ortak anahtarınızla şifrelenmiş olarak tutar; siz onu özel anahtarınızla çözersiniz.

Sağlayıcı ilk token'ı iptal edemezse apply yine başarılı olur ve iptal komutunu (`keenauth directories tokens delete <directory_id> <token_id>`) içeren bir uyarı yazar.

## Argümanlar

- `scim_host` ortamın birincil host'udur: etkin özel alan adı, yoksa `<slug>.<region>.keenauth.app`. Bu ortama yönlenen küçük harfli bir DNS adı olmalıdır; aksi halde API `422` döner. API bunun birincil host olup olmadığını denetlemez; bu yüzden ikincil bir özel alan adı da kabul edilir.
- `name` 1 ile 64 karakter arasındadır; denetim karakteri ve baştaki ya da sondaki boşluk içeremez. Tekil olması gerekmez.
- `type` değeri `scim`'dir; GA-1'de başka değer olamaz.
- `state`, `base_url`, `created_at`, `etag` ve `id` salt okunurdur. API `scim_host` değerini döndürmez; sağlayıcı onu `base_url` host'undan türetir.

## İçe aktarma

Dizin kimliğiyle içe aktarın:

```shell
tofu import keenauth_directory.acme_okta dir_01j9zq3v8c5m2x7k4t6r1n0b3d
```
