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 adminmc admin user svcacct rm s3 "$AK"Сервисный аккаунт наследует политику родительского пользователя и не может получить прав больше, чем у него. Поэтому вешать его на admin удобно для быстрого старта, но по-хорошему родителем должен быть пользователь с политикой на один бакет — иначе «сервисный» ключ де-факто равен root.
Ценность в том, что аккаунт отзывается независимо: скомпрометированный ключ сервиса убирается одной командой, без смены root-пароля и без перенастройки всех остальных потребителей.
--ignore-existing у mc mb делает команду идемпотентной — важно, если скрипт создания окружения запускается повторно.
Генерация ключей: openssl rand -hex даёт безопасный для любых конфигов алфавит, а base64 приходится чистить через tr, потому что + и / ломают часть клиентов при подстановке в URL или в переменные окружения без кавычек.