fix(ops): выгрузка бэкапа в S3 не проходила TLS — у aws-cli свой CA-бандл (#2203) #3009
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3009
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/backup-s3-ca-bundle"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Блокер, найденный при боевой проверке выгрузки в только что заведённый бакет Selectel. Без этой правки ночной бэкап падал бы на выгрузке каждый раз, а причина выглядела бы как проблема с ключами или политикой доступа — и её искали бы не там.
Что было
Блок выгрузки в S3 в обоих скриптах запускает
docker run --rm ... amazon/aws-cli:latest. Этот образ не проходит TLS к эндпоинту Selectel:Почему
AWS CLI v2 использует собственный набор корневых сертификатов, вшитый в botocore, а не системное хранилище. Корня, которым подписан сертификат Selectel, в нём нет.
При этом сам сертификат совершенно нормальный, и системное хранилище контейнера его принимает. Проверено тремя независимыми способами:
openssl s_client→ цепочка*.s3.ru-1.storage.selcloud.ru→ GlobalSign AlphaSSL CA → GlobalSign Root CA R6,Verify return code: 0 (ok);awsв том же контейнере →CERTIFICATE_VERIFY_FAILED.Разница ровно в том, чьим хранилищем пользуется клиент.
Что сделано
В оба блока
docker runдобавлена одна переменная:--no-verify-sslнамеренно не использован — это отключение проверки TLS, а не решение.Как проверено на проде
Обе ветки прогнаны живьём против боевого бакета
gendsgn-backups:SSL validation failed, объект не появляется, бакет пустupload: ... to s3://gendsgn-backups/_selftest/multipart-probe.bin, код возврата 0Загрузка подтверждена вторым ключом (сервисный пользователь-читатель):
11.0 MiB _selftest/multipart-probe.bin.Заодно проверен путь multipart, которым пойдёт реальный дамп на 1,4 ГБ: порог принудительно снижен до 5 МБ, файл 11 МБ, три сегмента — проходит. Политика бакета покрывает multipart корректно (
PutObject+ три multipart-действия).Побочное
В бакете остался тестовый объект
_selftest/multipart-probe.bin(11 МБ). Удалить его текущими ключами нельзя —DeleteObjectнамеренно запрещён и писателю, и читателю. Убирается через панель управления.Refs #2203