keenauth_webhook_endpoint

keenauth_webhook_endpoint kaynağı bir web kancası ucunu yönetir: ortamın olaylarını Standard Webhooks ile imzalanmış olarak alan bir HTTPS adresi. Sağlayıcı imza sırrını durum dosyasında yalnız sizin verdiğiniz RSA ortak anahtarıyla şifrelenmiş tutar.

resource "keenauth_webhook_endpoint" "orders" {
  key         = "orders"
  url         = "https://hooks.example.com/keenauth"
  description = "Order service"
  event_types = ["user.created", "user.updated", "organization.created"]
  event_schema_versions = {
    "user.created" = 1
  }
  public_key = file("${path.module}/webhook-secret-key.pub.pem")

  rotation_trigger          = time_rotating.webhook_secret.id
  previous_secret_ttl_hours = 48
}

resource "time_rotating" "webhook_secret" {
  rotation_days = 90
}

output "orders_webhook_secret_encrypted" {
  value = keenauth_webhook_endpoint.orders.encrypted_signing_secret
}

Bağımsız değişkenler

Her bağımsız değişken yerinde değişir. Güncelleme yalnız değişen alanları JSON Merge Patch olarak, son okumanın ETag'ini If-Match başlığında göndererek yapar. Uç son okumadan sonra başka bir yerden değiştirildiyse apply 412 ile başarısız olur ve hiçbir şey değişmez; sapmayı görmek için planı yeniden çalıştırın.

İmza sırrı hiçbir zaman düz metin saklanmaz

API imza sırrını (idp_whsec_…) yalnız uç oluşturulurken ve sır döndürülürken verir. public_key verilmişse sağlayıcı sırrı RSA-OAEP (SHA-256, MGF1 SHA-256, boş etiket) ile şifreler ve encrypted_signing_secret alanına yalnız base64 şifreli metni yazar. public_key yoksa sır atılır; sonradan keenauth webhook-endpoints rotate-secret ile döndürün ya da public_key ekleyin. Düz sır durum dosyasına, plan dosyasına, çıktıya ya da loga hiçbir zaman girmez.

Anahtar çiftini bir kez, OpenTofu dışında oluşturun ve özel anahtarı yapılandırmanızın dışında tutun:

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out webhook-secret-key.pem
openssl pkey -in webhook-secret-key.pem -pubout -out webhook-secret-key.pub.pem

tofu apply sonrasında sırrı çözüp alıcıya verin:

tofu output -raw orders_webhook_secret_encrypted | base64 -d | \
  openssl pkeyutl -decrypt -inkey webhook-secret-key.pem \
    -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 -pkeyopt rsa_mgf1_md:sha256

public_key en az 2048 bitlik, PEM kodlu bir RSA ortak anahtarı (PUBLIC KEY ya da RSA PUBLIC KEY) olmalıdır. Özel anahtar ya da daha küçük bir anahtar plan aşamasında reddedilir.

Döndürme

public_key eklendiğinde ya da değiştiğinde ve rotation_trigger yeni bir değere geçtiğinde (örneğin bir time_rotating kaynağının kimliği) sır döndürülür. Döndürmeden sonra eski sır previous_secret_ttl_hours boyunca yenisinin yanında imzalamayı sürdürür (0 ile 168 arası; API varsayılanı 24; 0 eskisini hemen düşürür), böylece alıcı olay kaçırmadan geçiş yapar. previous_secret_expires_at eski sırrın ne zaman duracağını gösterir. public_key'i kaldırmak yalnız encrypted_signing_secret'i kaldırır; sırrı döndürmez.

Sınırlar ve durum

Etkin bir uç planın ortam başına sınırına sayılır: Free 3, Startup 20, Business 20, Enterprise 50. Bir uç daha oluşturmak ya da etkinleştirmek 403 quota_exceeded ile başarısız olur; başka bir ucu kapatın ya da silin veya planı yükseltin.

KeenAuth sürekli başarısız olan (disabled_by_failure) ya da alıcısı 410 Gone dönen (disabled_by_receiver) bir ucu kapatır. Sonraki plan yapılandırılmış status değerine dönüşü gösterir; uygulamak ucu yeniden etkinleştirir.

İçe aktarma

Uç kimliği ya da anahtarıyla içe aktarın:

tofu import keenauth_webhook_endpoint.orders orders

İmza sırrı geri okunamaz; bu yüzden içe aktarmadan sonra encrypted_signing_secret boştur. Yapılandırmanızda public_key varsa sonraki apply sırrı döndürür ve yenisini şifreli teslim eder.

Test gönderimi, yeniden oynatma ve teslim yeniden denemesi yapılandırma değil, tek seferlik eylemlerdir. Bunlar için keenauth webhook-endpoints test, replay ve deliveries komutlarını kullanın.