keenauth_directory_token
Die Ressource keenauth_directory_token legt ein SCIM-Bearer-Token eines Verzeichnisses für den Identity Provider an, der dorthin Benutzer und Gruppen bereitstellt. Der Provider speichert das Token im State nur verschlüsselt mit einem öffentlichen RSA-Schlüssel, den Sie angeben.
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
}
Das Token wird niemals im Klartext gespeichert
Die API gibt ein SCIM-Token einmal zurück, und zwar in der Antwort, die es anlegt; danach kann kein Endpunkt es lesen. Der Provider verschlüsselt das Token mit Ihrem öffentlichen Schlüssel (RSA-OAEP mit SHA-256, MGF1 mit SHA-256 und leerem Label) und schreibt nur den Base64-Chiffretext nach encrypted_token. Das Klartext-Token gelangt nie in den State, eine Plandatei, eine Ausgabe oder ein Log. Nur der Inhaber des privaten Schlüssels kann es entschlüsseln; eine abgeflossene State-Datei legt das Token daher nicht offen.
Erzeugen Sie das Schlüsselpaar einmal außerhalb von OpenTofu und halten Sie den privaten Schlüssel aus Ihrer Konfiguration heraus:
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
Entschlüsseln Sie nach tofu apply das Token und geben Sie es dem 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 muss ein PEM-kodierter öffentlicher RSA-Schlüssel (PUBLIC KEY oder RSA PUBLIC KEY) mit mindestens 2048 Bit sein. Ein privater Schlüssel oder ein kleinerer Schlüssel wird bereits bei der Planung abgelehnt. Kann der Provider kein Token ausliefern, widerruft er es sofort und das Apply schlägt fehl; so existiert kein gültiges Token, das niemand besitzt.
Nur Anlegen und Widerrufen
Ein Token kann nicht geändert werden. Jedes Argument (directory_id, label, expires_in_days, public_key) erzeugt bei einer Änderung ein neues Token, und das alte Token wird widerrufen. Das Löschen der Ressource widerruft das Token.
Ein außerhalb des Providers widerrufenes oder abgelaufenes Token wird beim nächsten Refresh aus dem State entfernt, und das nächste Apply legt ein neues an. Das Löschen des Verzeichnisses löscht seine Tokens.
Rotation
Ein Verzeichnis hat höchstens 2 gültige Tokens; ein drittes wird mit 409 abgelehnt. Das reicht für eine Rotation ohne Ausfallzeit: Mit create_before_destroy = true wird das neue Token angelegt, bevor das alte widerrufen wird. Geben Sie dem Identity Provider das neue Token im selben Änderungsfenster.
Argumente
labelist 1 bis 100 Zeichen lang, ohne Steuerzeichen und ohne führende oder nachgestellte Leerzeichen. Der API-Standardwert istToken.expires_in_daysliegt zwischen 30 und 730. Der API-Standardwert ist 365.encrypted_token,created_at,expires_atundidsind schreibgeschützt.
Import
Die Ressource kann nicht importiert werden: Der Wert eines bestehenden Tokens kann nie wieder gelesen werden, ein importiertes Token könnte also nicht ausgeliefert werden. Widerrufen Sie ein altes Token mit keenauth directories tokens delete <directory_id> <token_id> und lassen Sie den Provider ein neues anlegen.