Подключите сайт к закрытым изображениям S3

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

Введение

Назначьте EC2 подготовленную роль, проверьте реальное чтение закрытой картинки и удалите связь.

Сначала выполните предыдущие работы портфолио. Среда предоставляет собственные ресурсы и необходимые возможности прежних этапов. Переносите знания, а не экземпляры, файлы или учётные данные.

Связь с сертификацией

Сертификация Задачи Практика
AWS Certified Cloud Practitioner (CLF-C02) Task 2.3 Дать сайту роль экземпляра для чтения четырёх определённых объектов.

Обзор

Назначьте EC2 подготовленную роль, проверьте реальное чтение закрытой картинки и удалите связь.

Поймите недостающее разрешение

На этом шаге вы изучите объект и политику до назначения роли. Откройте сайт: текст доступен, картинка нет. Роль IAM даёт идентичность и права, instance profile связывает её с EC2. Оба называются portfolio-reader.

Перейдите в проект.

cd /home/labex/project

Загрузите и покажите bucket этой среды.

source website.env
echo "$PORTFOLIO_BUCKET"

Подтвердите images/aura-brand.webp в Contents. У Terminal собственная идентичность; приложение не наследует её права.

aws s3api list-objects-v2 --bucket "$PORTFOLIO_BUCKET"

Политика разрешает s3:GetObject. Массив Resource содержит точные ARN трёх изображений и projects.json, без записи и других объектов. ARN полностью идентифицирует ресурс; такой предел соответствует минимальным привилегиям.

cat read-image-policy.json

Bucket закрыт. Авторизованный сайт читает картинку и возвращает браузеру; доступ к сайту не требует публичного bucket.

Назначьте роль чтения

На этом шаге вы дадите приложению подготовленный профиль. SDK обнаруживает временные учётные данные; не копируйте постоянные ключи.

Покажите и проверьте INSTANCE_ID.

echo "$INSTANCE_ID"

Назначьте Name=portfolio-reader. $(...) получает вывод, query выбирает AssociationId, output text возвращает ID, echo его показывает.

ASSOCIATION_ID=$(aws ec2 associate-iam-instance-profile   --instance-id "$INSTANCE_ID"   --iam-instance-profile Name=portfolio-reader   --query 'IamInstanceProfileAssociation.AssociationId'   --output text)
echo "$ASSOCIATION_ID"

Обновите до появления AURA, FORMA и ECHO. Нажмите на обложку: её заголовок и описание читаются из projects.json в S3. Сохраните bucket приватным; при необходимости проверьте экземпляр и профиль. SDK получает временные данные через IMDSv2, без копирования ключей.

Реальный контрольный пример лаборатории; ваши идентификаторы могут отличаться.

Реальный контрольный пример лаборатории; ваши идентификаторы могут отличаться.

Удалите связь и сервер

На этом шаге вы снимете назначение и завершите приложение. Временные данные могли попасть в кеш; удаление связи не гарантирует мгновенного отзыва всех существующих данных. Немедленно сломанная картинка не доказывает отзыв.

Удалите точный сохранённый ID связи.

aws ec2 disassociate-iam-instance-profile --association-id "$ASSOCIATION_ID"

Завершите экземпляр, чтобы остановить новые запросы.

aws ec2 terminate-instances --instance-ids "$INSTANCE_ID"

Дождитесь terminated.

aws ec2 wait instance-terminated --instance-ids "$INSTANCE_ID"

Сохраните подготовленные роль, bucket и контрольные данные. Сайт больше не выполняется.

Резюме

Вы различили идентичности, назначили профиль, получили закрытое изображение и очистили связь и сервер.

Официальные источники: EC2 application roles, instance profiles.