Дать порталу только необходимый доступ

КибербезопасностьBeginner
Практиковаться сейчас

Введение

Анонимная утечка в этой новой среде закрыта, но портал всё ещё использует реквизиты администратора хранилища. Он может делать гораздо больше, чем читать назначенную выписку. Вы создадите отдельную учётную запись, разрешите ей лишь нужное чтение и переключите приложение на неё.

Используйте Storage Admin для аккаунтов и политик, Portal App для частного файла реквизитов и Document Portal для реальных запросов приложения. Синтетическая среда работает на локальном VersityGW 1.10.0 со встроенными пользователями как субъектами, а не на полном AWS IAM. Она запускается независимо от предыдущей работы.

Создать отдельную учётную запись портала

На этом шаге замените зависимость от администратора отдельной учётной записью приложения.

Чтобы начать этот шаг, выберите вкладку Document Portal в интерфейсе лабораторной работы.

Перейдите на вкладку Document Portal, нажмите Open assigned document и обратите внимание на Identity: storage-admin. Выписка доступна, но административные права не нужны. Идентичность обозначает вызывающую сторону; секретный ключ позволяет клиенту подписывать запросы, подтверждая её. Аутентификация доказывает, кто обращается; авторизация решает, что ему разрешено.

Перейдите на вкладку Storage Admin. Загрузите административные реквизиты этой VM:

Перед выполнением следующей команды перейдите на вкладку Storage Admin.

source admin.env

VersityGW включает административный клиент. -a задаёт имя ключа доступа, -s — секрет, а -er — адрес сервиса. До create-user параметры обозначают администратора, после — новый аккаунт. Роль user не имеет административного обхода. Создайте синтетический аккаунт:

/opt/c14/versitygw admin -a storage-admin -s storage-admin-secret -er http://127.0.0.1:7070 create-user -a portal-reader -s portal-reader-secret -r user

Успех не сопровождается ошибкой. Если при повторной команде аккаунт уже существует, продолжайте с ним. Не давайте ему admin и не делайте владельцем бакета: эти права обходят задуманную узкую политику.

Проверьте аутентификацию на публичной справке. Присваивания перед командой выбирают реквизиты только для неё:

AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key public/help.txt help.txt

Метаданные подтверждают аутентифицированный запрос. Справка разрешена всем; это ещё не разрешает читать внутренние выписки. InvalidAccessKeyId означает отсутствие пользователя, а SignatureDoesNotMatch — неверный секрет; ни то ни другое не является результатом авторизации.

Разрешить чтение только нужного префикса

На этом шаге авторизуйте отдельный аккаунт без записи и чтения посторонних данных.

Чтобы начать этот шаг, выберите вкладку Storage Admin в интерфейсе лабораторной работы.

Порталу нужен portal/statement.txt; его разрешённая область — portal/. Префикс соответствует началу ключа объекта. portal/* не включает finance/budget.txt. Чтение использует s3:GetObject, загрузка и удаление — s3:PutObject и s3:DeleteObject. Избегайте s3:*, включающего все операции.

Прочитайте действующую политику в Storage Admin:

Перед выполнением следующей команды перейдите на вкладку Storage Admin.

aws --endpoint-url http://127.0.0.1:7070 s3api get-bucket-policy --bucket documents --query Policy --output text

Существует только разрешение публичной справки. Откройте локальную копию:

nano policy.json

Замените её следующим полным JSON. Сохраните публичную запись и добавьте отдельное разрешение именованному читателю. Встроенные субъекты VersityGW — имена пользователей; форматы AWS отличаются.

{
  "Version": "2012-10-17",
  "Statement": [
    {"Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::documents/public/*"},
    {"Effect": "Allow", "Principal": "portal-reader", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::documents/portal/*"}
  ]
}

В nano сохраните через Ctrl+O, Enter, затем выйдите через Ctrl+X. Примените файл через file://:

aws --endpoint-url http://127.0.0.1:7070 s3api put-bucket-policy --bucket documents --policy file://policy.json

Отсутствие вывода означает успех; синтаксическая ошибка оставляет прежнюю политику действующей. При необходимости исправьте и примените снова. Проверьте разрешённое чтение:

AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key portal/statement.txt statement.txt

Теперь проверьте постороннее чтение. Ожидаемый AccessDenied намеренный; продолжайте после него:

AWS_ACCESS_KEY_ID=portal-reader AWS_SECRET_ACCESS_KEY=portal-reader-secret aws --endpoint-url http://127.0.0.1:7070 s3api get-object --bucket documents --key finance/budget.txt budget.txt

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

Переключить реквизиты приложения

На этом шаге заставьте настоящий портал использовать отдельный аккаунт.

Чтобы начать этот шаг, выберите вкладку Portal App в интерфейсе лабораторной работы.

Перейдите на вкладку Portal App. Этот отдельный локальный аккаунт владеет частной конфигурацией приложения без реквизитов оболочки Storage Admin. Прочитайте текущий файл:

Перед выполнением следующей команды перейдите на вкладку Portal App.

cat credentials.json

Поля access_key и secret_key сейчас обозначают storage-admin. Отредактируйте файл:

nano credentials.json

Используйте отдельные синтетические реквизиты:

{
  "access_key": "portal-reader",
  "secret_key": "portal-reader-secret"
}

Сохраните через Ctrl+O, Enter, выйдите через Ctrl+X. Портал читает файл при каждом запросе; перезапуск не нужен. Вернитесь на вкладку Document Portal, нажмите Open assigned document или обновите страницу. Ожидайте Identity: portal-reader и исходную выписку. Если портал не может читать, исправьте JSON или реквизиты, затем проверьте политику в Storage Admin.

Document Portal использует отдельную учётную запись portal-reader

Наконец, перейдите на вкладку Storage Admin. Проверьте анонимный внутренний запрос и публичную справку. -sS показывает ошибки без индикатора; -w добавляет код ответа:

Перед выполнением следующей команды перейдите на вкладку Storage Admin.

curl -sS -w '\nHTTP %{http_code}\n' http://127.0.0.1:7070/documents/portal/statement.txt

Ожидайте AccessDenied и HTTP 403.

curl -sS http://127.0.0.1:7070/documents/public/help.txt

Ожидайте исходный текст справки. Аккаунт приложения и анонимный доступ — отдельные границы; защита одной не защищает автоматически другую.

Резюме

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