Skip to content

Commit

Permalink
coordinator: only create workload secret if requested
Browse files Browse the repository at this point in the history
  • Loading branch information
burgerdev committed Jan 8, 2025
1 parent 87b25e0 commit c4a4e02
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 12 deletions.
22 changes: 13 additions & 9 deletions coordinator/meshapi.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,17 +128,21 @@ func (i *meshAPIServer) NewMeshCert(ctx context.Context, _ *meshapi.NewMeshCertR
return nil, fmt.Errorf("failed to issue new attested mesh cert: %w", err)
}

workloadSecret, err := seedEngine.DeriveWorkloadSecret(entry.WorkloadSecretID)
if err != nil {
return nil, fmt.Errorf("failed to derive workload secret: %w", err)
resp := &meshapi.NewMeshCertResponse{
MeshCACert: state.CA.GetMeshCACert(),
CertChain: append(cert, state.CA.GetIntermCACert()...),
RootCACert: state.CA.GetRootCACert(),
}

if entry.WorkloadSecretID != "" {
workloadSecret, err := seedEngine.DeriveWorkloadSecret(entry.WorkloadSecretID)
if err != nil {
return nil, fmt.Errorf("failed to derive workload secret: %w", err)
}
resp.WorkloadSecret = workloadSecret
}

return &meshapi.NewMeshCertResponse{
MeshCACert: state.CA.GetMeshCACert(),
CertChain: append(cert, state.CA.GetIntermCACert()...),
RootCACert: state.CA.GetRootCACert(),
WorkloadSecret: workloadSecret,
}, nil
return resp, nil
}

type seedEngineGetter interface {
Expand Down
20 changes: 20 additions & 0 deletions e2e/workloadsecret/workloadsecret_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,26 @@ func TestWorkloadSecrets(t *testing.T) {
require.Len(webWorkloadSecretBytes, constants.SecretSeedSize)
require.Equal(webWorkloadSecretBytes, emojiWorkloadSecretBytes)
})

t.Run("workload secrets are not created if not configured in the manifest", func(t *testing.T) {
require := require.New(t)
ctx, cancel := context.WithTimeout(context.Background(), ct.FactorPlatformTimeout(60*time.Second))
defer cancel()

ct.PatchManifest(t, patchWorkloadSecretID("web", ""))

t.Run("set", ct.Set)
require.NoError(ct.Kubeclient.Restart(ctx, kubeclient.Deployment{}, ct.Namespace, "web"))
require.NoError(ct.Kubeclient.WaitFor(ctx, kubeclient.Ready, kubeclient.Deployment{}, ct.Namespace, "web"))

webPods, err = ct.Kubeclient.PodsFromDeployment(ctx, ct.Namespace, "web")
require.NoError(err)
require.Len(webPods, 2, "pod not found: %s/%s", ct.Namespace, "web")

stdout, stderr, err := ct.Kubeclient.Exec(ctx, ct.Namespace, webPods[0].Name, []string{"/bin/sh", "-c", "test ! -f /contrast/secrets/workload-secret-seed"})
require.NoError(err, "stderr: %q", stderr)
require.Empty(stdout)
})
}

// patchWorkloadSecretID returns a PatchManifestFunc which overwrites the expectedWorkloadSecretID with the patchWorkloadSecretID
Expand Down
9 changes: 6 additions & 3 deletions initializer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,12 @@ func run() (retErr error) {
if err != nil {
return fmt.Errorf("writing coordinator-root-ca.pem: %w", err)
}
err = os.WriteFile("/contrast/secrets/workload-secret-seed", []byte(hex.EncodeToString(resp.WorkloadSecret)), 0o400)
if err != nil {
return fmt.Errorf("writing workload-secret-seed: %w", err)

if len(resp.WorkloadSecret) > 0 {
err = os.WriteFile("/contrast/secrets/workload-secret-seed", []byte(hex.EncodeToString(resp.WorkloadSecret)), 0o400)
if err != nil {
return fmt.Errorf("writing workload-secret-seed: %w", err)
}
}

log.Info("Initializer done")
Expand Down

0 comments on commit c4a4e02

Please sign in to comment.