View a markdown version of this page

Concesión de acceso a un secreto específico al controlador del equilibrador de carga del modo automático de EKS - Amazon EKS

Ayude a mejorar esta página

Para contribuir a esta guía del usuario, elija el enlace Edit this page on GitHub que se encuentra en el panel derecho de cada página.

Concesión de acceso a un secreto específico al controlador del equilibrador de carga del modo automático de EKS

En este tutorial, concede al controlador del equilibrador de carga del modo automático de Amazon EKS acceso de lectura a un Secret de Kubernetes específico. Esto desbloquea la autenticación de OIDC en una Ingress de ALB. Utilizará un Role y un RoleBinding con ámbito de espacio de nombres dirigidos al grupo eks:managed.

Este tutorial tarda aproximadamente 15 minutos en completarse. Los objetos de RBAC de Kubernetes que cree no generan cargos de AWS.

El controlador del equilibrador de carga del modo automático de Amazon EKS admite la autenticación de OIDC en objetos Ingress de ALB. Utiliza la anotación alb.ingress.kubernetes.io/auth-type: oidc para habilitar esta autenticación. Para resolver la configuración de OIDC, el controlador lee un Secret de Kubernetes nombrado en la anotación alb.ingress.kubernetes.io/auth-idp-oidc. Su política de acceso administrado no concede actualmente get en objetos Secret, por lo que el conciliador falla y muestra un mensaje similar al siguiente:

Failed build model due to ingress: <ns>/<name>: secrets "<secret>" is forbidden: User "arn:aws:sts::<acct>:assumed-role/AWSServiceRoleForAmazonEKS/<session>" cannot get resource "secrets" in API group "" in the namespace "<ns>"

Con el mecanismo descrito en Concesión de RBAC de Kubernetes adicional a controladores administrados del modo automático de EKS, puede conceder get al controlador administrado exactamente en el Secret de OIDC que necesita.

Requisitos previos

Antes de empezar, asegúrese de que tiene lo siguiente:

  • Un clúster del modo automático de Amazon EKS con la entrada de acceso AWSServiceRoleForAmazonEKS creada automáticamente.

  • kubectl configurado con acceso al clúster.

  • La AWS CLI instalada y configurada con permisos para aws sts get-caller-identity y aws eks describe-access-entry.

  • Una Ingress de ALB que usa la anotación alb.ingress.kubernetes.io/auth-type: oidc y el Secret de Kubernetes al que hace referencia.

Paso 1: identificación del secreto para agregarlo a la lista de permitidos

La configuración de OIDC en una Ingress de ALB tiene el aspecto siguiente. Registre el nombre del Secret y el espacio de nombres de la Ingress: los objetos de RBAC deben estar en el mismo espacio de nombres que el Secret.

annotations: alb.ingress.kubernetes.io/auth-type: oidc alb.ingress.kubernetes.io/auth-idp-oidc: > { "issuer": "...", "authorizationEndpoint": "...", "tokenEndpoint": "...", "userInfoEndpoint": "...", "secretName": "oidc" }

El resto de este ejemplo utiliza la monitoring del espacio de nombres y el oidc del nombre del Secret.

Paso 2: aplicación de un rol y un RoleBinding con el ámbito del espacio de nombres

Este formulario concede exactamente get en exactamente el Secret con nombre en exactamente un espacio de nombres. Guarde lo siguiente como eks-managed-oidc-secret-reader.yaml:

apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: eks-managed-oidc-secret-reader namespace: monitoring rules: - apiGroups: [""] resources: ["secrets"] resourceNames: ["oidc"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: eks-managed-oidc-secret-reader namespace: monitoring subjects: - kind: Group name: eks:managed apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: eks-managed-oidc-secret-reader apiGroup: rbac.authorization.k8s.io

Aplíquelo:

kubectl apply -f eks-managed-oidc-secret-reader.yaml

Para agregar más objetos Secret a la lista de permitidos más adelante, agregue sus nombres a la lista Role’s `resourceNames y vuelva a aplicarla.

Paso 3: confirmación de la recuperación de la entrada

El controlador del equilibrador de carga vuelve a conciliar la Ingress en su siguiente pasada (normalmente en unos minutos). Cuando la concesión funciona, el error secrets "oidc" is forbidden anterior deja de aparecer en la Ingress y el equilibrador de carga avanza. Si el error persiste, vuelva a comprobar Role’s `namespace, resourceNames y el asunto de RoleBinding.

Eliminación de la concesión

importante

Mantenga Role y RoleBinding en su lugar durante el tiempo que la Ingress de ALB use alb.ingress.kubernetes.io/auth-type: oidc. Si los elimina, se vuelve a romper la resolución de OIDC en la Ingress.

Si deja de usar el OIDC en la Ingress, elimine la concesión:

kubectl delete rolebinding eks-managed-oidc-secret-reader -n monitoring kubectl delete role eks-managed-oidc-secret-reader -n monitoring