Введение
Коллеге нужно временно скачать частный отчёт. Вы создадите и проверите подписанную ссылку, проверите границы её доступа и удалите учебные ресурсы, не делая файл общедоступным.
Сначала выполните работу Упорядочьте документы с помощью ключей и метаданных, чтобы освоить ключи, скачивание и очистку. Частный бакет и ограниченная идентичность подготовлены в этой новой VM; личный вход или написание политик IAM не нужны. Используйте Terminal и расположенную рядом вкладку AWS View. Не раскрывайте полные ссылки для скачивания.
Связь с сертификацией
Эта лабораторная работа помогает на практике изучить следующие темы экзаменов.
- Solutions Architect – Associate (SAA-C03) · Задача 1.1: Ограниченный по времени доступ к S3 через предварительно подписанные URL.
- Developer – Associate (DVA-C02) · Задача 2.1: Ограниченный по времени доступ к S3 через предварительно подписанные URL.
- Security – Specialty (SCS-C03) · Задача 4.1: Базовая практика: Ограниченный по времени доступ к S3 через предварительно подписанные URL.
Прочитайте отчёт с настроенной идентичностью
На этом шаге вы получите разрешённый отчёт и увидите, что другой частный объект остаётся за пределами разрешений вашей идентичности.
Разрешение определяет, что идентичность может делать с ресурсом. Подготовленный читатель может перечислять этот бакет и читать shared/report.txt, но не может читать private/payroll.txt или менять хранилище. Вы будете использовать эти разрешения, а не писать политики; курс IAM обучает этому позже.
Перейдите в рабочий каталог с помощью cd (change directory — сменить каталог):
cd /home/labex/project
Выведите общий префикс подготовленного бакета:
aws s3 ls s3://labex-private-documents/shared/
Список содержит строку, заканчивающуюся на report.txt; под этим префиксом она относится к полному ключу shared/report.txt. Префикс упорядочивает ключ; его имя не делает объект общедоступным. Ваш запрос AWS CLI успешен, поскольку настроенной идентичности разрешено перечислять бакет.
Скачайте отчёт аутентифицированным запросом AWS CLI:
aws s3 cp s3://labex-private-documents/shared/report.txt authorized-report.txt
Изучите этот синтетический отчёт с помощью cat, который выводит локальный текстовый файл:
cat authorized-report.txt
Monthly report: 42000 revenue
В AWS View откройте shared/report.txt. Предварительный просмотр показывает то же сохранённое содержимое, используя разрешённый доступ читателя.

Этот пример показывает отчёт, доступный настроенному читателю. Команды скачивания на следующем шаге проверяют саму временную ссылку.
Попробуйте прочитать отдельный объект payroll:
aws s3 cp s3://labex-private-documents/private/payroll.txt denied-payroll.txt
Ожидается, что эта команда завершится ошибкой 403 или AccessDenied. Объект существует, но этому читателю не разрешено его получать. Доступ идентичности к одному отчёту не даёт ей доступа ко всем объектам бакета. Вы поделитесь только разрешённым отчётом.
Создайте и используйте временную ссылку для скачивания
На этом шаге вы создадите подписанную ссылку и скачаете отчёт HTTP-клиентом вместо использования идентичности AWS в принимающем запросе.
Временная ссылка позволяет разрешённое скачивание до конца её срока действия.

Предварительно подписанный URL — это ссылка, содержащая подпись и время истечения срока. Она позволяет получателю выполнить разрешённое скачивание, не получая ваши учётные данные AWS. Файлы ссылок подготовлены с ограниченными разрешениями; не раскрывайте их полное содержимое.
aws s3 presign создаёт URL, разрешающий скачивание указанного объекта. --expires-in задаёт запрошенный срок действия в секундах; 600 означает десять минут с момента создания. Это не меняет разрешения доступа к объекту. Оператор оболочки > записывает вывод в уже защищённый локальный файл вместо отображения полной ссылки:
aws s3 presign s3://labex-private-documents/shared/report.txt --expires-in 600 > download-link.txt
Команда ничего не выводит, поскольку её вывод направлен в файл. Любой обладатель этого URL может использовать делегированный доступ, пока он действителен, поэтому не включайте полную ссылку в скриншоты и публичные сообщения.
Прочитайте ссылку в переменную оболочки, не выводя её. $(...) захватывает вывод команды; cat читает файл, а DOWNLOAD_URL=... присваивает захваченный текст. Вокруг = присваивания нет пробелов:
DOWNLOAD_URL=$(cat download-link.txt)
curl выполняет HTTP-запрос. -f сообщает об ответах HTTP с ошибкой как о неудаче, -sS скрывает индикатор прогресса, сохраняя сообщения об ошибках, а -o записывает тело ответа в локальный файл. Двойные кавычки сохраняют весь URL одним аргументом, включая параметры запроса:
curl -fsS "$DOWNLOAD_URL" -o shared-download.txt
Curl не получает учётные данные AWS или профиль; сам URL несёт подпись, необходимую для этого скачивания. Прочитайте результат:
cat shared-download.txt
Monthly report: 42000 revenue
cmp сравнивает два файла байт за байтом. && выводит сообщение только при успешном сравнении:
cmp authorized-report.txt shared-download.txt && echo 'Temporary-link download matches'
Сообщение подтверждает, что скачанный по HTTP файл содержит тот же отчёт. Одно лишь создание ссылки не доказывает, что она работает; этот запрос проверяет фактическое разрешение, подпись и сохранённые байты. Если до скачивания прошло больше десяти минут, создайте свежую ссылку и заново загрузите переменную двумя командами выше.
Проверьте истечение срока ссылки
На этом шаге вы увидите ограничение времени общей ссылки. Десятиминутная ссылка была удобна для успешного скачивания; отдельная короткоживущая ссылка позволяет быстро увидеть истечение срока.
Создайте ещё одну ссылку с намеренно коротким сроком в пятнадцать секунд, сохранив её во втором защищённом файле:
aws s3 presign s3://labex-private-documents/shared/report.txt --expires-in 15 > short-link.txt
Захватите её, не отображая:
SHORT_URL=$(cat short-link.txt)
sleep ждёт указанное число секунд. Подождите шестнадцать секунд, чтобы выйти за пределы запрошенного срока этой короткой ссылки:
sleep 16
Снова используйте исходную короткую ссылку, не создавая замену. Здесь -s скрывает индикатор прогресса, -o сохраняет тело ответа, а -w выводит только статус HTTP. %{http_code} — поле статуса curl, а \n завершает строку. Мы опускаем -f, чтобы вы могли изучить отказ:
curl -s -o expired-response.xml -w '%{http_code}\n' "$SHORT_URL"
Ожидаемый статус: 403. Файл по-прежнему существует, и ваша идентичность всё ещё может его читать, но временное окно делегированного URL закончилось. Тело ответа XML объясняет просроченный запрос; вы можете безопасно изучить этот ответ, поскольку он не содержит ссылку:
cat expired-response.xml
Его Code — AccessDenied, а Message — Request has expired. Это устанавливает причину отказа; сбой подключения не доказал бы истечение срока.
Выполните очистку с подготовленной идентичностью обслуживания
На этом шаге вы удалите объекты и бакет работы с помощью подготовленной идентичности обслуживания.
У читателя по умолчанию намеренно нет разрешений удаления. Профиль AWS CLI — именованная конфигурация, выбирающая идентичность и настройки сервиса. Подготовленному профилю cleanup разрешено удалять ресурсы этого упражнения. --profile cleanup выбирает его для следующих команд; вы не вводите и не изучаете учётные данные.
Удалите общий отчёт по точному ключу:
aws --profile cleanup s3 rm s3://labex-private-documents/shared/report.txt
Удалите другой временный подготовленный объект также по точному ключу:
aws --profile cleanup s3 rm s3://labex-private-documents/private/payroll.txt
Оба сообщения удаления называют нужные объекты. Подтвердите пустоту бакета аутентифицированным списком:
aws --profile cleanup s3 ls s3://labex-private-documents/ --recursive
Успешная команда не выводит строк объектов. Удалите пустой бакет:
aws --profile cleanup s3 rb s3://labex-private-documents
Вывод — remove_bucket: labex-private-documents. Подтвердите оставшиеся бакеты:
aws --profile cleanup s3 ls
Строк бакетов не осталось, и AWS View показывает No buckets. Ссылка для скачивания не может выдать удалённый файл. Защищённые локальные файлы URL также можно удалить локальным rm, поскольку они больше не нужны:
rm download-link.txt short-link.txt
Скачанные копии отчёта остаются для просмотра. Удаление хранилища, истечение срока ссылки и очистка локальных файлов — разные операции; вы выполнили каждую нужную часть этого упражнения.
Резюме
Вы получили разрешённый частный отчёт, увидели отказ чтения другого объекта, создали временный URL скачивания и сравнили скачанный по HTTP файл с аутентифицированной копией. Затем вы проверили, что короткоживущая ссылка отклоняется после истечения срока.
Предварительно подписанный URL делегирует операцию, уже разрешённую подписывающей идентичности; он не делает объект общедоступным и не обходит разрешения. Обращайтесь с полной ссылкой как с временным секретом доступа. В завершение вы использовали отдельный профиль обслуживания для удаления объектов работы, бакета и локальных файлов URL.



