Concessione ai carichi di lavoro Kubernetes dell’accesso a AWS utilizzando gli account di servizio Kubernetes - Amazon EKS

Contribuisci a migliorare questa pagina

Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.

Concessione ai carichi di lavoro Kubernetes dell’accesso a AWS utilizzando gli account di servizio Kubernetes

Gestione degli account di servizioRuoli IAM per gli account di servizioInformazioni su come EKS Pod Identity consente ai pod di accedere ai servizi AWS

Token dell'account di servizio

La funzionalità BoundServiceAccountTokenVolume è abilitata per impostazione predefinita nelle versioni di Kubernetes. Questa funzionalità migliora la sicurezza dei token dell'account di servizio, consentendo ai carichi di lavoro in esecuzione su Kubernetes di richiedere token Web JSON associati a pubblico, tempo e chiavi. I token dell'account di servizio scadono entro un'ora, Nelle versioni precedenti di Kubernetes, i token non avevano scadenza. Di conseguenza, i client che si basano su questi token devono aggiornarli entro un'ora. Gli SDK client Kubernetes seguenti aggiornano automaticamente i token entro il periodo di tempo richiesto:

  • Go versione 0.15.7 e successive

  • Python versione 12.0.0 e successive

  • Java versione 9.0.0 e successive

  • JavaScript versione 0.10.3 e successive

  • Ramo master di Ruby

  • Haskell versione 0.3.0.0

  • Versione C# 7.0.5 e successive

Se il carico di lavoro utilizza una versione precedente del client, è necessario aggiornarla. Per consentire una migrazione agevole dei client verso i più recenti token dell’account di servizio con limite di tempo, Kubernetes proroga il periodo di scadenza dei token, rispetto a quello predefinito di un’ora. Per i cluster Amazon EKS, il periodo di scadenza è prorogato a 90 giorni. Il server API Kubernetes del cluster Amazon EKS rifiuta le richieste con token che sono più vecchi di 90 giorni. Consigliamo di controllare le applicazioni e le relative dipendenze per assicurarti che gli SDK del client Kubernetes corrispondano o siano successivi alle versioni elencate sopra.

Quando il server API riceve richieste con token più vecchie di un'ora, le annota nel log eventi di controllo API con annotations.authentication.k8s.io/stale-token. Il valore dell'annotazione è simile a quello riportato di seguito:

subject: system:serviceaccount:common:fluent-bit, seconds after warning threshold: 4185802.

Se nel cluster è abilitata la registrazione del piano di controllo (control-plane), le annotazioni di trovano nei registri di controllo. Per identificare tutti i pod del cluster Amazon EKS che utilizzano token obsoleti, è possibile utilizzare la seguente query di Log Insights di Cloudwatch:

fields @timestamp |filter @logStream like /kube-apiserver-audit/ |filter @message like /seconds after warning threshold/ |parse @message "subject: *, seconds after warning threshold:*\"" as subject, elapsedtime

subject si riferisce all’account di servizio utilizzato dal pod. elapsedtime indica in secondi il tempo trascorso dalla lettura dell'ultimo token. Le richieste al server API vengono negate quando elapsedtime supera i 90 giorni (7.776.000 secondi). Per utilizzare una delle versioni elencate sopra e aggiornare automaticamente il token, devi aggiornare in modo proattivo l’SDK client Kubernetes delle applicazioni. Se il token dell’account di servizio utilizzato è prossimo ai 90 giorni e non si ha tempo sufficiente per aggiornare le versioni dell’SDK client prima della scadenza, è possibile terminare i pod esistenti e crearne di nuovi. Ciò comporta una ridefinizione del token dell'account di servizio, concedendo agli utenti altri 90 giorni per aggiornare gli SDK della versione client.

Se il pod fa parte di un’implementazione, è consigliabile terminare i pod eseguendo un rollout in modo da mantenere un’elevata disponibilità. Per eseguire questa operazione, utilizzare il comando seguente. Sostituisci my-deployment con il nome dell'implementazione.

kubectl rollout restart deployment/my-deployment

Componenti aggiuntivi del cluster

I componenti aggiuntivi del cluster seguenti sono stati aggiornati per utilizzare gli SDK client Kubernetes che riconfigurano automaticamente i token dell’account di servizio. Assicurati che le versioni elencate, o versioni successive, siano installate sul tuo cluster.

Concedere le autorizzazioni di AWS Identity and Access Management ai carichi di lavoro sui cluster Amazon Elastic Kubernetes Service

Amazon EKS offre due modi per concedere le autorizzazioni di AWS Identity and Access Management ai carichi di lavoro eseguiti nei cluster Amazon EKS: ruoli IAM per gli account di servizio ed EKS Pod Identity.

Ruoli IAM per gli account di servizio

Ruoli IAM per gli account di servizio (IRSA) configura le applicazioni Kubernetes in esecuzione su AWS con autorizzazioni IAM granulari per accedere a varie altre risorse AWS come bucket Amazon S3, tabelle Amazon DynamoDB e altro ancora. Puoi eseguire più applicazioni contemporaneamente nello stesso cluster Amazon EKS e assicurarti che ogni applicazione disponga solo del set minimo di autorizzazioni di cui ha bisogno. IRSA è stato creato per supportare varie opzioni di implementazione Kubernetes supportate da AWS, come Amazon EKS, Amazon EKS Anywhere, Red Hat OpenShift Service su AWS, e cluster autogestiti su istanze Amazon EC2. Pertanto, IRSA è stato creato utilizzando servizi AWS fondamentali come IAM e non ha assunto alcuna dipendenza diretta dal servizio Amazon EKS e dall'API EKS. Per ulteriori informazioni, consulta Ruoli IAM per gli account di servizio.

EKS Pod Identity

EKS Pod Identity offre agli amministratori dei cluster un flusso di lavoro semplificato per l'autenticazione delle applicazioni al fine di accedere a varie altre risorse AWS come bucket Amazon S3, tabelle Amazon DynamoDB e altro ancora. EKS Pod Identity è solo per EKS e, di conseguenza, semplifica il modo in cui gli amministratori dei cluster possono configurare le applicazioni Kubernetes per ottenere le autorizzazioni IAM. Queste autorizzazioni possono ora essere facilmente configurate con meno passaggi direttamente tramite Console di gestione AWS, API EKS e AWS CLI e non è necessario eseguire alcuna operazione all’interno del cluster su nessun oggetto Kubernetes. Gli amministratori del cluster non devono passare dai servizi EKS ai servizi IAM o utilizzare operazioni IAM privilegiate per configurare le autorizzazioni richieste dalle applicazioni. I ruoli IAM possono ora essere utilizzati su più cluster senza la necessità di aggiornare la policy di attendibilità dei ruoli durante la creazione di nuovi cluster. Le credenziali IAM fornite da EKS Pod Identity includono tag di sessione dei ruoli, con attributi come nome del cluster, namespace, nome dell'account di servizio. I tag di sessione di ruolo consentono agli amministratori di creare un singolo ruolo che può funzionare su più account di servizio, permettendo l'accesso alle risorse AWS in base ai tag corrispondenti. Per ulteriori informazioni, consulta Informazioni su come EKS Pod Identity consente ai pod di accedere ai servizi AWS.

Confronto tra EKS Pod Identity e IRSA

A un livello superiore, sia EKS Pod Identity che IRSA concedono autorizzazioni IAM alle applicazioni in esecuzione su cluster Kubernetes. Ma sono fondamentalmente diversi nel modo in cui vengono configurati, nei limiti supportati e nelle funzionalità abilitate. Di seguito, confrontiamo alcuni degli aspetti chiave di entrambe le soluzioni.

Nota

AWS consiglia di utilizzare EKS Pod Identity per concedere l’accesso alle risorse AWS dei pod ogni volta che è possibile. Per ulteriori informazioni, consulta Informazioni su come EKS Pod Identity consente ai pod di accedere ai servizi AWS.

Attributo EKS Pod Identity IRSA

Estensibilità dei ruoli

È necessario configurare ogni ruolo una volta per instaurare un rapporto di attendibilità con il principale di servizio Amazon EKS introdotto di recente, pods.eks.amazonaws.com. Dopo questo passaggio una tantum, non è necessario aggiornare la policy di attendibilità del ruolo ogni volta che è utilizzato in un nuovo cluster.

È necessario aggiornare la policy di attendibilità del ruolo IAM con il nuovo endpoint del provider OIDC del cluster EKS ogni volta che si desidera utilizzare il ruolo in un nuovo cluster.

Scalabilità del cluster

EKS Pod Identity non richiede agli utenti di configurare il provider OIDC di IAM, quindi questo limite non si applica.

Ciascun cluster EKS ha un URL emittente OpenID Connect (OIDC) associato ad esso. Per utilizzare IRSA, è necessario creare un provider OpenID Connect univoco per ogni cluster EKS in IAM. IAM ha un limite globale predefinito di 100 provider OIDC per ciascun account AWS. Se prevedi di avere più di 100 cluster EKS per ciascun account AWS con IRSA, raggiungerai il limite del provider OIDC di IAM.

Scalabilità dei ruoli

EKS Pod Identity non richiede agli utenti di definire una relazione di attendibilità tra il ruolo IAM e l’account di servizio nella policy di attendibilità, quindi questo limite non è applicato.

In IRSA, definisci la relazione di attendibilità tra un ruolo IAM e un account di servizio nella policy di attendibilità del ruolo. Per impostazione predefinita, la lunghezza della dimensione della policy di attendibilità è 2048. Ciò significa che in genere è possibile definire 4 relazioni di attendibilità in un'unica policy di attendibilità. Sebbene sia possibile aumentare il limite di lunghezza della policy di attendibilità, in genere si è limitati a un massimo di 8 relazioni di attendibilità all'interno di una singola policy di attendibilità.

Utilizzo della quota API di STS

EKS Pod Identity semplifica l’invio delle credenziali AWS ai pod e non richiede il codice per effettuare chiamate direttamente con il AWS Security Token Service (STS). Il servizio EKS gestisce l’assunzione dei ruoli e fornisce le credenziali alle applicazioni scritte utilizzando AWS SDK nei pod senza che i pod comunichino con AWS STS o utilizzino una quota API di STS.

In IRSA, le applicazioni scritte utilizzando AWS SDK nei pod utilizzano i token per chiamare l’API AssumeRoleWithWebIdentity su AWS Security Token Service (STS). A seconda della logica del codice di AWS SDK, è possibile che il codice effettui chiamate non necessarie a AWS STS e riceva errori di limitazione (della larghezza di banda della rete).

Riutilizzabilità dei ruoli

Le credenziali temporanee AWS STS fornite da EKS Pod Identity includono tag di sessione dei ruoli, come nome del cluster, namespace e nome dell’account di servizio. I tag di sessione dei ruoli permettono agli amministratori di creare un singolo ruolo IAM che può essere utilizzato con più account di servizio, con diverse autorizzazioni effettive, consentendo l'accesso alle risorse AWS in base ai tag ad essi collegati. Questo ruolo è chiamato anche controllo degli accessi basato su attributi (ABAC). Per ulteriori informazioni, consulta Concessione dell’accesso dei pod alle risorse AWS in base ai tag.

I tag di sessione AWS STS non sono supportati. È possibile riutilizzare un ruolo tra i cluster, ma ogni pod riceve tutte le autorizzazioni del ruolo.

Ambienti supportati

EKS Pod Identity è disponibile solo su Amazon EKS.

IRSA può essere utilizzato su cluster Amazon EKS, Amazon EKS Anywhere, Red Hat OpenShift Service su AWS e su cluster Kubernetes autogestiti su istanze Amazon EC2.

Versioni EKS supportate

Tutte le versioni del cluster EKS supportate. Per le versioni delle piattaforme specifiche, consulta Versioni del cluster EKS Pod Identity.

Tutte le versioni del cluster EKS supportate.