Как создать предварительно назначенный 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