Salta al contenuto

Perché non riesco a utilizzare un ruolo IAM per l'account di servizio nel mio Pod Amazon EKS?

5 minuti di lettura
0

Desidero utilizzare un ruolo AWS Identity and Access Management (AWS IAM) per un account AWS di servizio (IRSA). Tuttavia, il mio Pod Amazon Elastic Kubernetes Service (Amazon EKS) non riesce ad assumere il ruolo IAM assegnato. Oppure il mio Pod utilizza al suo posto il ruolo IAM predefinito assegnato al nodo Amazon EKS.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Verifica di disporre di un provider di identità IAM OIDC per il cluster Amazon EKS

Crea un provider IAM OpenID Connect (OIDC) per il cluster, se non ne hai già uno. Devi disporre di un provider OIDC affinché il cluster possa utilizzare un IRSA.

Quindi completa i seguenti passaggi per verificare di aver configurato correttamente il provider OIDC:

  1. Apri la console IAM.
  2. Dal pannello di navigazione, scegli Provider di identità.
  3. In Provider, identifica e annota l'URL del provider OIDC.
  4. In una scheda o finestra separata, apri la console Amazon EKS.
  5. Nel pannello di navigazione, scegliCluster.
  6. Scegli il cluster, quindi la scheda Configurazione.
  7. In Dettagli, controlla il valore di URL del provider OpenID Connect. Verifica che corrisponda all'URL del provider OIDC nella console IAM.
  8. Se gli URL non corrispondono, devi creare un nuovo provider IAM OIDC.

Convalida le policy del ruolo IAM e la configurazione della policy di attendibilità

I problemi IAM si verificano quando il ruolo IAM non ha tutte le autorizzazioni richieste. Oppure la policy delle relazioni di attendibilità del ruolo IAM potrebbe presentare errori di sintassi se hai creato il ruolo IAM con la Console di gestione AWS o AWS CLI.

Per convalidare le policy del ruolo IAM e verificare la presenza di errori di sintassi nella policy di attendibilità, completa i seguenti passaggi:

  1. Apri la console IAM.
  2. Nel pannello di navigazione, scegli Ruoli, quindi seleziona il ruolo.
  3. Scegli la scheda Autorizzazioni, quindi verifica di aver assegnato tutte le autorizzazioni necessarie per la configurazione al ruolo.
  4. Scegli la scheda Relazioni di attendibilità, quindi Modifica relazione di attendibilità.
  5. Nel documento sulla policy delle relazioni di attendibilità, verifica che il formato della policy corrisponda al formato della seguente policy JSON:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "arn:aws:iam::your-account-id:oidc-provider/oidc.eks.your-region-code.amazonaws.com/id/EXAMPLE_OIDC_IDENTIFIER"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "oidc.eks.your-region-code.amazonaws.com/id/EXAMPLE_OIDC_IDENTIFIER:sub": "system:serviceaccount:your-namespace:your-service-account",
              "oidc.eks.your-region-code.amazonaws.com/id/EXAMPLE_OIDC_IDENTIFIER:aud": "sts.amazonaws.com"
            }
          }
        }
      ]
    }
    Nella policy JSON, controlla il formato della riga della proprietà Federated e della riga della proprietà StringEquals. Per Federated, verifica di aver formattato correttamente il codice della Regione AWS, l'ID dell'account AWS e l'identificatore OIDC univoco. Per StringEquals, verifica di aver formattato correttamente il codice della Regione, l'identificatore OIDC univoco, il namespace Kubernetes e il nome dell'account di servizio Kubernetes.
  6. Se modifichi il documento della policy per correggere gli errori di formattazione, scegli Aggiorna policy di attendibilità.

Verifica che l'account di servizio esista e abbia un'annotazione formattata correttamente per il nome della risorsa Amazon (ARN) del ruolo IAM

Completa i seguenti passaggi:

  1. Per verificare l'esistenza dell'account di servizio Kubernetes, esegui questo comando:
    kubectl get serviceaccount YOUR_ACCOUNT_NAME -n YOUR_NAMESPACE -o yaml
    Nota: sostituisci YOUR_ACCOUNT_NAME con il nome del tuo account e YOUR_NAMESPACE con il tuo namespace.
    Se il comando precedente non restituisce il nome di un account di servizio, crea un account di servizio. Per ulteriori informazioni, consulta Use more than one ServiceAccount (Utilizzo di più account di servizio) sul sito web Kubernetes.
  2. Verifica che l'account di servizio abbia il nome che ti aspetti. Inoltre, verifica di aver formattato correttamente la relativa annotazione role-arn. Esempio:
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        eks.amazonaws.com/role-arn: arn:aws:iam::012345678912:role/my-example-iam-role
      name: my-example-serviceaccount
      namespace: my-test-namespace

Utilizza un Pod di prova per verificare che l'account di servizio funzioni

Esegui un Pod di prova per verificare che l'account di servizio funzioni correttamente, possa montare variabili di ambiente e possa assumere il ruolo IAM specificato. Completa i seguenti passaggi:

  1. Crea un file YAML locale denominato awscli-pod.yaml. Esempio:

    apiVersion: v1
    kind: Pod
    metadata:
      name: awscli
      labels:
        app: awscli
    spec:
      serviceAccountName: YOUR_SERVICE_ACCOUNT
      containers:
      - image: amazon/aws-cli
        command:
          - "sleep"
          - "604800"
        imagePullPolicy: IfNotPresent
        name: awscli
      restartPolicy: Always

    Nota: sostituisci YOUR_SERVICE_ACCOUNT con il nome del tuo account di servizio Kubernetes.

  2. Per creare il Pod di prova dal file YAML nel namespace, esegui questo comando:

    kubectl apply -f ./awscli-pod.yaml -n YOUR_NAMESPACE

    Nota: sostituisci YOUR_NAMESPACE con il tuo namespace.

  3. Per verificare che il Pod awscli contenga le variabili di ambiente AWS_ROLE_ARN e AWS_WEB_IDENTITY_TOKEN_FILE, esegui questo comando:

    kubectl exec -n YOUR_NAMESPACE awscli -- env | grep AWS

    Esempio di output:

    AWS_ROLE_ARN=arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME
    AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token
  4. Per verificare che il Pod di prova utilizzi il ruolo IAM corretto, esegui questo comando:

    kubectl exec -it awscli -n YOUR_NAMESPACE -- aws sts get-caller-identity

    Esempio di output:

    {    "UserId": "REDACTEDY471234567890:botocore-session-1632772568",
        "Account": "012345678912",
        "Arn": "arn:aws:sts::012345678912:assumed-role/your-iam-role/botocore-session-1632772568"
    }

    Annota il valore di Arn. Assicurati che il ruolo IAM sia il ruolo che desideri utilizzare nel Pod.

  5. Per eliminare il Pod awscli, esegui questo comando:

    kubectl delete -f ./awscli-pod.yaml -n YOUR_NAMESPACE

    Nota: sostituisci YOUR_NAMESPACE con il tuo namespace.

Se il Pod awscli mostra il ruolo IAM corretto, la funzionalità dei ruoli IAM per gli account di servizio funziona come previsto. I passaggi precedenti confermano che hai montato correttamente il token IAM sul Pod. Se l'applicazione non è ancora in grado di utilizzare il file del token IAM, potrebbe esserci un problema a livello di applicazione o SDK. Ad esempio, potrebbero esserci problemi relativi al modo in cui l'applicazione utilizza le credenziali AWS o a versioni SDK non supportate. Per ulteriori informazioni, consulta Utilizzo della catena di provider delle credenziali predefinita e Usa IRSA con AWS SDK.

AWS UFFICIALEAggiornata 6 mesi fa