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.
Assegnazione di un ruolo IAM a un account di servizio Kubernetes
Questo argomento illustra come configurare un account di servizio Kubernetes per assumere un ruolo AWS Identity and Access Management (IAM) con EKS Pod Identity. Qualsiasi pod configurato per utilizzare l’account del servizio può quindi accedere a qualsiasi servizio AWS per cui il ruolo dispone delle autorizzazioni di accesso.
Per creare un’associazione EKS Pod Identity, è sufficiente un solo passaggio; crei l’associazione in EKS tramite Console di gestione AWS, AWS CLI, AWS SDK, AWS CloudFormation e altri strumenti. Non sono presenti dati o metadati sulle associazioni all’interno del cluster in nessun oggetto Kubernetes 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 in Nozioni di base su Amazon EKS.
-
Il principale IAM che sta creando l'associazione deve avere
iam:PassRole. -
La versione più recente di AWS CLI installata e configurata sul dispositivo o in AWS CloudShell. È possibile verificare la versione corrente con
aws --version | cut -d / -f2 | cut -d ' ' -f1. I programmi di gestione dei pacchetti, comeyum,apt-geto Homebrew per macOS, spesso sono aggiornati a versioni precedenti dell’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 versione di AWS CLI installata in AWS CloudShell potrebbe anche essere di diverse versioni precedenti alla più recente. Per aggiornarla, consulta Installing AWS CLI to your home directory nella Guida per l’utente di AWS CloudShell. -
Lo strumento a riga di comando
kubectlè installato sul dispositivo o su AWS CloudShell. La versione può essere la stessa o immediatamente precedente o successiva alla versione Kubernetes del cluster. Ad esempio, se la versione del cluster è1.29, puoi usarekubectlversione1.28,1.29o1.30. Per installare o aggiornarekubectl, consulta Impostazione di kubectl e eksctl: -
Un file
kubectlconfigesistente che contiene la configurazione del cluster. Per creare un filekubectlconfig, consulta Connettere kubectl a un cluster EKS creando un file kubeconfig.
Crea un’associazione Pod Identity (AWS console)
-
Aprire la Console Amazon EKS
. -
Nel riquadro di navigazione a sinistra, seleziona Cluster, quindi seleziona il nome del cluster per cui configurare il componente aggiuntivo di EKS Pod Identity Agent.
-
Scegli la scheda Accesso.
-
In Associazioni Pod Identity, scegli Crea.
-
Per Ruolo IAM, seleziona il ruolo IAM con le autorizzazioni che desideri assegnare al carico di lavoro.
Nota
L'elenco contiene solo i ruoli con la seguente policy di attendibilità 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: EKS Pod Identity utilizzaAssumeRoleper assumere il ruolo IAM prima di passare le credenziali temporanee ai pod.sts:TagSession: EKS Pod Identity utilizzaTagSessionper includere i tag di sessione nelle richieste a AWS STS.È possibile utilizzare questi tag nelle chiavi di condizione nella policy di attendibilità per limitare gli account di servizio, i namespace e i cluster che possono utilizzare questo ruolo.
Per un elenco di chiavi di condizione di Amazon EKS, consultare Condizioni per Amazon Elastic Kubernetes Service in 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.
-
Per Namespace Kubernetes, seleziona il namespace Kubernetes che contiene l’account di servizio e il carico di lavoro. Facoltativamente, è possibile specificare un namespace che non esiste nel cluster.
-
Per l’account del servizio Kubernetes, seleziona l’account del servizio Kubernetes da utilizzare. Il manifesto del carico di lavoro Kubernetes deve specificare questo account di servizio. Facoltativamente, è possibile specificare un account di servizio in base al nome che non è presente nel cluster.
-
(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 policy IAM.
Puoi ripetere questo passaggio per aggiungere più tag.
-
Scegli Create (Crea).
Crea un’associazione Pod Identity (AWS CLI)
-
Se desideri associare una policy IAM esistente al tuo ruolo IAM, passa al prossimo passaggio.
Creare una policy IAM 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 di policy IAM nella Guida per l'utente di IAM.
-
Crea un file che includa le autorizzazioni per i servizi AWS a cui vuoi che i tuoi pod accedano. Per un elenco di tutte le azioni per tutti i servizi AWS, consulta Informazioni di riferimento sull’autorizzazione del servizio.
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, è possibile archiviare le informazioni di configurazione o uno script di bootstrap in questo bucket; i container nel pod possono leggere il file dal bucket e caricarlo nell’applicazione. Se desideri creare questa policy di esempio, copia i seguenti contenuti sul dispositivo. Sostituisci
my-pod-secrets-bucketcon il nome del 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 -
Creare la policy IAM.
aws iam create-policy --policy-name my-policy --policy-document file://my-policy.json
-
-
Crea un ruolo IAM e associalo a un account del servizio Kubernetes.
-
Se disponi di un account di servizio Kubernetes esistente che desideri assuma un ruolo IAM, puoi saltare questo passaggio.
Creare un account di servizio Kubernetes. Copia i seguenti contenuti sul dispositivo. Sostituisci
my-service-accountcon il nome desiderato edefaultcon uno spazio dei nomi diverso, se necessario. Se si cambiadefault, 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.yamlEsegui il comando seguente.
kubectl apply -f my-service-account.yaml -
Per creare una policy di attendibilità del ruolo IAM, esegui il comando seguente.
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 -
Crea il ruolo. Sostituisci
my-rolecon un nome per il ruolo IAM emy-role-descriptioncon una descrizione del ruolo.aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description" -
Allegare una policy IAM al ruolo. Sostituisci
my-rolecon il nome del ruolo IAM emy-policycon il nome di una policy esistente che hai creato.aws iam attach-role-policy --role-name my-role --policy-arn=arn:aws:iam::111122223333:policy/my-policyNota
A differenza dei ruoli IAM per gli account di servizio, EKS Pod Identity non utilizza l’annotazione sull’account di servizio.
-
Esegui il comando seguente per creare l'associazione. Sostituisci
my-clustercon il nome del cluster,my-service-accountcon il nome desiderato edefaultcon uno spazio dei nomi 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-accountDi 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
È possibile specificare un namespace 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.
-
Confermare la configurazione
-
Conferma che la policy di attendibilità del ruolo IAM sia configurata correttamente.
aws iam get-role --role-name my-role --query Role.AssumeRolePolicyDocumentDi 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" ] } ] } -
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 textDi seguito viene riportato un output di esempio:
arn:aws:iam::111122223333:policy/my-policy -
Imposta una variabile per memorizzare il nome della risorsa Amazon (ARN) della policy che desideri utilizzare. Sostituisci
my-policycon il nome della policy per la quale desideri confermare le autorizzazioni.export policy_arn=arn:aws:iam::111122223333:policy/my-policy -
Visualizza la versione predefinita della policy.
aws iam get-policy --policy-arn $policy_arnDi seguito viene riportato un output di esempio:
{ "Policy": { "PolicyName": "my-policy", "PolicyId": "EXAMPLEBIOWGLDEXAMPLE", "Arn": "arn:aws:iam::111122223333:policy/my-policy", "Path": "/", "DefaultVersionId": "v1", [...] } } -
Visualizza il contenuto della policy per assicurarti che la policy includa tutte le autorizzazioni di cui i pod hanno bisogno. Se necessario, sostituisci
1nel comando seguente con la versione restituita nell’output precedente.aws iam get-policy-version --policy-arn $policy_arn --version-id v1Di 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 policy diversa, allora il contenuto dell'
esempioè diverso.
Fasi successive
Configurazione dei pod per accedere ai servizi AWS con un account di servizio