View a markdown version of this page

Ruoli IAM per gli account di servizio - Amazon EKS

Contribuisci a migliorare questa pagina

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

Per contribuire a questa guida per l'utente, scegli il GitHub link Modifica questa pagina su che si trova nel riquadro destro di ogni pagina.

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

Ruoli IAM per gli account di servizio

Suggerimento

Registrati ai prossimi workshop Amazon EKS.

Le applicazioni nei contenitori di un Pod possono utilizzare un AWS SDK o la AWS CLI per effettuare richieste API ai AWS servizi utilizzando le autorizzazioni IAM ( AWS Identity and Access Management). Le applicazioni devono firmare le proprie richieste AWS API con credenziali. AWS I ruoli IAM per gli account di servizio (IRSA) forniscono la possibilità di gestire le credenziali per le applicazioni, analogamente al modo in cui i profili di istanza Amazon EC2 forniscono le credenziali alle istanze Amazon EC2. Invece di creare e distribuire le AWS credenziali ai contenitori o utilizzare il ruolo dell'istanza Amazon EC2, associ un ruolo IAM a un account di servizio Kubernetes e configura i tuoi Pods per utilizzare l'account di servizio. Non puoi utilizzare i ruoli IAM per gli account di servizio con cluster locali per Amazon EKS su Outposts. AWS

La caratteristica dei ruoli IAM per gli account di servizio offre i seguenti vantaggi:

  • Privilegio minimo: è possibile definire l’ambito delle autorizzazioni IAM per un account di servizio; solo i pod che utilizzano tale account avranno accesso alle autorizzazioni definite. Questa caratteristica elimina anche la necessità di soluzioni di terze parti, ad esempio kiam o kube2iam.

  • Isolamento delle credenziali: quando l’accesso al servizio di metadati di istanza (IMDS)di Amazon EC2 è limitato, un container del pod può recuperare solo le credenziali per il ruolo IAM associato all’account del servizio che utilizza. Un container non ha mai accesso alle credenziali utilizzate da altri container in altri pod. Se IMDS non è soggetto a restrizioni, i container del pod hanno accesso anche al ruolo IAM del nodo Amazon EKS potrebbero essere in grado di accedere alle credenziali dei ruoli IAM di altri pod sullo stesso nodo. Per ulteriori informazioni, consulta Limitazione dell’accesso al profilo dell’istanza assegnato al nodo worker.

Nota

I pod configurati con hostNetwork: true avranno sempre accesso IMDS, ma gli AWS SDK e la CLI utilizzeranno le credenziali IRSA quando abilitati.

  • Verificabilità: l'accesso e la registrazione degli eventi sono disponibili tramite per garantire un controllo retrospettivo. AWS CloudTrail

Importante

I container non costituiscono un limite di sicurezza e l’uso dei ruoli IAM per gli account di servizio non cambia questa situazione. I pod assegnati allo stesso nodo condivideranno un kernel e potenzialmente altre risorse a seconda della configurazione del pod. Sebbene i pod in esecuzione su nodi separati siano isolati a livello di elaborazione, esistono applicazioni di nodo che dispongono di autorizzazioni aggiuntive nell’API Kubernetes oltre all’ambito di una singola istanza. Alcuni esempi sono kubelet, kube-proxy, i driver di archiviazione CSI o le tue applicazioni Kubernetes.

Abilita i ruoli IAM per gli account di servizio completando le seguenti procedure:

  1. Creazione di un provider OIDC IAM per il cluster: questa operazione viene completata solo una sola volta per cluster.

    Nota

    Se il VPC del cluster non ha accesso a Internet in uscita e non hai impostato l'accesso privato all'endpoint OIDC del cluster, le operazioni che raggiungono quell'endpoint dall'interno del VPC, come la creazione di un provider OIDC con, non possono risolvere il nome host dell'emittente OIDC. eksctl Segue un messaggio di errore di esempio:

    server cant find oidc.eks.region.amazonaws.com: NXDOMAIN

    Per raggiungere l'endpoint OIDC del cluster privatamente dal tuo VPC, crea un endpoint di interfaccia VPC per esso (com.amazonaws.region-code.oidc-eks) con DNS privato abilitato. Per ulteriori informazioni, consulta Accedi ad Amazon EKS utilizzando AWS PrivateLink.

    In alternativa, puoi eseguire il comando all'esterno del VPC (ad esempio, in) o creare un resolver condizionale a orizzonte diviso. AWS CloudShell Per un esempio, consulta la richiesta di funzionalità di Amazon EKS su. https://github.com/aws/containers-roadmap/issues/2038 GitHub

  2. Assegna i ruoli IAM agli account del servizio Kubernetes: completa questa procedura per ogni set univoco di autorizzazioni che desideri abbia un’applicazione.

  3. Configura i Pod per utilizzare un account di servizio Kubernetes: completa questa procedura per ogni Pod che deve accedere ai servizi. AWS

  4. Usa IRSA con l' AWS SDK: conferma che il carico di lavoro utilizzi un AWS SDK di una versione supportata e che il carico di lavoro utilizzi la catena di credenziali predefinita.

Informazioni di base su IAM, Kubernetes e OpenID Connect (OIDC)

Nel 2014, AWS Identity and Access Management ha aggiunto il supporto per le identità federate utilizzando OpenID Connect (OIDC). Questa funzionalità consente di autenticare le chiamate AWS API con i provider di identità supportati e ricevere un token web JSON (JWT) OIDC valido. Puoi passare questo token all'operazione AssumeRoleWithWebIdentity API AWS STS e ricevere le credenziali di ruolo temporanee IAM. Puoi utilizzare queste credenziali per interagire con qualsiasi AWS servizio, inclusi Amazon S3 e DynamoDB.

Ogni token JWT è firmato da una coppia di chiavi di firma. Le chiavi vengono fornite dal provider OIDC gestito da Amazon EKS e la chiave privata ruota ogni 7 giorni. Amazon EKS conserva le chiavi pubbliche fino alla loro scadenza. Se si connettono client OIDC esterni, si tenga presente che è necessario aggiornare le chiavi di firma prima della scadenza della chiave pubblica. Scopri Fetch signing keys to validate OIDC tokens.

Kubernetes utilizza da tempo gli account di servizio come sistema di identità interno. I pod possono eseguire l’autenticazione con il server API Kubernetes utilizzando un token con montaggio automatico (che è un token JWT non OIDC) che solo il server API Kubernetes può convalidare. Questi token legacy dell’account di servizio non hanno scadenza e la rotazione della chiave di firma è un processo difficile. Nella versione 1.12 di Kubernetes, è stato aggiunto il supporto per una nuova funzionalità ProjectedServiceAccountToken. Questa funzionalità è un token Web OIDC JSON che contiene anche l’identità dell’account del servizio e supporta un pubblico configurabile.

Amazon EKS ora ospita un endpoint di rilevamento OIDC pubblico per ogni cluster, contenente le chiavi di firma per i token Web ProjectedServiceAccountToken JSON, in modo che i sistemi esterni, ad esempio IAM, possano convalidare e accettare i token OIDC emessi da Kubernetes.