Skip to content

Commit dc8fea9

Browse files
Make transit engine path configurable (spiffe#5058)
1 parent f5f1c14 commit dc8fea9

File tree

3 files changed

+25
-16
lines changed

3 files changed

+25
-16
lines changed

pkg/server/plugin/keymanager/hashicorpvault/hashicorp_vault.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ type Config struct {
5353
VaultAddr string `hcl:"vault_addr" json:"vault_addr"`
5454
// Name of the Vault namespace
5555
Namespace string `hcl:"namespace" json:"namespace"`
56+
// TransitEnginePath specifies the path to the transit engine to perform key operations.
57+
TransitEnginePath string `hcl:"transit_engine_path" json:"transit_engine_path"`
5658

5759
// Configuration for the Token authentication method
5860
TokenAuth *TokenAuthConfig `hcl:"token_auth" json:"token_auth,omitempty"`
@@ -174,8 +176,9 @@ func checkForAuthMethodConfigured(authMethod AuthMethod) error {
174176

175177
func (p *Plugin) genClientParams(method AuthMethod, config *Config) (*ClientParams, error) {
176178
cp := &ClientParams{
177-
VaultAddr: p.getEnvOrDefault(envVaultAddr, config.VaultAddr),
178-
Namespace: p.getEnvOrDefault(envVaultNamespace, config.Namespace),
179+
VaultAddr: p.getEnvOrDefault(envVaultAddr, config.VaultAddr),
180+
Namespace: p.getEnvOrDefault(envVaultNamespace, config.Namespace),
181+
TransitEnginePath: p.getEnvOrDefault(envVaultTransitEnginePath, config.TransitEnginePath),
179182
}
180183

181184
switch method {

pkg/server/plugin/keymanager/hashicorpvault/vault_client.go

+16-14
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,19 @@ import (
2121
// TODO: Delete everything that is unused in here
2222

2323
const (
24-
envVaultAddr = "VAULT_ADDR"
25-
envVaultToken = "VAULT_TOKEN"
26-
envVaultClientCert = "VAULT_CLIENT_CERT"
27-
envVaultClientKey = "VAULT_CLIENT_KEY"
28-
envVaultCACert = "VAULT_CACERT"
29-
envVaultAppRoleID = "VAULT_APPROLE_ID"
30-
envVaultAppRoleSecretID = "VAULT_APPROLE_SECRET_ID" // #nosec G101
31-
envVaultNamespace = "VAULT_NAMESPACE"
24+
envVaultAddr = "VAULT_ADDR"
25+
envVaultToken = "VAULT_TOKEN"
26+
envVaultClientCert = "VAULT_CLIENT_CERT"
27+
envVaultClientKey = "VAULT_CLIENT_KEY"
28+
envVaultCACert = "VAULT_CACERT"
29+
envVaultAppRoleID = "VAULT_APPROLE_ID"
30+
envVaultAppRoleSecretID = "VAULT_APPROLE_SECRET_ID" // #nosec G101
31+
envVaultNamespace = "VAULT_NAMESPACE"
32+
envVaultTransitEnginePath = "VAULT_TRANSIT_ENGINE_PATH"
3233

3334
defaultCertMountPoint = "cert"
3435
defaultPKIMountPoint = "pki"
36+
defaultTransitEnginePath = "transit"
3537
defaultAppRoleMountPoint = "approle"
3638
defaultK8sMountPoint = "kubernetes"
3739
)
@@ -93,6 +95,8 @@ type ClientParams struct {
9395
MaxRetries *int
9496
// Name of the Vault namespace
9597
Namespace string
98+
// TransitEnginePath specifies the path to the transit engine to perform key operations.
99+
TransitEnginePath string
96100
}
97101

98102
type Client struct {
@@ -110,6 +114,7 @@ func NewClientConfig(cp *ClientParams, logger hclog.Logger) (*ClientConfig, erro
110114
AppRoleAuthMountPoint: defaultAppRoleMountPoint,
111115
K8sAuthMountPoint: defaultK8sMountPoint,
112116
PKIMountPoint: defaultPKIMountPoint,
117+
TransitEnginePath: defaultTransitEnginePath,
113118
}
114119
if err := mergo.Merge(cp, defaultParams); err != nil {
115120
return nil, status.Errorf(codes.Internal, "unable to merge client params: %v", err)
@@ -370,15 +375,13 @@ func (c *Client) CreateKey(ctx context.Context, spireKeyID string, keyType Trans
370375
}
371376

372377
// TODO: Handle errors here such as key already exists
373-
// TODO: Make the transit engine path configurable
374-
_, err := c.vaultClient.Logical().WriteWithContext(ctx, fmt.Sprintf("/transit/keys/%s", spireKeyID), arguments)
378+
_, err := c.vaultClient.Logical().WriteWithContext(ctx, fmt.Sprintf("/%s/keys/%s", c.clientParams.TransitEnginePath, spireKeyID), arguments)
375379
return err
376380
}
377381

378382
func (c *Client) GetKey(ctx context.Context, spireKeyID string) (string, error) {
379383
// TODO: Handle errors here
380-
// TODO: Make the transit engine path configurable
381-
res, err := c.vaultClient.Logical().ReadWithContext(ctx, fmt.Sprintf("/transit/keys/%s", spireKeyID))
384+
res, err := c.vaultClient.Logical().ReadWithContext(ctx, fmt.Sprintf("/%s/keys/%s", c.clientParams.TransitEnginePath, spireKeyID))
382385
if err != nil {
383386
return "", err
384387
}
@@ -428,8 +431,7 @@ func (c *Client) SignData(ctx context.Context, spireKeyID string, data []byte, h
428431
}
429432

430433
// TODO: Handle errors here
431-
// TODO: Make the transit engine path configurable
432-
sigResp, err := c.vaultClient.Logical().WriteWithContext(ctx, fmt.Sprintf("/transit/sign/%s/%s", spireKeyID, hashAlgo), body)
434+
sigResp, err := c.vaultClient.Logical().WriteWithContext(ctx, fmt.Sprintf("/%s/sign/%s/%s", c.clientParams.TransitEnginePath, spireKeyID, hashAlgo), body)
433435
if err != nil {
434436
return nil, status.Errorf(codes.Internal, "transit engine sign call failed: %v", err)
435437
}

pkg/server/plugin/keymanager/hashicorpvault/vault_client_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ func TestNewClientConfigWithDefaultValues(t *testing.T) {
2626
CertAuthMountPoint: "", // Expect the default value to be used.
2727
AppRoleAuthMountPoint: "", // Expect the default value to be used.
2828
K8sAuthMountPoint: "", // Expect the default value to be used.
29+
TransitEnginePath: "", // Expect the default value to be used.
2930
}
3031

3132
cc, err := NewClientConfig(p, hclog.Default())
@@ -34,6 +35,7 @@ func TestNewClientConfigWithDefaultValues(t *testing.T) {
3435
require.Equal(t, defaultCertMountPoint, cc.clientParams.CertAuthMountPoint)
3536
require.Equal(t, defaultAppRoleMountPoint, cc.clientParams.AppRoleAuthMountPoint)
3637
require.Equal(t, defaultK8sMountPoint, cc.clientParams.K8sAuthMountPoint)
38+
require.Equal(t, defaultTransitEnginePath, cc.clientParams.TransitEnginePath)
3739
}
3840

3941
func TestNewClientConfigWithGivenValuesInsteadOfDefaults(t *testing.T) {
@@ -44,6 +46,7 @@ func TestNewClientConfigWithGivenValuesInsteadOfDefaults(t *testing.T) {
4446
CertAuthMountPoint: "test-tls-cert",
4547
AppRoleAuthMountPoint: "test-approle",
4648
K8sAuthMountPoint: "test-k8s",
49+
TransitEnginePath: "test-transit",
4750
}
4851

4952
cc, err := NewClientConfig(p, hclog.Default())
@@ -52,6 +55,7 @@ func TestNewClientConfigWithGivenValuesInsteadOfDefaults(t *testing.T) {
5255
require.Equal(t, "test-tls-cert", cc.clientParams.CertAuthMountPoint)
5356
require.Equal(t, "test-approle", cc.clientParams.AppRoleAuthMountPoint)
5457
require.Equal(t, "test-k8s", cc.clientParams.K8sAuthMountPoint)
58+
require.Equal(t, "test-transit", cc.clientParams.TransitEnginePath)
5559
}
5660

5761
func TestNewAuthenticatedClientTokenAuth(t *testing.T) {

0 commit comments

Comments
 (0)