External Secrets Operator integrates with Keeper Security for secret management by using Keeper Secrets Manager.
KSM can authenticate using One Time Access Token or Secret Manager Configuration. In order to work with External Secret Operator we need to configure a Secret Manager Configuration.
You can find the documentation for the Secret Manager Configuration creation here. Make sure you add the proper permissions to your device in order to be able to read and write secrets
Once you have created your SMC, you will get a config.json file or a base64 json encoded string containing the following keys:
hostnameclientIdprivateKeyserverPublicKeyIdappKeyappOwnerPublicKeyThis base64 encoded jsong string will be required to create your secretStores
The KeeperSecurity calls the entries in vaults 'Records'. These docs use the same term.
Be sure the keepersecurity provider is listed in the Kind=SecretStore
{% include 'keepersecurity-secret-store.yaml' %}
NOTE 1: folderID target the folder ID where the secrets should be pushed to. It requires write permissions within the folder
NOTE 2: In case of a ClusterSecretStore, Be sure to provide namespace for SecretAccessKeyRef with the namespace of the secret that we just created.
remoteRef.key is equated to a Record's IDremoteRef.property is equated to one of the following options:
remoteRef.version is currently not supported.dataFrom:
find.path is currently not supported.find.name.regexp is equated to one of the following options:
find.tags are not supported at this time.NOTE: For complex types, like name, phone, bankAccount, which does not match with a single string value, external secrets will return the complete json string. Use the json template functions to decode.
To create a kubernetes secret from Keeper Secret Manager secret a Kind=ExternalSecret is needed.
{% include 'keepersecurity-external-secret.yaml' %}
The operator will fetch the Keeper Secret Manager secret and inject it as a Kind=Secret
kubectl get secret secret-to-be-created -n <namespace> | -o jsonpath='{.data.dev-secret-test}' | base64 -d
There are some limitations using this provider.
General Records types nor legacy non-typed recordsfind.tags is not supported by KSMfind.path is not supported at the momentPush Secret will only work with a custom KeeperSecurity Record type externalSecrets
selector:
secret.name: name of the kubernetes secret to be pusheddata.match:
secretKey: key on the selected secret to be pushedremoteRef.remoteKey: Secret and key to be created on the remote providerTo create a Keeper Security record from kubernetes a Kind=PushSecret is needed.
{% include 'keepersecurity-push-secret.yaml' %}