Skip to content

Commit 46b9932

Browse files
authored
Merge pull request #46 from intelops/genericcreds
Added generic credential
2 parents 4946e06 + 4b2e6e3 commit 46b9932

4 files changed

Lines changed: 81 additions & 15 deletions

File tree

charts/vault-cred/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type: application
1515
# This is the chart version. This version number should be incremented each time you make changes
1616
# to the chart and its templates, including the app version.
1717
# Versions are expected to follow Semantic Versioning (https://semver.org/)
18-
version: 0.1.1
18+
version: 0.1.2
1919

2020
# This is the version number of the application being deployed. This version number should be
2121
# incremented each time you make changes to the application. Versions are not expected to

charts/vault-cred/values.yaml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,26 @@ vaultPolicies:
9595
path "auth/kubernetes/login" {
9696
capabilities = ["create","read","update"]
9797
}
98+
- name: vault-policy-cluster-admin
99+
data:
100+
policyName: vault-policy-cluster-admin
101+
policyData: |
102+
path "secret/data/cluster/*" {
103+
capabilities = ["create","read","update","delete","list"]
104+
}
105+
path "auth/kubernetes/login" {
106+
capabilities = ["create","read","update"]
107+
}
108+
- name: vault-policy-cluster-read
109+
data:
110+
policyName: vault-policy-cluster-read
111+
policyData: |
112+
path "secret/data/cluster/*" {
113+
capabilities = ["read"]
114+
}
115+
path "auth/kubernetes/login" {
116+
capabilities = ["create","read","update"]
117+
}
98118
99119
vaultRoles:
100120
# - name: vault-role-read-all-creds

examples/cred-sync-secert.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@ data:
44
SERVICE-CRED-1: e2VudGl0eU5hbWU6ZGIsIHVzZXJOYW1lOnRlc3R1c2VyLHBhc3N3b3JkOnRlc3Rwd2R9Cg==
55
# CERTS-<uniquevalue>: `echo '{"entityName":"customer-client", "certIndetifier":"capten1","caCert":"LS0tLS1CRUdJTiB", "cert": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JS", "key":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBL"}' | base64 -w 0`
66
CERTS-1: eyJlbnRpdHlOYW1lIjoiY3VzdG9tZXItY2xpZW50IiwgImNlcnRJbmRldGlmaWVyIjoiY2FwdGVuMSIsImNhQ2VydCI6IkxTMHRMUzFDUlVkSlRpQiIsICJjZXJ0IjogIkxTMHRMUzFDUlVkSlRpQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENrMUpTIiwgImtleSI6IkxTMHRMUzFDUlVkSlRpQlNVMEVnVUZKSlZrRlVSU0JMIn0K
7+
8+
#GENERIC-1: `echo '{"credentialType":"cluster","entityName":"astra", "credIndetifier":"authToken", "credential":{"clusterId": "b7f1640e-5488-4fc4-9230-10f58e195e1a","token":"AstraCS:dQOUGyLDrxBsLJUPbdRqzwDs:ce353d87f144c46d740b4889caa840c0325aa0f8bb20eef891c9eefba055132b"}}' | base64 -w 0`
9+
GENERIC-1: eyJjcmVkZW50aWFsVHlwZSI6ImNsdXN0ZXIiLCJlbnRpdHlOYW1lIjoiYXN0cmEiLCAiY3JlZEluZGV0aWZpZXIiOiJhdXRoVG9rZW4iLCAiY3JlZGVudGlhbCI6eyJjbHVzdGVySWQiOiAiYjdmMTY0MGUtNTQ4OC00ZmM0LTkyMzAtMTBmNThlMTk1ZTFhIiwidG9rZW4iOiJBc3RyYUNTOmRRT1VHeUxEcnhCc0xKVVBiZFJxendEczpjZTM1M2Q4N2YxNDRjNDZkNzQwYjQ4ODljYWE4NDBjMDMyNWFhMGY4YmIyMGVlZjg5MWM5ZWVmYmEwNTUxMzJiIn19Cg==
10+
711
kind: Secret
812
metadata:
913
name: vault-cred-sync-data
10-
namespace: "<vault-cred-namespace>"
14+
namespace: "ml-server"
1115
type: Opaque
16+
#

internal/job/vault-cred-sync.go

Lines changed: 54 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,16 @@ import (
1313
)
1414

1515
const (
16-
serviceCredSecretKeyPrefix = "SERVICE-CRED"
17-
certSecretKeyPrefix = "CERTS"
18-
19-
caDataKey = "ca.pem"
20-
certDataKey = "cert.crt"
21-
keyDataKey = "key.key"
22-
23-
serviceCredentialUserNameKey = "userName"
24-
serviceCredentialPasswordKey = "password"
16+
serviceCredSecretKeyPrefix = "SERVICE-CRED"
17+
certSecretKeyPrefix = "CERTS"
18+
genericSecretKeyPrefix = "GENERIC"
19+
caDataKey = "ca.pem"
20+
certDataKey = "cert.crt"
21+
keyDataKey = "key.key"
22+
genericCredentialClusterIdKey = "clusterId"
23+
genericCredentialTokenKey = "token"
24+
serviceCredentialUserNameKey = "userName"
25+
serviceCredentialPasswordKey = "password"
2526
)
2627

2728
type CertificateData struct {
@@ -38,7 +39,12 @@ type ServiceCredentail struct {
3839
Password string `json:"password"`
3940
AdditionalData map[string]string `json:"additionalData"`
4041
}
41-
42+
type GenericCredential struct {
43+
CredentialType string `json:"credentialType"`
44+
EntityName string `json:"entityName"`
45+
CredIndentifier string `json:"credIndetifier"`
46+
Credential map[string]string `json:"credential"`
47+
}
4248
type VaultCredSync struct {
4349
log logging.Logger
4450
conf config.VaultEnv
@@ -76,7 +82,7 @@ func (v *VaultCredSync) Run() {
7682
v.log.Debugf("failed to read sync secret, %s", err)
7783
return
7884
}
79-
v.log.Debugf("found %d secret values to synch", len(secretValues))
85+
v.log.Debugf("found %d secret values to sync", len(secretValues))
8086

8187
vc, err := client.NewVaultClientForVaultToken(v.log, v.conf)
8288
if err != nil {
@@ -97,7 +103,16 @@ func (v *VaultCredSync) Run() {
97103
v.log.Errorf("%s", err)
98104
continue
99105
}
106+
} else if strings.HasPrefix(key, genericSecretKeyPrefix) {
107+
err = v.storeGenericCredential(ctx, vc, key, secretValue)
108+
if err != nil {
109+
v.log.Errorf("%s", err)
110+
continue
111+
}
112+
} else {
113+
v.log.Infof("credentail type %s not supported", key)
100114
}
115+
101116
}
102117
v.log.Debug("vault credential sync job completed")
103118
}
@@ -124,7 +139,7 @@ func (v *VaultCredSync) storeServiceCredential(ctx context.Context, vc *client.V
124139
if err != nil {
125140
return errors.WithMessagef(err, "failed to write %s secret data to vault", secretIdentifier)
126141
}
127-
v.log.Infof("stored sync credential for %s:%s", serviceCredData.EntityName, serviceCredData.UserName)
142+
v.log.Infof("stored sync service credential for %s/%s", serviceCredData.EntityName, serviceCredData.UserName)
128143
return nil
129144
}
130145

@@ -149,6 +164,32 @@ func (v *VaultCredSync) storeCertData(ctx context.Context, vc *client.VaultClien
149164
if err != nil {
150165
return errors.WithMessagef(err, "failed to write %s secret data to vault", secretIdentifier)
151166
}
152-
v.log.Infof("stored sync cert for %s:%s", certData.EntityName, certData.CertIndentifier)
167+
v.log.Infof("stored sync cert for %s/%s", certData.EntityName, certData.CertIndentifier)
153168
return nil
154169
}
170+
171+
func (v *VaultCredSync) storeGenericCredential(ctx context.Context, vc *client.VaultClient, secretIdentifier, secretData string) error {
172+
var genericCredData GenericCredential
173+
err := json.Unmarshal([]byte(secretData), &genericCredData)
174+
if err != nil {
175+
return errors.WithMessagef(err, "failed to parse %s secret data", secretIdentifier)
176+
}
177+
178+
if len(genericCredData.EntityName) == 0 || len(genericCredData.CredIndentifier) == 0 || len(genericCredData.CredentialType) == 0 {
179+
return errors.WithMessagef(err, "credential attributes are emty for %s secret data", secretIdentifier)
180+
}
181+
182+
cred := map[string]string{}
183+
for key, val := range genericCredData.Credential {
184+
cred[key] = val
185+
}
186+
187+
secretPath := api.PrepareCredentialSecretPath(strings.ToLower(genericSecretKeyPrefix), genericCredData.EntityName, genericCredData.CredIndentifier)
188+
err = vc.PutCredential(ctx, api.CredentialMountPath(), secretPath, cred)
189+
if err != nil {
190+
return errors.WithMessagef(err, "failed to write %s secret data to vault", secretIdentifier)
191+
}
192+
v.log.Infof("stored sync credential for %s/%s/%s", strings.ToLower(genericSecretKeyPrefix), genericCredData.EntityName, genericCredData.CredIndentifier)
193+
return nil
194+
195+
}

0 commit comments

Comments
 (0)