Come posso configurare un utente SSO per accedere al mio cluster Amazon EKS?
Utilizzo Centro identità AWS IAM (successore di AWS Single Sign-On). Tuttavia, non riesco ad accedere al cluster Amazon Elastic Kubernetes Service (Amazon EKS). Desidero configurare l'utente SSO per accedere al mio cluster.
Risoluzione
Assicurati che siano soddisfatti i seguenti prerequisiti:
- Hai attivato e configurato il Centro identità IAM.
- L'utente SSO è associato all'account AWS in cui esiste il cluster Amazon EKS.
Nota: i passaggi seguenti utilizzano kubectl per accedere al cluster. Dopo aver configurato l'accesso kubectl, puoi vedere le risorse del cluster nella console Amazon EKS effettuando l'accesso come utente di Centro identità IAM.
Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'Interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare una versione recente di AWS CLI.
Configurazione di AWS CLI per utilizzare il tuo utente SSO
Crea un profilo per l'Interfaccia della linea di comando AWS (AWS CLI) che utilizzi l'autenticazione SSO durante l'esecuzione dei comandi di AWS CLI. Per ulteriori informazioni, consulta Configurazione di AWS CLI per l'uso di Centro identità AWS IAM (successore di AWS Single Sign-On).
Di seguito è riportato un esempio di configurazione SSO di AWS CLI utilizzando la procedura automatica:
aws configure sso SSO start URL [None]: https://my-sso-portal.awsapps.com/start SSO region [None]: us-east-1
AWS CLI prova ad aprire il browser predefinito e iniziare il processo di accesso per il tuo account di Centro identità IAM.
Attempting to automatically open the SSO authorization page in your default browser.
Se AWS CLI non riesce ad browser, viene visualizzato il seguente messaggio con le istruzioni su come avviare manualmente il processo di accesso:
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
A questo punto puoi eseguire i comandi di AWS CLI utilizzando questo nuovo profilo. Questa configurazione consente all'utente SSO di effettuare le seguenti operazioni:
- Autenticarsi con AWS.
- Assumere un ruolo AWS Identity and Management (IAM) creato dal Centro identità IAM.
Esempio:
$ aws sts get-caller-identity { "UserId": "AROAXMRV33N1234567890:test-user", "Account": "123456789999", "Arn": "arn:aws:sts::123456789999:assumed-role/AWSReservedSSO_ViewOnlyAccess_05a3861234567890/test-user" }
Configurazione del contesto kubectl per utilizzare il profilo AWS CLI creato per SSO
Kubectl utilizza i comandi di AWS CLI. Pertanto, devi specificare il nuovo profilo di AWS CLI nel contesto corrente di kubectl. Per aggiornare il contesto kubectl in modo da utilizzare il nuovo profilo, esegui il comando riportato:
aws eks update-kubeconfig --name $CLUSTER-NAME --profile test-profile
Dopo aver eseguito questo comando, kubectl utilizza il profilo test-profile per l'autenticazione con il server API del cluster.
Creazione di una versione dell'ARN escludendo il percorso
I ruoli IAM mappati nella ConfigMap aws-auth non includono il percorso. Per impostazione predefinita, il nome della risorsa Amazon (ARN) del ruolo IAM associato all'utente SSO include il percorso.
Esempio:
arn:aws:iam::123456789999:role/aws-reserved/sso.amazonaws.com/us-east-2/AWSReservedSSO_ViewOnlyAccess_05a3861234567890
Se aggiungi l'ARN completo alla ConfigMap aws-auth, il tuo utente SSO non viene autenticato. Non puoi accedere al cluster utilizzando l'utente SSO. Assicurati di creare una versione di questo ARN senza includere il percorso. Questa versione deve essere utilizzata nella fase successiva
Esempio:
arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01
Puoi ottenere il ruolo IAM senza il percorso anche eseguendo i comandi riportati:
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
Aggiunta dell'ARN alla ConfigMap aws-auth
Affinché l'utente SSO possa accedere al cluster Amazon EKS, il ruolo IAM associato all'utente deve essere mappato alle autorizzazioni RBAC di Kubernetes. Per fare ciò, includi l'ARN del ruolo IAM senza il percorso nella ConfigMap aws-auth. Quindi, associalo all'utente Kubernetes e ai gruppi collegati a Role e RoleBinding di Kubernetes (o ClusterRole e ClusterRoleBinding). Usa le istruzioni riportate in una delle seguenti sezioni in base al tuo caso d'uso.
Utente SSO con autorizzazioni di amministrazione a livello di cluster
Per impostazione predefinita, il gruppo Kubernetes system:masters fornisce autorizzazioni di amministrazione a livello di cluster. Questo gruppo è collegato al cluster-admin ClusterRole e al cluster-admin ClusterRoleBinding. Pertanto, non è necessario creare nuovi oggetti ClusterRole e ClusterBindingRole. È necessario soltanto mappare il ruolo IAM senza il percorso al gruppo system:masters.
Per fare ciò, modifica la ConfigMap aws-auth:
kubectl edit configmap aws-auth -n kube-system
Quindi, aggiungi:
- groups: - system:masters rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: cluster-admin
Utente SSO con autorizzazioni di lettura legate allo spazio dei nomi
In questo caso, è necessario creare un Role e un RoleBinding con autorizzazioni di lettura all'interno di uno spazio dei nomi specifico. Quindi, collega questi oggetti al ruolo IAM utilizzando un nome utente o un nome di gruppo personalizzato nella ConfigMap aws-auth.
1. Crea un oggetto Role Kubernetes che consenta solo le autorizzazioni di lettura nello spazio dei nomi desiderato:
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:
- sostituisci $MY-NAMESPACE con il nome del tuo spazio dei nomi.
- Sostituisci reader-role con il tuo nome utente personalizzato.
2. Crea un oggetto RoleBinding Kubernetes che colleghi le autorizzazioni dei ruoli Kubernetes al gruppo 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. Mappa l'ARN del ruolo IAM senza il percorso al gruppo read-only-group nella ConfigMap aws-auth.
È possibile mappare automaticamente il ruolo IAM eseguendo il comando riportato:
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: sostituisci $CLUSTER-NAME e $REGION con il nome del cluster e della regione, rispettivamente. In alternativa, puoi mappare il ruolo IAM manualmente. Per fare ciò, modifica la ConfigMap aws-auth:
kubectl edit configmap aws-auth -n kube-system
Quindi, aggiungi quanto segue nella sezione mapRoles:
- groups: - read-only-group rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: read-only-user1
Importante: il ruolo IAM deve apparire solo una volta nella ConfigMap aws-auth. Pertanto, assicurati che solo una sezione lo includa.
Ora puoi usare il tuo utente SSO per accedere al cluster:
$ kubectl get pod NAME READY STATUS RESTARTS AGE web-0 1/1 Running 0 24h
Informazioni correlate
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 mesi fa
- AWS UFFICIALEAggiornata 5 mesi fa
- AWS UFFICIALEAggiornata 2 mesi fa