s3 Предписанные URL-адреса без политики корзины не работают - PullRequest
0 голосов
/ 19 ноября 2018

Вот что я пробовал.

Лямбда-код:

import uuid

import boto3


def lambda_handler(event, context):
    # Get the service client.
    s3 = boto3.client('s3')

    # Generate a random S3 key name
    upload_key = uuid.uuid4().hex

    # Generate the presigned URL for put requests
    presigned_url = s3.generate_presigned_url(
        ClientMethod='put_object',
        Params={
            'Bucket': 'test',
            'Key': upload_key,
            'ContentType': 'image/png',
            'ACL': 'public-read'
        }
    )

    # Return the presigned URL
    return {
        "upload_url": presigned_url
    }

Политика CORS для корзины s3

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <ExposeHeader>ETag</ExposeHeader>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

Я пытался загрузить объекты из curlкоманда

curl -v -H "Content-Type:image/png" -H "public-read" --upload-file ~/Downloads/newlogo.png "presignedurl"

если для корзины предоставлен публичный доступ на запись, я могу успешно загрузить объекты в s3, если нет, я получаю отказано в доступе. 403 исключения. Я прошел большую часть сообщения StackOverflow, не в состоянии.Чтобы выяснить проблему, пожалуйста, сообщите мне, что любая помощь высоко ценится

Я также планирую использовать ее для веб-сайта, который загружает мультимедийные файлы в корзину s3 с использованием предварительно подписанных URL-адресов. Что является лучшим способом справиться?аутентификация для него?

Ошибка, которую я получаю

<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>73881648C31D9316</RequestId><HostId>g4BuDVC7XZKLkAwpvztjqDC4GW9y5s9nk+vu1TsLQBl2XeXQOtOeFR+0hmJn0fjW5xkYeAE3pfA=</HostId></Error>

1 Ответ

0 голосов
/ 19 ноября 2018

Когда вы создаете предварительно подписанный URL-адрес для объекта S3 put (или любого другого вызова API), в котором подписанный запрос использует учетные данные, с которыми настроен SDK, в данном случае роль вашей лямбды.Дайте IAM-роли вашей Lambda доступ для записи в эту корзину s3, и ваши загрузки будут успешными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...