Поделитесь частным файлом через временную ссылку

AWSBeginner
Практиковаться сейчас

Введение

Коллеге нужно временно скачать частный отчёт. Вы создадите и проверите подписанную ссылку, проверите границы её доступа и удалите учебные ресурсы, не делая файл общедоступным.

Сначала выполните работу Упорядочьте документы с помощью ключей и метаданных, чтобы освоить ключи, скачивание и очистку. Частный бакет и ограниченная идентичность подготовлены в этой новой 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.