Как создать предварительно назначенный URL-адрес S3 через интерфейс командной строки AWS

Есть ли способ создать предопределенный URL-адрес для объектов в корзине S3 с помощью AWS CLI?

Я знаю, что это можно сделать с помощью SDK, но возможно ли это с помощью CLI?

Я нашел это в одном из документов AWS, но не могу выполнить команду:

s3cmd signurl s3://BUCKET/OBJECT <expiry_epoch|+expiry_offset>

Любая помощь?

Ответ 1

Вы попробовали aws s3 presign?

Создайте предварительно подписанный URL-адрес для объекта Amazon S3. Это позволяет любому который получает предварительно подписанный URL-адрес для извлечения объекта S3 с помощью HTTP GET запрос. Для запросов sigv4 необходимо настроить регион в явном виде.

Это приведет к созданию URL-адреса, срок действия которого истекает через 3600 секунд (по умолчанию)

aws s3 presign s3://mybucket/myobject

Это приведет к созданию URL-адреса, срок действия которого истекает через 300 секунд.

aws s3 presign s3://mybucket/myobject  --expires-in 300

Выход

https://mybucket.s3.amazonaws.com/myobject?AWSAccessKeyId=AKIAJXXXXXXXXXXXXXXX&Expires=1503602631&Signature=ibOGfAovnhIF13DALdAgsdtg2s%3D

Ответ 2

Подстановочные знаки теперь поддерживаются.

Например, aws s3 presign s3://mybucket/*

Ответ 3

Таким образом, команда для предварительно подписанного URL:

aws s3 presign s3://bucket-address/  --expires-in 300

Но оговорка такова; мы можем иметь предварительно подписанный URL-адрес, который работает для отдельного уровня файлов/объектов, а не на уровне каталогов.

Счастлив, если вас исправит.

Ответ 4

@Майкл и @Шаббир,

Да, aws s3 presign не принимает глобинговые символы/символы подстановки /, --include, --exclude или --recursive'. aws --recursive'. aws ls does not accept -1 ; it behaves as ; it behaves as ls -lp or ls -lp h '.

петля работает:

for file in $(aws s3 ls s3://mybucket --profile myprofile \
--endpoint-url <my-endpoint> | awk '{print $NF}'); do
    aws s3 presign --expires-in 300 "s3://mybucket/$file" |
    --profile my-profile --endpoint-url <my-endpoint>
done

Ответ 5

если вы делаете aws s3 presign s3://bucket-address/my-file.csv

Вы получите обратно URL. Затем, когда вы передадите его в wget убедитесь, что вы завернули его апострофами.

wget 'https://bucket-address.s3.aws.com/xbxxxxxxxxxxxxxxx'

если вы просто обойдетесь без апострофов, вы получите 403 wget https://bucket-address.s3.aws.com/xbxxxxxxxxxxxxxxx

Я описываю больше в https://blog.eq8.eu/til/transfer-file-to-server.html