Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions pkg/server/plugin/nodeattestor/k8spsat/psat.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,9 @@ func (p *AttestorPlugin) Attest(stream nodeattestorv1.NodeAttestor_AttestServer)
if err != nil {
return status.Errorf(codes.Internal, "fail to get pod from k8s API server for cluster %q: %v", attestationData.Cluster, err)
}
if string(pod.UID) != podUID {
return status.Errorf(codes.Internal, "pod UID mismatch for cluster %q", attestationData.Cluster)
}
Comment on lines +227 to +229

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good call, addressed in d4bc0fc.


node, err := cluster.client.GetNode(stream.Context(), pod.Spec.NodeName)
if err != nil {
Expand Down
26 changes: 21 additions & 5 deletions pkg/server/plugin/nodeattestor/k8spsat/psat_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ func (s *AttestorSuite) TestAttestFailsIfCannotGetNode() {
}
token := s.signToken(s.fooSigner, tokenData)
s.apiServerClient.SetTokenStatus(token, createTokenStatus(tokenData, true, defaultAudience))
s.apiServerClient.SetPod(createPod("NS1", "PODNAME", "NODENAME", "172.16.0.1"))
s.apiServerClient.SetPod(createPod("NS1", "PODNAME", "PODUID", "NODENAME", "172.16.0.1"))
s.requireAttestError(makePayload("FOO", token),
codes.Internal,
"nodeattestor(k8s_psat): fail to get node from k8s API server")
Expand All @@ -257,13 +257,28 @@ func (s *AttestorSuite) TestAttestFailsIfNodeUIDIsEmpty() {
}
token := s.signToken(s.fooSigner, tokenData)
s.apiServerClient.SetTokenStatus(token, createTokenStatus(tokenData, true, defaultAudience))
s.apiServerClient.SetPod(createPod("NS1", "PODNAME", "NODENAME", "172.16.0.1"))
s.apiServerClient.SetPod(createPod("NS1", "PODNAME", "PODUID", "NODENAME", "172.16.0.1"))
s.apiServerClient.SetNode(createNode("NODENAME", ""))
s.requireAttestError(makePayload("FOO", token),
codes.Internal,
"node UID is empty")
}

func (s *AttestorSuite) TestAttestFailsIfPodUIDDoesNotMatchTokenStatus() {
tokenData := &TokenData{
namespace: "NS1",
serviceAccountName: "SA1",
podName: "PODNAME",
podUID: "PODUID",
}
token := s.signToken(s.fooSigner, tokenData)
s.apiServerClient.SetTokenStatus(token, createTokenStatus(tokenData, true, defaultAudience))
s.apiServerClient.SetPod(createPod("NS1", "PODNAME", "OTHER-PODUID", "NODENAME", "172.16.0.1"))
s.requireAttestError(makePayload("FOO", token),
codes.Internal,
"pod UID mismatch")
Comment thread
c4rlo marked this conversation as resolved.
}

func (s *AttestorSuite) TestAttestSuccess() {
// Success with FOO signed token
tokenData := &TokenData{
Expand All @@ -274,7 +289,7 @@ func (s *AttestorSuite) TestAttestSuccess() {
}
token := s.signToken(s.fooSigner, tokenData)
s.apiServerClient.SetTokenStatus(token, createTokenStatus(tokenData, true, defaultAudience))
s.apiServerClient.SetPod(createPod("NS1", "PODNAME-1", "NODENAME-1", "172.16.10.1"))
s.apiServerClient.SetPod(createPod("NS1", "PODNAME-1", "PODUID-1", "NODENAME-1", "172.16.10.1"))
s.apiServerClient.SetNode(createNode("NODENAME-1", "NODEUID-1"))

result, err := s.attestor.Attest(context.Background(), makePayload("FOO", token), expectNoChallenge)
Expand Down Expand Up @@ -303,7 +318,7 @@ func (s *AttestorSuite) TestAttestSuccess() {
}
token = s.signToken(s.barSigner, tokenData)
s.apiServerClient.SetTokenStatus(token, createTokenStatus(tokenData, true, []string{"AUDIENCE"}))
s.apiServerClient.SetPod(createPod("NS2", "PODNAME-2", "NODENAME-2", "172.16.10.2"))
s.apiServerClient.SetPod(createPod("NS2", "PODNAME-2", "PODUID-2", "NODENAME-2", "172.16.10.2"))
s.apiServerClient.SetNode(createNode("NODENAME-2", "NODEUID-2"))

// Success with BAR signed token
Expand Down Expand Up @@ -462,11 +477,12 @@ func createTokenStatus(tokenData *TokenData, authenticated bool, audience []stri
}
}

func createPod(namespace, podName, nodeName string, hostIP string) *corev1.Pod {
func createPod(namespace, podName, podUID, nodeName, hostIP string) *corev1.Pod {
return &corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Namespace: namespace,
Name: podName,
UID: types.UID(podUID),
Labels: map[string]string{
"PODLABEL-A": "A",
"PODLABEL-B": "B",
Expand Down
Loading