- 
    Task 
- 
    Resolution: Done
- 
    Normal 
- 
    None
- 
        5
- 
        False
- 
        
- 
        False
- 
        NEW
- 
        NEW
- 
        With this enhancement, the collector config is now deployed as a configmap instead of a secret. This will facilitate the users being able to see and edit the config when the collector is in an unmanaged state.
- 
        Enhancement
- 
        
- 
        
- 
        Log Collection - Sprint 254, Log Collection - Sprint 255
Summary
Replace current Vector configuration from the Secret to the ConfigMap
Acceptance Criteria
- Test should pass
- Change documentation if needed
Implementation proposal
As a solution, it is proposed to use the Secret management mechanism from Vector. More information can be found at the following links:
- Vector Secrets Management Highlights
- Vector Configuration Reference - Secrets
- Vector GitHub PR #11985
On the Cluster Logging Operator side, we need to take care of mounting Secret data containing sensitive information such as passwords, tokens, or other security keys related to authorization to a known/predictable file path.
For example:
apiVersion: v1
kind: Pod
metadata:
  name: collector-inst
spec:
  containers:
  - name: collector
    image: vector:latest
    volumeMounts:
    - name: secret-volume
      mountPath: "/etc/secret-data"
      readOnly: true
  volumes:
  - name: secret-volume
     secret:
      secretName: secret-data
Changes in the generator
For sensitive values, a new secret section needs to be added to the Vector config file and assign obtained sensitive data to the corespondent value. This will be done only once when the config file is loaded:
for example:
CLO config: 
outputs:
  - name: myhttp
     type: http
     http:
       authentication:
         username:
           key: username
           secret:
             name: foo
  - name: mygcp
     type: googleCloudLogging
     googleCloudLogging:
       authentication:
         credentials:
           key: credentials.json
           secret:
             name: foo
Resulting vector.toml
[secret.my-sink] type = "exec" command = ["./read-secret-data"] [sinks.my_sink] type = "my_logs" inputs = [""] endpoint = "https://endpoint" password = "SECRET[my-sink.password]" username = "SECRET[my-sink.username]" [sinks.output_myhttp] type = "my_logs" inputs = [""] endpoint = "https://endpoint" username = "SECRET[my-sink.foo_username]" [sinks.output_mygcp] type = "my_logs" inputs = [""] endpoint = "https://endpoint" credentials = "SECRET[my-sink.foo_credentials_json]"
The read-secret-data script for reading data from the file must return data in JSON format, e.g.:
{
 "password": {"value": "AKIAIOSFODNN7EXAMPLE", "error": null},
 "username": {"value": "Thor", "error": null},
 "foo_username": {"value": "mypassword", "error": null},
 "foo_credentials_json": {"value": "{\"a\":\"b\"}", "error": null}
}
The script can look something like this:
#!/bin/bash
cat <<EOF
{
  "username": {
    "value": "$(cat /tmp/username)",
    "error": null
  },
  "password": {
    "value": "$(cat /tmp/password)",
    "error": null
  }
}
EOF
Note:
Need to think about script generation, something more intelligent/universal for any value name.
- relates to
- 
                    LOG-5548 Investigate refactoring config secrets to rely upon env vars -         
- Closed
 
-         
- links to
- 
                     RHBA-2024:137361
        Logging for Red Hat OpenShift - 6.0.0 RHBA-2024:137361
        Logging for Red Hat OpenShift - 6.0.0