Skip to content

Commit 8a674aa

Browse files
committed
fix(controlplane): address review comments, security checks, helm hooks, and add helm-lint target
1 parent 53c8159 commit 8a674aa

8 files changed

Lines changed: 41 additions & 7 deletions

File tree

.github/workflows/test.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,10 @@ jobs:
5454
- name: Install protoc
5555
run: sudo apt-get update && sudo apt-get install -y protobuf-compiler
5656
- run: make verify
57+
58+
helm-lint:
59+
runs-on: ubuntu-latest
60+
steps:
61+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v6
62+
- uses: azure/setup-helm@v4
63+
- run: make helm-lint

Makefile

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,20 @@ fmt:
152152
go fmt ./...
153153

154154
# code linters
155-
lint: fmt
155+
.PHONY: helm-lint
156+
helm-lint:
157+
@HELM_BIN="helm"; \
158+
if ! command -v helm >/dev/null 2>&1; then \
159+
if [ -x "./bin/helm" ]; then \
160+
HELM_BIN="./bin/helm"; \
161+
else \
162+
echo "helm not found; please install helm or place it in ./bin/helm" >&2; \
163+
exit 1; \
164+
fi; \
165+
fi; \
166+
$$HELM_BIN lint ./charts/sam-mesh
167+
168+
lint: fmt helm-lint
156169
hack/lint.sh
157170

158171
.PHONY: verify

charts/sam-mesh/templates/bootstrap-job.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ apiVersion: batch/v1
3535
kind: Job
3636
metadata:
3737
name: {{ include "sam-mesh.fullname" . }}-bootstrap
38+
annotations:
39+
"helm.sh/hook": post-install,post-upgrade
40+
"helm.sh/hook-delete-policy": before-hook-creation
3841
labels:
3942
{{- include "sam-mesh.labels" . | nindent 4 }}
4043
spec:

charts/sam-mesh/values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ controlPlane:
99
logLevel: info
1010
adminToken: super-secret-admin-token
1111
autoApproveEnrollment: true
12-
insecureSkipTlsVerify: false
12+
insecureSkipTlsVerify: true
1313
oidcIssuer: "http://dex:5556/dex"
1414
allowedAudiences: "sam-mesh-audience,sam-hub-audience"
1515
service:

internal/controlplane/server.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ func (s *Server) HandleRegister(w http.ResponseWriter, r *http.Request) {
363363
resolvedMap[r] = true
364364
if strings.HasPrefix(r, "sam:role:") {
365365
hasCapabilityRoles = true
366-
} else {
366+
} else if r != req.RequestedRole {
367367
customAccessRoles = append(customAccessRoles, r)
368368
}
369369
}
@@ -579,7 +579,7 @@ func (s *Server) HandleRefresh(w http.ResponseWriter, r *http.Request) {
579579
resolvedMap[r] = true
580580
if strings.HasPrefix(r, "sam:role:") {
581581
hasCapabilityRoles = true
582-
} else {
582+
} else if r != nodeRecord.Role {
583583
customAccessRoles = append(customAccessRoles, r)
584584
}
585585
}
@@ -804,9 +804,12 @@ func (s *Server) HandlePolicies(w http.ResponseWriter, r *http.Request) {
804804
for _, k := range validKeys {
805805
trustedKeys = append(trustedKeys, k.Public)
806806
}
807-
_, err := identity.VerifyAndExtractPeerID(trustedKeys, biscuitBytes)
807+
peerID, err := identity.VerifyAndExtractPeerID(trustedKeys, biscuitBytes)
808808
if err == nil {
809-
isNode = true
809+
nodeRecord, nodeErr := s.store.GetNode(r.Context(), peerID.String())
810+
if nodeErr == nil && !nodeRecord.Banned {
811+
isNode = true
812+
}
810813
}
811814
}
812815
}

internal/node/node.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,6 +1133,13 @@ func (n *SamNode) listenForHubEvents(ctx context.Context) {
11331133
case api.MeshEvent_POLICY_UPDATE:
11341134
logger.Infof("[Mesh Event] Received POLICY_UPDATE event from %s, triggering sync", msg.ReceivedFrom)
11351135
go func() {
1136+
// Jitter delay (0-2s) to prevent thundering herd on Control Plane
1137+
jitter := time.Duration(rand.Intn(2000)) * time.Millisecond
1138+
select {
1139+
case <-time.After(jitter):
1140+
case <-ctx.Done():
1141+
return
1142+
}
11361143
if err := n.syncMeshPolicy(ctx); err != nil {
11371144
logger.Warnf("Failed to sync mesh policy after event: %v", err)
11381145
}

tests/e2e/find_remote_tools.bats

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ teardown() {
102102
mesh_start_node 2 \
103103
"--log-level debug" \
104104
"tests/e2e/docker/calc-mcp/sam-node-config.yaml"
105-
mesh_wait_for_log "${MESH_PREFIX}-node-2" "SAM Node Online" 20
105+
mesh_wait_for_log "${MESH_PREFIX}-node-2" "SAM Node Online" 60
106106
mesh_wait_for_mcp_ready 2 20
107107

108108
local node2_peer_id

tests/e2e/lib/container_mesh.bash

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ if [[ -z "${MESH_HELPERS_LOADED:-}" ]]; then
277277
--set global.imageTag="local" \
278278
--set controlPlane.oidcIssuer="${ISSUERS//,/\\,}" \
279279
--set controlPlane.allowedAudiences="sam-mesh-audience\,sam-hub-audience" \
280+
--set controlPlane.insecureSkipTlsVerify=true \
280281
--set controlPlane.replicaCount=2 \
281282
--set controlPlane.hostPort=8080 \
282283
--set router.useOidcToken=false \

0 commit comments

Comments
 (0)