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
AWSServiceRoleForAmazonEKScreada automáticamente. -
kubectlconfigurado con acceso al clúster. -
La AWS CLI instalada y configurada con permisos para
aws sts get-caller-identityyaws eks describe-access-entry. -
Una
Ingressde ALB que usa la anotaciónalb.ingress.kubernetes.io/auth-type: oidcy elSecretde 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
Recursos relacionados
-
Concesión de RBAC de Kubernetes adicional a controladores administrados del modo automático de EKS: descripción conceptual del proceso del grupo
eks:managedy cómo definir el ámbito de las concesiones. -
Concesión de acceso para los usuarios de IAM a las entradas de acceso de Kubernetes con EKS: entradas de acceso de Amazon EKS.
-
Uso de la autorización de RBAC
en la documentación de Kubernetes.