¿Cómo configuro un usuario de SSO para acceder a mi clúster de Amazon EKS?

7 minutos de lectura
0

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:

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

Activar el acceso de usuario y rol de IAM a su clúster

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año