Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Como uso o IRSA no Amazon EKS para restringir o acesso a um bucket do Amazon S3?
Quero restringir o acesso de um bucket do Amazon Simple Storage Service (Amazon S3) no nível do pod no Amazon Elastic Kubernetes Service (Amazon EKS). Também quero manter as permissões mínimas para a minha aplicação com perfis do AWS Identity and Access Management (AWS IAM) para contas de serviço (IRSA).
Resolução
Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Pré-requisitos: Crie um provedor IAM OpenID Connect (OIDC) para seu cluster.
Crie uma política e um perfil do IAM
Conclua as seguintes etapas:
- Crie um arquivo JSON chamado iam-policy.json. Exemplo de política:
Observação: Substitua YOUR_BUCKET pelo seu bucket do S3. O exemplo anterior de política restringe as permissões do Amazon S3 para que os usuários do IAM só possam listar e recuperar objetos de um bucket do 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/*" } ] }
- Para criar a política do IAM, execute o seguinte comando create-policy da AWS CLI:
Observação: substitua YOUR_IAM_POLICY_NAME pelo nome da sua política.aws iam create-policy \ --policy-name YOUR_IAM_POLICY_NAME \ --policy-document file://iam-policy.json
- Crie um perfil do IAM e associe-a à sua conta da AWS do serviço de cluster.
- Confirme se você configurou corretamente a política e a perfil do IAM.
- (Opcional) Para obter o nome do perfil, execute o seguinte comando:
Observação: substitua SERVICE_ACCOUNT_NAME pelo nome da sua conta de serviço e NAMESPACE_NAME pelo nome do seu namespace.kubectl get sa SERVICE_ACCOUNT_NAME -n NAMESPACE_NAME -o yaml | grep eks.amazonaws.com/role-arn | cut -d '/' -f 3
Exemplo de saída:eksctl-EKS-LAB-addon-iamserviceaccount-defau-Role1-ASA1UEXAMPLE
Crie um pod do Amazon EKS
Confirme se seu pod pode assumir o perfil do IAM com as permissões corretas. Conclua as etapas a seguir para substituir sua aplicação por uma imagem oficial na AWS CLI:
- Crie um arquivo YAML chamado aws-cli-pod.yaml. Arquivo de exemplo:
Observação: substitua NAMESPACE_NAME pelo seu namespace e SERVICE_ACCOUNT_NAME pelo nome da sua conta de serviço do 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
- Para criar um pod Amazon EKS, execute o seguinte comando:
kubectl apply -f ./aws-cli-pod.yaml
Teste seu pod do Amazon EKS
Observação: no exemplo a seguir, o pod pode listar e obter objetos do bucket YOUR_BUCKET S3.
Para confirmar que seu pod usa o perfil e as ações corretas do IAM para o Amazon S3, conclua as seguintes etapas:
-
Para encontrar o perfil do IAM que usa as credenciais, execute o seguinte comando:
kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws sts get-caller-identity
Observação: Substitua NAMESPACE_NAME pelo nome do seu namespace.
Exemplo de saída:{ "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" }
-
Verifique se seu pod tem as permissões corretas para seu bucket do S3.
Para verificar se seu pod tem permissões s3:ListBuckets, execute o seguinte comando:kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws s3 ls s3://YOUR_BUCKET
Observação: substitua NAMESPACE_NAME pelo nome do seu namespace e YOUR_BUCKET pelo seu bucket.
Exemplo de saída:2025-03-25 22:28:06 14 hello_s3.txt
Para verificar se seu pod tem permissões s3:GetObject, execute o seguinte comando:
kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws s3api get-object --bucket YOUR_BUCKET --key DIR/S3_OBJECT_FILE S3_FILE_NAME_LOCAL
Observação: substitua NAMESPACE_NAME pelo nome do seu namespace e YOUR_BUCKET pelo seu bucket. Além disso, substitua DIR/S3_OBJECT_FILE pelo nome do arquivo do diretório e do objeto e S3_FILE_NAME_LOCAL pelo novo objeto local do Amazon S3.
Exemplo de saída:{ "AcceptRanges": "bytes", "LastModified": "2025-03-14T01:49:38+00:00", "ContentLength": 19, "ETag": "\"678b33365329cce6cd2bb1882e62fe3a\"", "ContentType": "text/plain", "ServerSideEncryption": "AES256", "Metadata": {} }
-
Para verificar se seu pod não tem permissões s3:DeleteObject, execute o seguinte comando:
kubectl -n NAMESPACE_NAME exec -it aws-cli -- aws s3 rm s3://YOUR_BUCKET/DEMO_TEST_FILE
Observação: substitua NAMESPACE_NAME pelo nome do seu namespace e YOUR_BUCKET pelo seu bucket. Além disso, substitua DEMO_TEST_FILE pelo seu arquivo de objeto do Amazon S3.
Se o pod não tiver permissões s3:DeleteObject, você receberá o erro Acesso Negado na saída: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
Solucionar problemas
Importante: Sempre crie novos pods depois de fazer alterações. O Amazon EKS reflete as atualizações somente nos pods recém-criados, não nos existentes.
Erro NoSuchBucket
Se você não conseguir encontrar o bucket do S3 porque ele não existe, você receberá o seguinte erro:
“An error occurred (NoSuchBucket) when calling the ListObjectsV2 operation: The specified bucket does not exist command terminated with exit code 254”
Para solucionar esse problema, certifique-se de usar o nome correto do bucket do S3 em seus comandos.
Erro NoSuchKey
Se você não conseguir fazer o download de um caminho de bucket específico do S3, receberá o seguinte erro:
“An error occurred (NoSuchKey) when calling the GetObject operation: The specified key does not exist.”
Para solucionar esse problema, verifique se o caminho e o nome do arquivo do Amazon S3 existem na sua conta da AWS.
Erros de acesso negado
Se você não tiver permissões para realizar uma ação no bucket do S3, receberá um erro. Por exemplo, o erro a seguir ocorre se você não conseguir executar a ação 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”
Para solucionar esse problema, certifique-se de ter adicionado a permissão à sua política de perfil do IAM.
Se houver um erro no provedor de identidade do IAM, você receberá o seguinte erro:
“An error occurred (AccessDenied) when calling the AssumeRoleWithWebIdentity operation: Not authorized to perform sts:AssumeRoleWithWebIdentity command terminated with exit code 254”
Para solucionar esse problema, confirme as seguintes configurações:
- O provedor IAM OIDC para seu cluster está configurado corretamente.
- A relação de confiança do perfil do IAM está configurada corretamente.
- A conta de serviço usa o perfil correto do IAM.
Erro InvalidIdentityToken
Se o Amazon EKS não conseguir encontrar o provedor de OIDC em sua conta, você receberá o seguinte erro:
“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”
Para solucionar esse problema, verifique se o provedor de identidade do OIDC existe no IAM.
Informações relacionadas
Teste de política do IAM com o simulador de políticas do IAM

Conteúdo relevante
- feita há um mêslg...
- feita há 2 meseslg...
- feita há um mêslg...
- feita há 3 meseslg...
- AWS OFICIALAtualizada há um ano