Assign IAM ruoli per Kubernetes account di servizio - Amazon EKS

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à.

Assign IAM ruoli per Kubernetes account di servizio

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

Prerequisiti

  • Un cluster esistente. Se non ne hai uno, puoi crearne uno seguendo una delle guide inInizia a usare Amazon EKS.

  • Un esistente IAM OpenID Connect (OIDC) provider per il tuo cluster. Per sapere se disponi di un account o, per crearne uno, consulta Crea un IAM OIDC provider per il tuo cluster.

  • Versione 2.12.3 o successiva o versione 1.27.160 o successiva dell'interfaccia a riga di AWS comando (AWS CLI) installata e configurata sul dispositivo o AWS CloudShell. Per verificare la versione attuale, usa 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, consulta Installazione e configurazione rapida con aws configure nella Guida per l'utente dell'interfaccia a riga di AWS comando. La AWS CLI versione installata in AWS CloudShell potrebbe 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 da kubectl riga di comando è 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.29, puoi usare kubectl versione 1.28, 1.29 o 1.30. Per installare o aggiornare kubectl, consulta Configura kubectl ed eksctl:

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

Fase 1: Creare una IAM politica

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

  1. Crea una IAM politica. Puoi creare la tua politica o copiare una politica AWS gestita che già concede alcune delle autorizzazioni necessarie e personalizzarla in base ai tuoi requisiti specifici. Per ulteriori informazioni, consulta Creazione IAM di politiche nella Guida per l'IAMutente.

  2. Crea un file che includa le autorizzazioni per i AWS servizi che desideri Pods per accedere. Per un elenco di tutte le azioni per tutti i AWS servizi, 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 i contenitori nel 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
  3. Crea la IAM politica.

    aws iam create-policy --policy-name my-policy --policy-document file://my-policy.json

Fase 2: Creare e associare il IAM ruolo

Creare un IAM ruolo e associarlo a un Kubernetes account di servizio. In alternativa, è possibile utilizzare eksctl o la AWS CLI.

Crea e associa il ruolo (eksctl)

Versione 0.194.0 o successiva dello strumento da riga di eksctl comando installato sul dispositivo o. AWS CloudShell Per l'installazione o l'aggiornamento di eksctl, consulta la sezione Installation nella documentazione di eksctl.

Replace (Sostituisci) my-service-account con il nome del Kubernetes account di servizio che si eksctl desidera creare e associare a un IAM ruolo. Replace (Sostituisci) default con lo spazio dei nomi in cui desideri eksctl creare l'account di servizio. Replace (Sostituisci) my-cluster con il nome del tuo cluster. Replace (Sostituisci) my-role con il nome del ruolo a cui si desidera associare l'account di servizio. Se non esiste già, lo eksctl crea per te. Replace (Sostituisci) 111122223333 con l'ID del tuo account e my-policy con il nome di una politica esistente.

eksctl create iamserviceaccount --name my-service-account --namespace default --cluster my-cluster --role-name my-role \ --attach-policy-arn arn:aws: iam::111122223333:policy/my-policy --approve
Importante

Se il ruolo o l'account del servizio esiste già, il comando precedente potrebbe non riuscire. eksctl ha diverse opzioni che puoi fornire in queste situazioni. Per ulteriori informazioni, esegui eksctl create iamserviceaccount --help.

Crea e associa il ruolo (AWS CLI)

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

  1. 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
  2. Imposta l'ID AWS dell'account su una variabile di ambiente con il seguente comando.

    account_id=$(aws sts get-caller-identity --query "Account" --output text)
  3. Imposta quello del tuo cluster OIDC identity provider su una variabile di ambiente con il seguente comando. Replace (Sostituisci) my-cluster con il nome del tuo cluster.

    oidc_provider=$(aws eks describe-cluster --name my-cluster --region $AWS_REGION --query "cluster.identity.oidc.issuer" --output text | sed -e "s/^https:\/\///")
  4. Imposta le variabili per lo spazio dei nomi e il nome dell'account del servizio. Replace (Sostituisci) my-service-account con il Kubernetes account di servizio a cui desideri assegnare il ruolo. Replace (Sostituisci) default con lo spazio dei nomi dell'account di servizio.

    export namespace=default export service_account=my-service-account
  5. Esegui il comando seguente per creare un file di criteri di fiducia per il IAM ruolo. Se desideri consentire a tutti gli account di servizio all'interno di uno spazio dei nomi di utilizzare il ruolo, copia i seguenti contenuti sul tuo dispositivo. Replace (Sostituisci) StringEquals con StringLike e sostituisci $service_account con\*. È possibile aggiungere più voci nelle condizioni StringEquals e StringLike riportate di seguito per utilizzare più account di servizio o spazi dei nomi con il ruolo. Per consentire ai ruoli di un AWS account diverso da quello in cui si trova il cluster di assumere il ruolo, consulta Effettua l'autenticazione su un altro account con IRSA per ulteriori informazioni.

    cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws: iam::$account_id:oidc-provider/$oidc_provider" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "$oidc_provider:aud": "sts.amazonaws.com", "$oidc_provider:sub": "system:serviceaccount:$namespace:$service_account" } } } ] } EOF
  6. Crea il ruolo. Replace (Sostituisci) my-role con un nome per il tuo IAM ruolo e my-role-description con una descrizione del ruolo.

    aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
  7. Allega una IAM politica al tuo ruolo. Replace (Sostituisci) 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::$account_id:policy/my-policy
  8. Annota il tuo account di servizio con l'Amazon Resource Name (ARN) del IAM ruolo che vuoi che l'account di servizio assuma. Replace (Sostituisci) my-role con il nome del tuo IAM ruolo esistente. Supponiamo di aver consentito a un ruolo di un AWS account diverso da quello in cui si trova il cluster di assumere il ruolo in un passaggio precedente. Quindi, assicurati di specificare l' AWS account e il ruolo dell'altro account. Per ulteriori informazioni, consulta Effettua l'autenticazione su un altro account con IRSA.

    kubectl annotate serviceaccount -n $namespace $service_account eks.amazonaws.com/role-arn=arn:aws: iam::$account_id:role/my-role
  9. (Facoltativo) Configurare l'endpoint del servizio AWS Security Token per un account di servizio Configura l'endpoint del servizio AWS Security Token per un account di servizio. AWS consiglia di utilizzare un AWS STS endpoint regionale anziché un endpoint globale. Ciò riduce la latenza, fornisce una ridondanza integrata e aumenta la validità del token di sessione.

Fase 3: Conferma della configurazione

  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": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws: iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:default:my-service-account", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com" } } } ] }
  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.

  6. Conferma che Kubernetes l'account di servizio è annotato con il ruolo.

    kubectl describe serviceaccount my-service-account -n default

    Di seguito viene riportato un output di esempio:

    Name: my-service-account Namespace: default Annotations: eks.amazonaws.com/role-arn: arn:aws: iam::111122223333:role/my-role Image pull secrets: <none> Mountable secrets: my-service-account-token-qqjfl Tokens: my-service-account-token-qqjfl [...]

Passaggi successivi