Perché non posso utilizzare un ruolo IAM per l'account di servizio nel mio pod Amazon EKS?

6 minuti di lettura
0

Cerco di utilizzare un ruolo AWS Identity and Access Management (IAM) per un account di servizio. Il mio pod Amazon Elastic Kubernetes Service (Amazon EKS) non assume il ruolo IAM assegnato con un errore di autorizzazione. Oppure, il mio pod cerca di utilizzare il ruolo IAM predefinito assegnato al nodo Amazon EKS anziché il ruolo IAM assegnato al mio pod.

Risoluzione

Nota: Se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

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

Crea un provider IAM OIDC per il tuo cluster, se non ne hai già uno. È necessario disporre di un provider di identità OIDC affinché il cluster possa utilizzare un ruolo IAM per l'account di servizio.

Quindi, verifica che il provider di identità OIDC sia configurato correttamente:

  1. Apri la console IAM. Dal pannello di navigazione, scegli Identity provider.
  2. Nella colonna Provider, identifica e annota l'URL del provider OIDC.
  3. In una scheda o finestra separata, apri la console Amazon EKS. Quindi, scegli Clusters dal pannello di navigazione.
  4. Scegli il tuo cluster, quindi scegli la scheda Configurazione.
  5. Nella sezione Dettagli, annota il valore dell'URL del provider OpenID Connect.
  6. Verifica che l'URL del provider OIDC dalla console Amazon EKS (fase 5) corrisponda all'URL del provider OIDC dalla console IAM (passaggio 2).
    Se l'URL del provider OIDC per il tuo cluster Amazon EKS non corrisponde a nessuno degli URL del provider OIDC nella console IAM, devi creare un nuovo provider IAM OIDC.

Convalida le policy relative ai ruoli IAM e la configurazione delle policy di fiducia

Il tuo ruolo IAM potrebbe non avere l'intera gamma di autorizzazioni necessarie. La policy sulla relazione di fiducia del tuo ruolo IAM potrebbe inoltre contenere errori di sintassi, se hai creato il tuo ruolo IAM con la Console di gestione AWS o l'interfaccia della linea di comando AWS.

Per convalidare le tue policy sui ruoli IAM e verificare la presenza di errori di sintassi nella tua policy di fiducia, procedi come segue:

  1. Apri la console IAM.
  2. Nel pannello di navigazione, scegli Ruoli, quindi scegli il tuo ruolo.
  3. Scegli la scheda Autorizzazioni nella pagina del tuo ruolo, quindi verifica che tutte le autorizzazioni richieste siano assegnate al ruolo.
  4. Scegli la scheda Relazioni di fiducia, quindi scegli Modifica relazione di fiducia.
  5. Nel documento sulla policy per la tua relazione di fiducia, verifica che il formato della tua policy corrisponda al formato della seguente politica 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 tua policy JSON, rivedi il formato della riga di proprietà Federated e della riga di proprietà StringEquals. Nella riga Federated, conferma che il codice regionale AWS (your-region-code), l'ID account (your-account-id) e l'identificatore OIDC univoco (EXAMPLE_OIDC_IDENTIFIER) siano formattati correttamente. Nella riga StringEquals, conferma che il codice regionale (your-region-code), l'identificatore univoco OIDC (EXAMPLE_OIDC_IDENTIFIER), lo spazio dei nomi Kubernetes (your-name-space) e il nome dell'account del servizio Kubernetes (your-name-space) siano formattati correttamente.
  6. Se modifichi il documento della politica per correggere gli errori di formattazione, scegli Aggiorna policy di fiducia.

Verifica che il tuo account di servizio esista e abbia un'annotazione formattata correttamente per l'ARN del ruolo IAM

  1. Conferma che il tuo account di servizio Kubernetes esiste:

    $ kubectl get serviceaccount YOUR_ACCOUNT_NAME -n YOUR_NAMESPACE -o yaml

    Nota: Sostituisci YOUR_ACCOUNT_NAME con il nome del tuo account. Sostituisci YOUR_NAMESPACE con il tuo spazio dei nomi.
    Se il comando precedente non restituisce il nome di un account di servizio, crea un account di servizio. Per ulteriori informazioni, consulta Usare più di un ServiceAccount sul sito web di Kubernetes.

  2. Verifica che il tuo account di servizio abbia il nome che ti aspetti. Inoltre, conferma che la relativa annotazione role-arn sia formattata correttamente. Ad 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

Usa un pod di test per verificare che l'account del servizio funzioni

Esegui un pod di test per verificare che l'account di servizio funzioni correttamente. Quindi, controlla se il pod può montare le variabili di ambiente correttamente e può assumere il ruolo IAM specificato.

  1. Crea un file YAML locale chiamato awscli-pod.yaml. Ad 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. Crea il pod di test (dal file YAML) nel tuo spazio dei nomi:

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

    Nota: Sostituisci YOUR_NAMESPACE con il tuo spazio dei nomi.

  3. Conferma che il pod awscli abbia le variabili di ambiente corrette:

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

    L'output è simile al seguente:

    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. Conferma che il pod di test abbia il ruolo IAM corretto:

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

    L'output è simile al seguente:

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

    Nota il valore Arn, incluso il nome del ruolo IAM che ricevi in questo output.

  5. Dopo aver verificato il ruolo IAM, elimina il pod awscli:

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

    Se il pod awscli mostra il ruolo IAM corretto, allora la funzionalità dei ruoli IAM per gli account di servizio funziona correttamente.

I passaggi precedenti confermano che il token IAM è montato correttamente sul pod. Se la tua applicazione non riesce ancora a utilizzare correttamente il file token, potrebbe esserci un problema a livello di applicazione o SDK. Questo problema può essere correlato al modo in cui l'applicazione acquisisce le credenziali AWS o al fatto che la versione SDK non è supportata. Per ulteriori informazioni, consulta Utilizzo della catena di provider di credenziali predefinita, Credenziali sul sito Web Boto3 e Utilizzo di un SDK AWS supportato.

AWS UFFICIALE
AWS UFFICIALEAggiornata 8 mesi fa