Assegna un IAM ruolo a Kubernetes account di servizio - Amazon EKS

Aiutaci a migliorare questa pagina

Vuoi contribuire a questa guida per l'utente? Scorri fino alla fine di questa pagina e seleziona Modifica questa pagina su GitHub. I tuoi contributi contribuiranno a rendere la nostra guida utente migliore per tutti.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Assegna un IAM ruolo a Kubernetes account di servizio

Questo argomento spiega come configurare un Kubernetes account di servizio per assumere un ruolo AWS Identity and Access Management (IAM) con EKS Pod Identity. Qualsiasi Pods che sono configurati per utilizzare l'account di servizio possono quindi accedere a qualsiasi account a Servizio AWS cui il ruolo dispone delle autorizzazioni di accesso.

Per creare un'associazione EKS Pod Identity, è sufficiente un solo passaggio: si crea l'associazione EKS tramite AWS Management Console, AWS CLI AWS SDKs, AWS CloudFormation e altri strumenti. In nessun caso sono presenti dati o metadati sulle associazioni all'interno del cluster Kubernetes oggetti e non si aggiungono annotazioni agli account di servizio.

Prerequisiti
  • Un cluster esistente. Se non se ne possiede già uno, crearlo seguendo una delle guide Inizia a usare Amazon EKS.

  • Il IAM principale che sta creando l'associazione deve avereiam:PassRole.

  • La versione più recente di quella AWS CLI installata e configurata sul dispositivo o AWS CloudShell. È possibile verificare la versione corrente con aws --version | cut -d / -f2 | cut -d ' ' -f1. Package manager come yumapt-get, o Homebrew for macOS sono spesso presenti diverse versioni precedenti alla versione più recente di AWS CLI. Per installare la versione più recente, vedere Installazione, aggiornamento e disinstallazione AWS CLI e Configurazione rapida con aws configure nella Guida per l' AWS Command Line Interface utente. La AWS CLI versione installata in AWS CloudShell può anche contenere diverse versioni precedenti alla versione più recente. Per aggiornarla, consulta Installazione nella home directory nella Guida AWS CLI per l' AWS CloudShell utente.

  • Lo strumento a riga di comando kubectl è installato sul dispositivo o AWS CloudShell. La versione può essere uguale o superiore a una versione secondaria precedente o successiva alla Kubernetes versione del cluster. Ad esempio, se la versione del cluster è 1.30, puoi usare kubectl versione 1.29, 1.30 o 1.31. Per installare o aggiornare kubectl, consulta Configurazione kubectl e eksctl:

  • Un file kubectl config esistente che contiene la configurazione del cluster. Per creare un file kubectl config, consulta Connessione kubectl a un EKS cluster creando un kubeconfig file.

Creazione dell'associazione EKS Pod Identity

AWS Management Console
  1. Apri la EKS console Amazon a https://console.aws.amazon.com/eks/home#/clusters.

  2. Nel riquadro di navigazione a sinistra, seleziona Clusters, quindi seleziona il nome del cluster per cui desideri configurare il componente aggiuntivo EKS Pod Identity Agent.

  3. Scegli la scheda Accesso.

  4. In Associazioni Pod Identity, scegli Crea.

  5. Per il IAMruolo, seleziona il IAM ruolo con le autorizzazioni che desideri assegnare al carico di lavoro.

    Nota

    L'elenco contiene solo i ruoli che hanno la seguente politica di fiducia che consente a EKS Pod Identity di utilizzarli.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
    sts:AssumeRole

    EKSPod Identity assume AssumeRole il IAM ruolo prima di passare le credenziali temporanee ai tuoi pod.

    sts:TagSession

    EKSPod Identity utilizza TagSession per includere i tag di sessione nelle richieste di. AWS STS

    Puoi usare questi tag in condition keysnella politica di fiducia per limitare gli account di servizio, i namespace e i cluster che possono utilizzare questo ruolo.

    Per un elenco delle chiavi di EKS condizione di Amazon, consulta Conditions defined by Amazon Elastic Kubernetes Service nel Service Authorization Reference. Per informazioni su operazioni e risorse con cui è possibile utilizzare una chiave di condizione, consultare Operazioni definite da Amazon Elastic Kubernetes Service.

  6. Per Kubernetes namespace, seleziona Kubernetes namespace che contiene l'account del servizio e il carico di lavoro. Facoltativamente, puoi specificare uno spazio dei nomi che non esiste nel cluster.

  7. Per Kubernetes account di servizio, selezionare Kubernetes account di servizio da utilizzare. Il manifesto per il tuo Kubernetes il carico di lavoro deve specificare questo account di servizio. Facoltativamente, puoi specificare un account di servizio in base al nome che non è presente nel cluster.

  8. (Facoltativo) Per Tag, scegli Aggiungi tag per aggiungere metadati in una coppia chiave-valore. Questi tag vengono applicati all'associazione e possono essere utilizzati nelle IAM politiche.

    Puoi ripetere questo passaggio per aggiungere più tag.

  9. Scegli Create (Crea) .

AWS CLI
  1. Se desideri associare una IAM politica esistente al tuo IAM ruolo, vai al passaggio successivo.

    Crea una IAM politica. Puoi creare una policy personalizzata o copiare una policy AWS gestita che concede già alcune delle autorizzazioni necessarie e personalizzarla a seconda dei requisiti specifici desiderati. Per ulteriori informazioni, consulta Creazione IAM di politiche nella Guida IAM per l'utente.

    1. Crea un file che includa le autorizzazioni per il file Servizi AWS che desideri Pods per accedere. Per un elenco di tutte le azioni per tutti Servizi AWS, consulta il Service Authorization Reference.

      Puoi eseguire il comando seguente per creare un file policy di esempio che consenta l'accesso in sola lettura a un bucket Amazon S3. Facoltativamente, puoi memorizzare le informazioni di configurazione o uno script di bootstrap in questo bucket e nei contenitori del tuo Pod puoi leggere il file dal bucket e caricarlo nella tua applicazione. Se desideri creare questa policy di esempio, copia i seguenti contenuti sul dispositivo. Replace (Sostituisci) my-pod-secrets-bucket con il nome del tuo bucket ed esegui il comando.

      cat >my-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket" } ] } EOF
    2. Crea la IAM politica.

      aws iam create-policy --policy-name my-policy --policy-document file://my-policy.json
  2. Crea un IAM ruolo e associalo a Kubernetes account di servizio.

    1. Se ne hai già uno Kubernetes account di servizio a cui desideri assegnare un IAM ruolo, puoi saltare questo passaggio.

      Crea un Kubernetes account di servizio. Copia i seguenti contenuti sul dispositivo. Replace (Sostituisci) my-service-account con il nome desiderato e default con un namespace diverso, se necessario. Se cambi default, lo spazio dei nomi deve già esistere.

      cat >my-service-account.yaml <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: my-service-account namespace: default EOF kubectl apply -f my-service-account.yaml

      Esegui il comando seguente.

      kubectl apply -f my-service-account.yaml
    2. Esegui il comando seguente per creare un file di criteri di attendibilità per il IAM ruolo.

      cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] } EOF
    3. Crea il ruolo. Sostituiscilo my-role con un nome per il tuo IAM ruolo e my-role-description con una descrizione per il tuo ruolo.

      aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
    4. Allega una IAM politica al tuo ruolo. Sostituiscila my-role con il nome del tuo IAM ruolo e my-policy con il nome di una politica esistente che hai creato.

      aws iam attach-role-policy --role-name my-role --policy-arn=arn:aws:iam::111122223333:policy/my-policy
      Nota

      A differenza dei IAM ruoli per gli account di servizio, EKS Pod Identity non utilizza un'annotazione sull'account di servizio.

    5. Esegui il comando seguente per creare l'associazione. Sostituisci my-cluster con il nome del cluster, sostituisci my-service-account con il nome desiderato e default con un namespace diverso, se necessario.

      aws eks create-pod-identity-association --cluster-name my-cluster --role-arn arn:aws:iam::111122223333:role/my-role --namespace default --service-account my-service-account

      Di seguito viene riportato un output di esempio:

      { "association": { "clusterName": "my-cluster", "namespace": "default", "serviceAccount": "my-service-account", "roleArn": "arn:aws:iam::111122223333:role/my-role", "associationArn": "arn:aws::111122223333:podidentityassociation/my-cluster/a-abcdefghijklmnop1", "associationId": "a-abcdefghijklmnop1", "tags": {}, "createdAt": 1700862734.922, "modifiedAt": 1700862734.922 } }
      Nota

      Puoi specificare uno spazio dei nomi e un account di servizio in base al nome che non esiste nel cluster. È necessario creare lo spazio dei nomi, l'account di servizio e il carico di lavoro che utilizza l'account di servizio affinché l'associazione EKS Pod Identity funzioni.

>Conferma la configurazione

Conferma che il ruolo e l'account del servizio siano configurati correttamente.
  1. Conferma che la politica di fiducia del IAM ruolo sia configurata correttamente.

    aws iam get-role --role-name my-role --query Role.AssumeRolePolicyDocument

    Di seguito viene riportato un output di esempio:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Allow EKS Auth service to assume this role for Pod Identities", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
  2. Conferma che la policy che hai associato al tuo ruolo in un passaggio precedente sia associata al ruolo.

    aws iam list-attached-role-policies --role-name my-role --query AttachedPolicies[].PolicyArn --output text

    Di seguito viene riportato un output di esempio:

    arn:aws:iam::111122223333:policy/my-policy
  3. Imposta una variabile per memorizzare l'Amazon Resource Name (ARN) della policy che desideri utilizzare. Replace (Sostituisci) my-policy con il nome della policy per la quale desideri confermare le autorizzazioni.

    export policy_arn=arn:aws:iam::111122223333:policy/my-policy
  4. Visualizza la versione predefinita della policy.

    aws iam get-policy --policy-arn $policy_arn

    Di seguito viene riportato un output di esempio:

    { "Policy": { "PolicyName": "my-policy", "PolicyId": "EXAMPLEBIOWGLDEXAMPLE", "Arn": "arn:aws:iam::111122223333:policy/my-policy", "Path": "/", "DefaultVersionId": "v1", [...] } }
  5. Visualizza il contenuto della policy per assicurarti che la policy includa tutte le autorizzazioni di cui disponi Pod esigenze. Se necessario, sostituire 1 nel comando seguente con la versione restituita nell'output precedente.

    aws iam get-policy-version --policy-arn $policy_arn --version-id v1

    Di seguito viene riportato un output di esempio:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket" } ] }

    Se hai creato la policy di esempio in un passaggio precedente, il risultato è lo stesso. Se hai creato una politica diversa, allora example il contenuto è diverso.

Approfondimenti

Configura pods per accedere ai AWS servizi con account di servizio