RevealSecret@1
Der Node RevealSecret@1 entschlüsselt ein benanntes Secret-Attribut einer Runtime-Entität und schreibt den Klartext in den DataContext, damit nachfolgende Nodes ihn verwenden können (zum Beispiel zur Authentifizierung gegenüber einem externen System).
Verfügbar ab dem System-CK-Modell 2.5.0 und dem Mesh-Adapter-Release, das den Werttyp Secret ausliefert. Der Node ist Teil des generierten pipeline-schema.json des Mesh Adapters.
Warum ein eigener Node
Das Lesen von Entitäten mit GetRtEntitiesById@1, GetRtEntitiesByType@1 oder GetRtEntitiesByWellKnownName@1 liefert nie den Wert eines Secret-Attributs — nur den Marker { "isSet": true|false }. Eine Pipeline, die den Wert braucht, muss ihn ausdrücklich mit RevealSecret@1 anfordern:
- Privilegiert: Der Node entschlüsselt im Prozess des Mesh Adapters. Keine öffentliche API ist beteiligt, und keine öffentliche API bietet Entschlüsselung an.
- Ein Attribut pro Node: Die Konfiguration benennt die Entität, ihren Typ und das Attribut. Es gibt keine Wildcard.
- Gezählt: Jede Entschlüsselung erhöht die Metrik
octo.secrets.decrypt. - Nie geloggt: Der Wert erscheint nicht in Logs. Offengelegte Werte werden in Debug-Snapshots, Dry-Run-Ausgaben, Ausführungsergebnissen, Fehlermeldungen von Nodes und gespeicherten Ausführungsfehlern als
***maskiert. Debug-Snapshots listen die maskierten Stellen inredactedPaths(JSONPaths ab dem Snapshot-Objekt, z. B.$.output.smtp.password; ein innerhalb eines längeren Strings maskierter Wert wird mit dem Pfad dieses Strings gelistet), damit das Studio genau diese Pfade markiert.
Adapter-Voraussetzungen
- Mesh Adapter
- Der Mesh Adapter muss den Secret Encryption Key Ring erhalten (Workload-Flag
ReceivesClusterSecrets, siehe Secret Encryption Key Ring). Ohne ihn scheitert der Node mit einem Konfigurationsfehler.
Node-Konfiguration
Zu den Feldern targetPath, targetValueWriteMode und targetValueKind siehe Übersicht.
transformations:
- type: RevealSecret@1
ckTypeId: System.Communication/EMailSenderConfiguration
rtIdPath: $.config.rtId
attributeName: Password
targetPath: $.smtp.password
identity: ServiceAccount
Parameter
| Parameter | Typ | Pflicht / Standard | Beschreibung |
|---|---|---|---|
attributeName | String | Pflicht | Zu entschlüsselndes Secret-Attribut, Groß-/Kleinschreibung egal. Ein Punkt-Pfad ist nur durch einzelne Record-Attribute erlaubt (Connection.Password); Record-Arrays werden abgelehnt |
ckTypeId | RtCkId | Eines von ckTypeId / ckTypeIdPath | Construction-Kit-Typ-ID der Entität |
ckTypeIdPath | String (JSONPath) | Pfad zur CK-Typ-ID im DataContext | |
rtId | String (24-stellige Hex-Objekt-ID) | Eines von rtId / rtIdPath | Runtime-ID der Entität. Hat Vorrang vor rtIdPath |
rtIdPath | String (JSONPath) | Pfad zur Runtime-ID im DataContext | |
targetPath | String (JSONPath) | $ | Wohin der Klartext geschrieben wird |
targetValueWriteMode | Enum | Overwrite | Siehe Übersicht |
targetValueKind | Enum | Simple | Siehe Übersicht |
documentMode | Enum | Extend | Wie das Ergebnis in das DataContext-Dokument übernommen wird |
identity | Caller | ServiceAccount | Caller | Identität, mit der die Entität gelesen wird. System wird vom Node abgelehnt |
description | String | Optional | Freitext |
Schema-Gruppen im Studio-Editor: Entity (ckTypeId, ckTypeIdPath, rtId, rtIdPath), Secret (attributeName), Paths, Write Mode, Execution (identity), General (description).
Verhalten
- Ist das Attribut nicht gesetzt, erhält das Ziel
null. - Existiert die Entität nicht oder ist das Attribut nicht vom Werttyp
Secret, scheitert der Node. - Wurde der gespeicherte Wert mit einer Key-ID verschlüsselt, die der Key Ring des Adapters nicht enthält (
keyMissing, z. B. nach einem Restore aus einer anderen Umgebung), gilt er als nicht gesetzt: Der Node schreibtnullund loggt einen Fehler ohne den Wert. Geben Sie den Wert neu ein oder nehmen Sie den Schlüssel in den Ring auf (siehe Nicht lesbare Secrets). - Ist der Strict Mode aktiv und der Wert noch als Klartext gespeichert, scheitert der Node; führen Sie den Encrypt-Sweep aus oder geben Sie den Wert neu ein.
- Typwechselnde Nodes (
ConvertDataType,SetPrimitiveValue,If,Switch,ExecuteCSharp,DataMapping) scheitern an einem Secret-Marker mit „Secret not supported“; das Lesen von<path>.isSetals Boolean funktioniert. GetPipelineConfigByWellKnownName@1undGetPipelineConfigByCkTypeId@1maskieren die Secret-Attribute der Konfiguration, die sie kopieren.- Halten Sie den Klartext nur so lange wie nötig im DataContext. Schreiben Sie ihn nicht in Entitäten, Archive, Benachrichtigungen oder HTTP-Antworten.
Beispiel
Eine Konfigurations-Entität über ihren Well-known Name auflösen, ihr Client Secret offenlegen und für einen HTTP-Request verwenden:
transformations:
- type: GetRtEntitiesByWellKnownName@1
ckTypeId: System.Communication/FinApiConfiguration
wellKnownNamePath: $.configurationName # z. B. "FinApi" im eingehenden Payload
rtIdTargetPath: $.configurationRtId
- type: RevealSecret@1
rtIdPath: $.configurationRtId
ckTypeId: System.Communication/FinApiConfiguration
attributeName: ClientSecret
targetPath: $.secrets.clientSecret
identity: ServiceAccount
- type: MakeHttpRequest@1
# ... verwendet $.secrets.clientSecret