Короткий ответ
Принцип наименьших привилегий — предоставление субъекту (пользователю, сервису, процессу) минимального набора прав, необходимого для выполнения его задач, и не больше.
Как это работает подробнее
вместо выдачи широких ролей (admin, root, *:*) права формируются по конкретным действиям и ресурсам, которые действительно нужны. Это ограничивает «блаcт-радиус» при компрометации аккаунта или сервиса — злоумышленник получит доступ только к тому, что разрешено скомпрометированному субъекту.
Пример кода
security-example-442.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::example-reports-bucket",
"arn:aws:s3:::example-reports-bucket/*"
]
}
]
}Что использовать на практике
- Практика. при создании IAM-роли или сервис-аккаунта начинают с пустого набора прав и добавляют только используемые действия (например, доступ на чтение к одному S3-бакету, а не ко всем ресурсам аккаунта). Регулярно пересматривают права (access review), особенно после смены задач сотрудника или сервиса.
- Проверка. Ожидаемое поведение: сервис с такой политикой сможет читать объекты только из example-reports-bucket и получит AccessDenied при попытке обратиться к любому другому бакету или выполнить s3:DeleteObject — проверяется попыткой aws s3 cp на другой бакет и получением ошибки доступа.
Подводные камни
- Ошибка. выдавать административные права «на всякий случай» или «чтобы не отвлекать потом»; копировать существующую широкую роль вместо проектирования новой узкой; не пересматривать права при уходе сотрудника или изменении функций сервиса.