<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

Presigned URL

Presigned URL в S3 позволяет временно предоставить доступ к объекту в хранилище без необходимости изменять права доступа на объект. Это удобный инструмент для скачивания файлов сторонними пользователями. В статье рассмотрим, как создать Presigned URL двумя способами: через панель управления и с использованием AWS CLI.

Через панель управления

Генерация Presigned URL доступна только для приватных бакетов. Чтобы сгенерировать Presigned URL, перейдите в раздел «Объекты» в нужном бакете. Наведите курсор на объект, для которого требуется создать ссылку, и нажмите на кнопку «Ссылка на файл». 

Selection 143

Ссылка будет скопирована в буфер обмена и активна в течение 60 минут. После истечения этого времени при попытке перехода по ссылке будет возвращаться ошибка 403. В панели управления нельзя изменить продолжительность времени, на протяжении которого ссылка будет активна.

Через AWS CLI

Создать Presigned URL с помощью AWS CLI можно с помощью команды:

aws s3 presign s3://<бакет>/<объект> --expires-in 60 --endpoint-url https://s3.twcstorage.ru

Параметр --expires-in необязателен. Он определяет время доступности объекта по ссылке в секундах. Если параметр не указан, объект будет доступен в течение 3600 секунд (1 час).

Генерация Presigned URL до загрузки объекта

Вы можете заранее сгенерировать ссылку для загрузки объекта — даже если сам объект еще не существует в бакете. 

Стандартные утилиты вроде AWS CLI не поддерживают генерацию Presigned URL для загрузки, однако это можно реализовать с помощью SDK. Например, через boto3 для Python.

Пример скрипта:

import boto3
from botocore.client import Config

# Укажите на ваши данные
AWS_ACCESS_KEY_ID = 'S3 Access Key'
AWS_SECRET_ACCESS_KEY = 'S3 Secret Access Key'
BUCKET_NAME = 'Имя бакета'
OBJECT_KEY = 'example.txt'  # имя будущего объекта
EXPIRES_IN = 3600  # срок действия ссылки в секундах

s3 = boto3.client(
    's3',
    endpoint_url='https://s3.twcstorage.ru',
    aws_access_key_id=AWS_ACCESS_KEY_ID,
    aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
    config=Config(signature_version='s3v4'),
    region_name='ru-1'
)

# Генерация presigned URL
url = s3.generate_presigned_url(
    ClientMethod='put_object',
    Params={
        'Bucket': BUCKET_NAME,
        'Key': OBJECT_KEY,
    },
    ExpiresIn=EXPIRES_IN
)

print(url)

Указывать Content-Type при генерации ссылки не нужно, так как его передача может привести к ошибке.

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

Загрузить файл можно с помощью curl:

curl -X PUT -T путь/до/загружаемого_файла.txt -H "Content-Type: text/plain" "ссылка_полученная_при_выполнении_скрипта"
Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев