¿Cómo configuro un usuario de SSO para acceder a mi clúster de Amazon EKS?
Utilizo AWS IAM Identity Center (sucesor de AWS Single Sign-On). Sin embargo, no puedo acceder al clúster de Amazon Elastic Kubernetes Service (Amazon EKS). Quiero configurar el usuario de SSO para que acceda a mi clúster.
Resolución
Asegúrese de que cumple los siguientes requisitos previos:
- Ha activado y configurado IAM Identity Center.
- Su usuario de SSO está asociado a la cuenta de AWS en la que existe el clúster de Amazon EKS.
Nota: Los siguientes pasos utilizan kubectl para acceder al clúster. Luego de configurar el acceso de kubectl, puede ver los recursos del clúster en la consola de Amazon EKS iniciando sesión como usuario de IAM Identity Center.
Nota: Si recibe errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), confirme que está ejecutando una versión reciente de AWS CLI.
Configure AWS CLI para utilizar su usuario de SSO
Cree un perfil de la Interfaz de la línea de comandos de AWS (AWS CLI) que utilice la autenticación SSO al ejecutar los comandos de AWS CLI. Para obtener más información, consulte Configurar AWS CLI para usar AWS IAM Identity Center (sucesor de AWS Single Sign-On).
El siguiente es un ejemplo de configuración de SSO de AWS CLI mediante el procedimiento automático:
aws configure sso SSO start URL [None]: https://my-sso-portal.awsapps.com/start SSO region [None]: us-east-1
AWS CLI intenta abrir el navegador predeterminado e iniciar el proceso de inicio de sesión de su cuenta de IAM Identity Center.
Attempting to automatically open the SSO authorization page in your default browser.
Si AWS CLI no puede abrir el navegador, aparecerá el siguiente mensaje con instrucciones sobre cómo iniciar manualmente el proceso de inicio de sesión:
If the browser does not open or you wish to use a different device to authorize this request, open the following URL: https://device.sso.us-east-2.amazonaws.com/ Then enter the code: XXXX-XXXX The only AWS account available to you is: 123456789999 Using the account ID 123456789999 The only role available to you is: ViewOnlyAccess Using the role name "ViewOnlyAccess" CLI default client Region [us-east-2]: CLI default output format [json]: CLI profile name [ViewOnlyAccess-123456789999]: test-profile To use this profile, specify the profile name using --profile, as shown: aws s3 ls --profile test-profile
Ahora puede ejecutar los comandos de AWS CLI con este nuevo perfil. Esta configuración permite al usuario de SSO hacer lo siguiente:
- Autenticar con AWS.
- Asumir un rol de AWS Identity and Management (IAM) creado por IAM Identity Center.
Ejemplo:
$ aws sts get-caller-identity { "UserId": "AROAXMRV33N1234567890:test-user", "Account": "123456789999", "Arn": "arn:aws:sts::123456789999:assumed-role/AWSReservedSSO_ViewOnlyAccess_05a3861234567890/test-user" }
Configure el contexto de kubectl para usar el perfil de AWS CLI creado para SSO
Kubectl utiliza los comandos de AWS CLI. Por lo tanto, debe especificar el nuevo perfil de AWS CLI en el contexto actual de kubectl. Para actualizar el contexto de kubectl a fin de usar el perfil nuevo, ejecute el siguiente comando:
aws eks update-kubeconfig --name $CLUSTER-NAME --profile test-profile
Luego de ejecutar este comando, kubectl usa el perfil test-profile para autenticarse con el servidor de la API del clúster.
Crear una versión de ARN excluyendo la ruta
Los roles de IAM asignados en aws-auth ConfigMap no incluyen la ruta. De forma predeterminada, el nombre de recurso de Amazon (ARN) del rol de IAM asociado a su usuario de SSO incluye la ruta.
Ejemplo:
arn:aws:iam::123456789999:role/aws-reserved/sso.amazonaws.com/us-east-2/AWSReservedSSO_ViewOnlyAccess_05a3861234567890
Si agrega el ARN completo a aws-auth ConfigMap, su usuario de SSO no se autentica. No puede acceder a su clúster con su usuario de SSO. Asegúrese de crear una versión de este ARN sin incluir la ruta. Esta versión se debe utilizar en el siguiente paso
Ejemplo:
arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01
También puede obtener el rol de IAM sin la ruta al ejecutar los siguientes comandos:
ssorole=$(aws sts get-caller-identity --query Arn --output text --profile test-profile | cut -d/ -f2) account=$(aws sts get-caller-identity --query Account --output text --profile test-profile) echo "arn:aws:iam::$account:role/$ssorole" arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01
Agregar el ARN a aws-auth ConfigMap
Para que su usuario de SSO pueda acceder al clúster de Amazon EKS, el rol de IAM asociado a su usuario de SSO debe estar asignado a los permisos de RBAC de Kubernetes. Para ello, incluya el ARN del rol de IAM sin la ruta en aws-auth ConfigMap. Luego, asígnela al usuario de Kubernetes y a los grupos que están vinculados a KubernetesRole y RoleBinding (o ClusterRole y ClusterRoleBinding). Siga las instrucciones de cualquiera de las siguientes secciones según su caso de uso.
Usuario de SSO con permisos de administrador para todo el clúster
De forma predeterminada, el grupo de Kubernetes system:masters proporciona permisos de administrador para todo el clúster. Este grupo está vinculado a ClusterRole cluster-admin y ClusterRoleBinding cluster-admin. Por lo tanto, no necesita crear nuevos objetos de ClusterRole y ClusterBindingRole. Solo necesita asignar el rol de IAM sin ruta al grupo system:masters.
Para ello, edite aws-auth ConfigMap:
kubectl edit configmap aws-auth -n kube-system
Luego, agregue lo siguiente:
- groups: - system:masters rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: cluster-admin
Usuario de SSO con permisos de lectura vinculados al espacio de nombres
En este caso, debe crear Role y RoleBinding con permisos de lectura dentro de un espacio de nombres específico. A continuación, vincule esos objetos al rol de IAM mediante un nombre de usuario o grupo personalizado en aws-auth ConfigMap.
1. Cree un objeto Role de Kubernetes que solo autorice los permisos de lectura en el espacio de nombres deseado:
cat << EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: $MY-NAMESPACE name: reader-role rules: - apiGroups: [""] # "" indicates the core API group resources: ["*"] verbs: ["get", "watch", "list"] EOF
Nota:
- Reemplace $MY-NAMESPACE por el nombre de su espacio de nombres.
- Reemplace reader-role por su nombre de usuario personalizado.
2. Cree un objeto RoleBinding de Kubernetes que vincule los permisos del rol de Kubernetes al grupo read-only-group:
cat <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: reader-binding namespace: MY-NAMESPACE subjects: - kind: Group name: read-only-group apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: reader-role apiGroup: rbac.authorization.k8s.io EOF
3. Asigne el ARN del rol de IAM sin ruta al grupo read-only-group en aws-auth ConfigMap.
Puede asignar el rol de IAM automáticamente al ejecutar el siguiente comando:
eksctl create iamidentitymapping \ --cluster $CLUSTER-NAME \ --region $REGION \ --arn arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 \ --group read-only-group \ --no-duplicate-arns \ --username read-only-user1
Nota: Sustituya $CLUSTER-NAME y $REGION por el nombre de su clúster y región, respectivamente. O bien, puede asignar el rol de IAM de forma manual. Para ello, edite aws-auth ConfigMap:
kubectl edit configmap aws-auth -n kube-system
A continuación, agregue lo siguiente en la sección mapRoles:
- groups: - read-only-group rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: read-only-user1
Importante: El rol de IAM solo debe aparecer una vez en aws-auth ConfigMap. Por lo tanto, asegúrese de que solo una sección incluya el rol de IAM.
Ahora puede utilizar su usuario de SSO para acceder a su clúster:
$ kubectl get pod NAME READY STATUS RESTARTS AGE web-0 1/1 Running 0 24h
Información relacionada
Contenido relevante
- OFICIAL DE AWSActualizada hace 9 meses
- OFICIAL DE AWSActualizada hace 18 días
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años