4. Redacting Sensitive Data
4.3 Test Redaction Processor
The redaction processor gives precise control over which attributes and values are permitted or removed from telemetry data.
In this exercise, we will redact the user.visa & user.mastercard values in the span data before it is exported by the Agent.
Exercise
Start the Gateway: In your Gateway terminal window start the Gateway.
../otelcol --config=gateway.yamlEnable the redaction/redact processor: In the Agent terminal window, edit agent.yaml and remove the # we inserted in the previous exercise.
traces:
receivers:
- otlp
processors:
- memory_limiter
- attributes/update # Update, hash, and remove attributes
- redaction/redact # Redact sensitive fields using regex
- resourcedetection
- resource/add_mode
- batch
exporters:
- debug
- file
- otlphttpStart the Agent: In your Agent terminal window start the Agent.
../otelcol --config=agent.yamlStart the Load Generator: In the Loadgen terminal window start the loadgen:
../loadgen -count 1Check the debug output: For both the Agent and Gateway confirm the values for user.visa & user.mastercard have been updated. Notice user.amex attribute value was NOT redacted because a matching regex pattern was not added to blocked_values
-> user.name: Str(George Lucas)
-> user.phone_number: Str(UNKNOWN NUMBER)
-> user.email: Str(62d5e03d8fd5808e77aee5ebbd90cf7627a470ae0be9ffd10e8025a4ad0e1287)
-> payment.amount: Double(69.71)
-> user.visa: Str(****)
-> user.amex: Str(3782 822463 10005)
-> user.mastercard: Str(****)
-> redaction.masked.keys: Str(user.mastercard,user.visa)
-> redaction.masked.count: Int(2) -> user.name: Str(George Lucas)
-> user.phone_number: Str(+1555-867-5309)
-> user.email: Str(george@deathstar.email)
-> user.password: Str(LOTR>StarWars1-2-3)
-> user.visa: Str(4111 1111 1111 1111)
-> user.amex: Str(3782 822463 10005)
-> user.mastercard: Str(5555 5555 5555 4444)
-> payment.amount: Double(65.54)Note
By including summary:debug in the redaction processor, the debug output will include summary information about which matching key values were redacted, along with the count of values that were masked.
-> redaction.masked.keys: Str(user.mastercard,user.visa)
-> redaction.masked.count: Int(2)Check file output: Using jq verify that user.visa & user.mastercard have been updated in the gateway-traces.out.
jq '.resourceSpans[].scopeSpans[].spans[].attributes[] | select(.key == "user.visa" or .key == "user.mastercard" or .key == "user.amex") | {key: .key, value: .value.stringValue}' ./gateway-traces.outNotice that user.amex has not been redacted because a matching regex pattern was not added to blocked_values:
{
"key": "user.visa",
"value": "****"
}
{
"key": "user.amex",
"value": "3782 822463 10005"
}
{
"key": "user.mastercard",
"value": "****"
}These are just a couple of examples of how attributes and redaction processors can be configured to protect sensitive data.
Info
Stop the Agent and the Gateway processes by pressing Ctrl-C in their respective terminals.
