1
resposta

Estou tendo um erro ao tentar listar as imagens - acesso negado

botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied

Estou tendo esse erro ao tentar executar o código para listar as imagens. Já tentei alterar a política de acesso do S3, mas sem sucesso. Alguém tem um exemplo dessa política de acesso ou ideia do motivo do erro?

1 resposta

Olá Rosicleia, tudo bem? Peço desculpas pela demora em ti responder! Mas em qual parte do curso você está? Quais os passos que já fez até o momento? De ante mão, acho que seu problema é o mesmo que o Matheus e a Ana enfrentaram, como foi relatado nesse outro tópico, bem a solução nesse caso é a seguinte:

Criar variáveis de ambientes e indicar dentro do arquivo, eu particularmente usei essa abordagem, porque estava usando o Python com um container Docker já que não queria instalar diretamente na minha máquina, então deixei meu arquivo da seguinte forma: Primeiro defini pelo docker-compose as variáveis de ambientes:

version: '3'

services:
  web:
    image: jonilsonds9/python-teste:v2
    ports:
      - "7000:7000"
    volumes:
      - .:/usr/src/app
    environment:
    - AWS_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXX
    - AWS_SECRET_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    - AWS_REGION=us-east-1

E então usei as variaveis fazendo o uso da instrução import os, e depois setando as mesmas diretamente na linha s3 = boto3.resource('s3'), como você podem ver abaixo:

import os
import boto3

s3 = boto3.resource('s3',region_name=os.environ['AWS_REGION'],aws_access_key_id=os.environ['AWS_ACCESS_KEY'],aws_secret_access_key=os.environ['AWS_SECRET_KEY'])

def lista_imagens():
    imagens=[]
    bucket = s3.Bucket('fa-imagens-js')
    for imagem in bucket.objects.all():
        imagens.append(imagem.key)
    print(imagens)
    return imagens

imagens = lista_imagens()

Isso deve resolver esse problema!