Завести сервисный аккаунт вместо root-ключей

Бакет и отдельная пара ключей для сервиса за четыре команды — вместо того чтобы раздавать root-доступ

mc mb --ignore-existing s3/athens
AK=$(openssl rand -hex 10)
SK=$(openssl rand -base64 30 | tr -dc 'A-Za-z0-9' | head -c 40)
mc admin user svcacct add s3 admin --access-key "$AK" --secret-key "$SK" --name athens
echo "ACCESS_KEY=$AK"; echo "SECRET_KEY=$SK"
mc admin user svcacct list s3 admin
mc admin user svcacct rm s3 "$AK"

Сервисный аккаунт наследует политику родительского пользователя и не может получить прав больше, чем у него. Поэтому вешать его на admin удобно для быстрого старта, но по-хорошему родителем должен быть пользователь с политикой на один бакет — иначе «сервисный» ключ де-факто равен root.

Ценность в том, что аккаунт отзывается независимо: скомпрометированный ключ сервиса убирается одной командой, без смены root-пароля и без перенастройки всех остальных потребителей.

--ignore-existing у mc mb делает команду идемпотентной — важно, если скрипт создания окружения запускается повторно.

Генерация ключей: openssl rand -hex даёт безопасный для любых конфигов алфавит, а base64 приходится чистить через tr, потому что + и / ломают часть клиентов при подстановке в URL или в переменные окружения без кавычек.