Skip to content

Commit 2db5348

Browse files
committed
validations for awsmanagedcontrolplane accessentries
1 parent bbfc6de commit 2db5348

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

controlplane/eks/api/v1beta2/awsmanagedcontrolplane_webhook.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,57 @@ func (r *AWSManagedControlPlane) validateAccessConfig(old *AWSManagedControlPlan
324324
)
325325
}
326326

327+
// AccessEntries require AuthenticationMode to be API or API_AND_CONFIG_MAP
328+
if r.Spec.AccessConfig != nil && len(r.Spec.AccessConfig.AccessEntries) > 0 {
329+
if r.Spec.AccessConfig.AuthenticationMode != EKSAuthenticationModeAPI &&
330+
r.Spec.AccessConfig.AuthenticationMode != EKSAuthenticationModeAPIAndConfigMap {
331+
allErrs = append(allErrs,
332+
field.Invalid(
333+
field.NewPath("spec", "accessConfig", "accessEntries"),
334+
r.Spec.AccessConfig.AccessEntries,
335+
"accessEntries can only be used when authenticationMode is set to API or API_AND_CONFIG_MAP",
336+
),
337+
)
338+
}
339+
340+
// Validate that EC2 types don't have kubernetes groups or access policies
341+
for i, entry := range r.Spec.AccessConfig.AccessEntries {
342+
if entry.Type == "EC2_LINUX" || entry.Type == "EC2_WINDOWS" {
343+
if len(entry.KubernetesGroups) > 0 {
344+
allErrs = append(allErrs,
345+
field.Invalid(
346+
field.NewPath("spec", "accessConfig", "accessEntries").Index(i).Child("kubernetesGroups"),
347+
entry.KubernetesGroups,
348+
"kubernetesGroups cannot be specified when type is EC2_LINUX or EC2_WINDOWS",
349+
),
350+
)
351+
}
352+
if len(entry.AccessPolicies) > 0 {
353+
allErrs = append(allErrs,
354+
field.Invalid(
355+
field.NewPath("spec", "accessConfig", "accessEntries").Index(i).Child("accessPolicies"),
356+
entry.AccessPolicies,
357+
"accessPolicies cannot be specified when type is EC2_LINUX or EC2_WINDOWS",
358+
),
359+
)
360+
}
361+
}
362+
363+
// Validate namespace scopes
364+
for j, policy := range entry.AccessPolicies {
365+
if policy.AccessScope.Type == "namespace" && len(policy.AccessScope.Namespaces) == 0 {
366+
allErrs = append(allErrs,
367+
field.Invalid(
368+
field.NewPath("spec", "accessConfig", "accessEntries").Index(i).Child("accessPolicies").Index(j).Child("accessScope", "namespaces"),
369+
policy.AccessScope.Namespaces,
370+
"at least one value must be specified when accessScope type is namespace",
371+
),
372+
)
373+
}
374+
}
375+
}
376+
}
377+
327378
return allErrs
328379
}
329380

0 commit comments

Comments
 (0)