@@ -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