Usando AWS re:Post, accetti AWS re:Post Termini di utilizzo

Come posso configurare un utente SSO per accedere al mio cluster Amazon EKS?

6 minuti di lettura
0

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:

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

Attivazione dell'accesso di utenti e ruoli IAM al cluster

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa