Введение
Сохранённый отчёт нужно передать получателю с контролируемым доступом. Используйте подготовленную учётную запись читателя для передачи одного закрытого отчёта по временной подписанной ссылке, проверьте скачивание и отказ после истечения срока. Написание политик изучается далее в IAM.
Сначала выполните работу Упорядочьте документы с помощью ключей и метаданных, чтобы освоить ключи, скачивание и очистку. Частный бакет и ограниченная идентичность подготовлены в этой новой 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.
При подписи временными учётными данными URL перестаёт действовать после их истечения, даже если для ссылки запрошен более длительный срок. Подробнее см. в документации AWS: Разрешения и срок действия предподписанных URL.



