Come posso utilizzare IRSA in Amazon EKS per limitare l'accesso a un bucket Amazon S3?
Desidero limitare l'accesso al bucket Amazon Simple Storage Service (Amazon S3) a livello di Pod in Amazon Elastic Kubernetes Service (Amazon EKS). Desidero inoltre mantenere le autorizzazioni minime per la mia applicazione con i ruoli AWS Identity and Access Management (AWS IAM) per gli account di servizio (IRSA).
Risoluzione
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Prerequisiti: crea un provider di identità IAM OpenID Connect (OIDC) per il cluster..
Crea una policy e un ruolo IAM
Completa i seguenti passaggi:
- Crea un file JSON denominato iam-policy.json. Esempio di policy:
Nota: sostituisci YOUR_BUCKET con il nome del tuo bucket S3. L'esempio di policy precedente limita le autorizzazioni di Amazon S3 in modo che gli utenti IAM possano elencare e recuperare oggetti solo da un bucket S3.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::YOUR_BUCKET" }, { "Sid": "List", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::YOUR_BUCKET/*" } ] } - Per creare la policy IAM, esegui questo comando AWS CLI create-policy:
Nota: sostituisci YOUR_IAM_POLICY_NAME con il nome della tua policy.aws iam create-policy \ --policy-name YOUR_IAM_POLICY_NAME \ --policy-document file://iam-policy.json - Crea un ruolo IAM e associalo all'account AWS di servizio del cluster.
- Verifica di aver configurato correttamente la policy e il ruolo IAM.
- (Facoltativo) Per ottenere il nome del ruolo, esegui questo comando:
Nota: sostituisci SERVICE_ACCOUNT_NAME con il nome del tuo account di servizio e NAMESPACE_NAME con il nome del tuo namespace.kubectl get sa SERVICE_ACCOUNT_NAME -n NAMESPACE_NAME -o yaml | grep eks.amazonaws.com/role-arn | cut -d '/' -f 3
Esempio di output:eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE
Crea un Pod Amazon EKS
Verifica che il Pod possa assumere il ruolo IAM con le autorizzazioni corrette. Completa i seguenti passaggi per sostituire l'applicazione con un'immagine ufficiale in AWS CLI:
- Crea un file YAML denominato aws-cli-pod.yaml. Esempio di file:
Nota: sostituisci NAMESPACE_NAME con il tuo namespace e SERVICE_ACCOUNT_NAME con il nome del tuo account di servizio Kubernetes.apiVersion: v1 kind: Pod metadata: name: aws-cli namespace: NAMESPACE_NAME spec: serviceAccountName: SERVICE_ACCOUNT_NAME containers: - name: aws-cli image: amazon/aws-cli:latest command: - sleep - "3600" imagePullPolicy: IfNotPresent restartPolicy: Always - Per creare un Pod Amazon EKS, esegui questo comando:
kubectl apply -f ./aws-cli-pod.yaml
Testa il Pod Amazon EKS
Nota: nell'esempio seguente, il Pod può elencare e ottenere oggetti dal bucket S3 YOUR_BUCKET.
Per verificare che il Pod utilizzi le azioni e il ruolo IAM corretti per Amazon S3, completa i seguenti passaggi:
-
Per individuare il ruolo IAM che utilizza le credenziali, esegui questo comando:
kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws sts get-caller-identityNota: sostituisci NAMESPACE_NAME con il nome del tuo namespace.
Esempio di output:{ "UserId": "AIDACKCEVSQ6C2EXAMPLE:botocore-session-123456789012", "Account": "123456789012", "Arn": "arn:aws:sts::123456789012:assumed-role/eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE/botocore-session-123456789012" } -
Verifica che il Pod disponga delle autorizzazioni corrette per il bucket S3.
Per verificare che il Pod disponga delle autorizzazioni s3:ListBuckets, esegui questo comando:kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws s3 ls s3://YOUR_BUCKETNota: sostituisci NAMESPACE_NAME con il nome del tuo namespace e YOUR_BUCKET con il tuo bucket.
Esempio di output:2025-03-25 22:28:06 14 hello_s3.txtPer verificare che il Pod disponga delle autorizzazioni s3:GetObject, esegui questo comando:
kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws s3api get-object --bucket YOUR_BUCKET --key DIR/S3_OBJECT_FILE S3_FILE_NAME_LOCALNota: sostituisci NAMESPACE_NAME con il nome del tuo namespace e YOUR_BUCKET con il tuo bucket. Inoltre, sostituisci DIR/S3_OBJECT_FILE con la directory e il nome del file dell'oggetto e S3_FILE_NAME_LOCAL con il nuovo oggetto Amazon S3 locale.
Esempio di output:{ "AcceptRanges": "bytes", "LastModified": "2025-03-14T01:49:38+00:00", "ContentLength": 19, "ETag": "\"678b33365329cce6cd2bb1882e62fe3a\"", "ContentType": "text/plain", "ServerSideEncryption": "AES256", "Metadata": {} } -
Per verificare che il Pod non disponga delle autorizzazioni s3:DeleteObject, esegui questo comando:
kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws s3 rm s3://YOUR_BUCKET/DEMO_TEST_FILENota: sostituisci NAMESPACE_NAME con il nome del tuo namespace e YOUR_BUCKET con il tuo bucket. Inoltre, sostituisci DEMO_TEST_FILE con il file del tuo oggetto Amazon S3.
Se il Pod non dispone delle autorizzazioni s3:DeleteObject, nell'output viene visualizzato il seguente errore Access Denied:delete failed: s3://YOUR_BUCKET/DEMO_TEST_FILE An error occurred (AccessDenied) when calling the DeleteObject operation: User: arn:aws:sts::123456789012:assumed-role/eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE/botocore-session-123456789012 is not authorized to perform: s3:DeleteObject on resource: "arn:aws:s3:::YOUR_BUCKET/DEMO_TEST_FILE" because no identity-based policy allows the s3:DeleteObject action command terminated with exit code 1
Risolvi i problemi
Importante: crea sempre nuovi Pod dopo aver apportato le modifiche. Amazon EKS riflette gli aggiornamenti solo nei Pod appena creati, non in quelli esistenti.
Errore NoSuchBucket
Se non riesci a trovare il bucket S3 perché non esiste, ricevi il seguente errore:
"An error occurred (NoSuchBucket) when calling the ListObjectsV2 operation: The specified bucket does not exist command terminated with exit code 254"
Per risolvere il problema, assicurati di utilizzare il nome corretto del bucket S3 nei comandi.
Errore NoSuchKey
Se non riesci a scaricare da un percorso specifico del bucket S3, ricevi il seguente errore:
"An error occurred (NoSuchKey) when calling the GetObject operation: The specified key does not exist."
Per risolvere il problema, verifica che il percorso e il nome del file Amazon S3 esistano nell'account AWS.
Errori AccessDenied
Se non disponi delle autorizzazioni per eseguire un'azione sul bucket S3, ricevi un errore. Ad esempio, il seguente errore si verifica se non puoi eseguire l'azione ListObjectsV2:
"An error occurred (AccessDenied) when calling the ListObjectsV2 operation: User: arn:aws:sts::123456789012:assumed-role/eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE/botocore-session-123456789012 is not authorized to perform: s3:ListBucket on resource: "arn:aws:s3:::YOUR_BUCKET" because no identity-based policy allows the s3:ListBucket action command terminated with exit code 254"
Per risolvere il problema, assicurati di aver aggiunto l'autorizzazione alla policy del ruolo IAM.
Se è presente un errore riguardante il provider di identità IAM, ricevi il seguente errore:
"An error occurred (AccessDenied) when calling the AssumeRoleWithWebIdentity operation: Not authorized to perform sts:AssumeRoleWithWebIdentity command terminated with exit code 254"
Per risolvere il problema, verifica le seguenti configurazioni:
- Il provider IAM OIDC per il cluster è configurato correttamente.
- La relazione di attendibilità del ruolo IAM è configurata correttamente.
- L'account di servizio utilizza il ruolo IAM corretto.
Errore InvalidIdentityToken
Se Amazon EKS non riesce a trovare il provider OIDC dell'account, ricevi il seguente errore:
"An error occurred (InvalidIdentityToken) when calling the AssumeRoleWithWebIdentity operation: No OpenIDConnect provider found in your account for https://oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE command terminated with exit code 254"
Per risolvere il problema, verifica che in IAM esista il provider di identità per il protocollo OIDC.
Informazioni correlate
- Argomenti
- Containers
- Lingua
- Italiano

Contenuto pertinente
AWS UFFICIALEAggiornata 2 anni fa