Я пытался написать небольшой скрипт для загрузки в lambda / tmp всего содержимого папки S3. Для этого мне нужно перечислить все объекты в определенном ведре. К сожалению, я продолжаю получать следующую ошибку:
An error occurred (403) when calling the HeadObject operation: Forbidden
Вот как я пытаюсь загрузить все файлы из папки:
#initialize S3
try:
s3 = boto3.resource('s3',
aws_access_key_id=os.getenv('S3USERACCESSKEY'),
aws_secret_access_key=os.getenv('S3USERSECRETKEY')
)
s3_client = boto3.client('s3',
aws_access_key_id=os.getenv('S3USERACCESSKEY'),
aws_secret_access_key=os.getenv('S3USERSECRETKEY')
)
except Exception as e:
logger.error("Could not connect to s3 bucket: " + str(e))
#Function to download whole folders from s3
for s3_key in s3_client.list_objects(Bucket=os.getenv('S3BUCKETNAME'))['Contents']:
s3_object = s3_key['Key']
if not s3_object.endswith("/"):
s3_client.download_file('bucket', s3_object, s3_object)
else:
import os
if not os.path.exists(s3_object):
os.makedirs(s3_object)
Указанные выше ключи доступа имеют полные права администратора:
EDIT
Все еще безуспешно после удаления моих ручных ключей, вот право, которое я прикрепил к Lambda:
Вот фактическая ошибка из cloudwatch:
Код теперь выглядит так:
#initialize S3
try:
s3 = boto3.resource('s3')
s3_client = boto3.client('s3')
except Exception as e:
[....]
Похоже, что "Запрещено" может быть другой проблемой, чем разрешение, но я не могу найти на нем никакого документа.