keenauth_directory_token
La risorsa keenauth_directory_token crea un token bearer SCIM di una directory per l'identity provider che vi esegue il provisioning di utenti e gruppi. Il provider conserva il token nello stato solo cifrato con una chiave pubblica RSA che fornisci.
resource "keenauth_directory_token" "okta" {
directory_id = keenauth_directory.acme_okta.id
label = "Okta"
expires_in_days = 180
public_key = file("${path.module}/scim-token-key.pub.pem")
lifecycle {
create_before_destroy = true
}
}
output "okta_scim_token_encrypted" {
value = keenauth_directory_token.okta.encrypted_token
}
Il token non viene mai memorizzato in chiaro
L'API restituisce un token SCIM una sola volta, nella risposta che lo crea, e nessun endpoint può leggerlo in seguito. Il provider cifra il token con la tua chiave pubblica (RSA-OAEP con SHA-256, MGF1 SHA-256 ed etichetta vuota) e scrive in encrypted_token solo il testo cifrato in base64. Il token in chiaro non raggiunge mai lo stato, un file di plan, un output o un log. Solo il possessore della chiave privata può decifrarlo, quindi un file di stato trapelato non rivela il token.
Crea la coppia di chiavi una volta sola, fuori da OpenTofu, e tieni la chiave privata fuori dalla configurazione:
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out scim-token-key.pem
openssl pkey -in scim-token-key.pem -pubout -out scim-token-key.pub.pem
Dopo tofu apply, decifra il token e consegnalo all'identity provider:
tofu output -raw okta_scim_token_encrypted | base64 -d | \
openssl pkeyutl -decrypt -inkey scim-token-key.pem \
-pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 -pkeyopt rsa_mgf1_md:sha256
public_key deve essere una chiave pubblica RSA in formato PEM (PUBLIC KEY o RSA PUBLIC KEY) di almeno 2048 bit. Una chiave privata o una chiave più piccola viene rifiutata già in fase di plan. Se il provider non riesce a consegnare un token, lo revoca subito e l'apply fallisce, così non esiste alcun token valido che nessuno possiede.
Solo creazione e revoca
Un token non può essere modificato. Ogni argomento (directory_id, label, expires_in_days, public_key) crea un nuovo token quando lo cambi, e il vecchio token viene revocato. Distruggere la risorsa revoca il token.
Un token revocato al di fuori del provider, o scaduto, viene rimosso dallo stato al refresh successivo, e l'apply successivo ne crea uno nuovo. Eliminare la directory elimina i suoi token.
Rotazione
Una directory ha al massimo 2 token validi; un terzo viene rifiutato con 409. Basta per ruotare senza interruzioni: con create_before_destroy = true il nuovo token viene creato prima che quello vecchio venga revocato. Consegna il nuovo token all'identity provider nella stessa finestra di modifica.
Argomenti
labelè lungo da 1 a 100 caratteri, senza caratteri di controllo e senza spazi iniziali o finali. Il valore predefinito dell'API èToken.expires_in_daysva da 30 a 730. Il valore predefinito dell'API è 365.encrypted_token,created_at,expires_ateidsono di sola lettura.
Importazione
La risorsa non può essere importata: il valore di un token esistente non può mai essere riletto, quindi un token importato non potrebbe essere consegnato. Revoca un token vecchio con keenauth directories tokens delete <directory_id> <token_id> e lascia che il provider ne crei uno nuovo.