Резервное копирование LitArbi Server в Amazon S3 — пошагово
Около 20 минут, один раз. Затем сервер каждую ночь записывает зашифрованную точку восстановления в бакет, который никто не может досрочно очистить — ни злоумышленник на сервере, ни администратор, ни Amazon.
Прежде чем начать
Понадобятся три вещи: аккаунт Amazon Web Services, в который вы входите как администратор, учётная запись администратора на вашем LitArbi Server и надёжное место для комплекта ключа (backup kit) — менеджер паролей фирмы либо принтер и сейф. Отведите 20 минут; первая копия потом создаётся сама.
Консоль AWS не переведена на русский, поэтому ниже приведены надписи её английской версии. Вы создадите пять вещей, в таком порядке:
| Что | Зачем |
|---|---|
| Бакет с Object Lock | Место, где хранятся точки восстановления. Object Lock делает каждый файл неудаляемым на 30 дней. |
| Правило очистки | Через 30 дней окончательно убирает файлы, удалённые сервером, — чтобы счёт не рос бесконечно. |
| Политика (policy) | Пять действий, которые сервер может выполнять в этом бакете, — и ничего больше. |
| Пользователь с ключом доступа | Собственный вход сервера в бакет. Открыть консоль AWS он не может. |
| Страница Backups | В LitArbi Server: ключ резервного копирования, данные бакета и срок хранения точек восстановления. |
Всё, что отправляет сервер, шифруется ещё до того, как покинет сервер, — ключом, который есть только у вашей фирмы. Amazon хранит данные, которые не может прочитать; LitArbi — тоже.
Стоимость. Amazon берёт несколько центов за гигабайт в месяц за хранение во Франкфурте и мизерные суммы за запросы. Сервер с 20 ГБ документов обходится заметно дешевле одного евро в месяц.
Шаг 1 — Создайте бакет
- Войдите в AWS Management Console. В меню регионов справа вверху выберите Europe (Frankfurt) eu-central-1 — или другой регион ЕС; запомните, какой.
- Откройте S3 (введите «S3» в поиск) и нажмите Create bucket.
- Bucket type: General purpose. Bucket name: уникальное имя, например
litarbi-backup-vashafirma— строчные латинские буквы, цифры и дефисы; имя не должно быть занято нигде в AWS. - Оставьте настройки по умолчанию: ACLs disabled, отмечено Block all public access, шифрование SSE-S3.
- Откройте Advanced settings. В разделе Object Lock выберите Enable и отметьте подтверждение, что объекты могут блокироваться навсегда. Вместе с этим включается версионирование.
- Нажмите Create bucket.
Object Lock включается только сейчас, при создании бакета, — и больше никогда не выключается. Затем AWS предложит задать «default retention»: пропустите. LitArbi сам блокирует каждый файл на столько дней, сколько вы укажете на шаге 5.
Шаг 2 — Правило очистки
Object Lock требует версионирования, а при нём удаление лишь скрывает файл. Когда LitArbi убирает старую точку восстановления, правило окончательно удаляет скрытую копию через 30 дней.
- Откройте новый бакет, вкладку Management, и нажмите Create lifecycle rule.
- Lifecycle rule name:
litarbi-cleanup. Choose a rule scope: Apply to all objects in the bucket, и отметьте подтверждение. - В разделе Lifecycle rule actions отметьте Permanently delete noncurrent versions of objects и Delete expired object delete markers or incomplete multipart uploads.
- Days after objects become noncurrent:
30. Поле «Number of newer versions to retain» оставьте пустым. - Отметьте Delete expired object delete markers и Delete incomplete multipart uploads, Number of days:
7. - Нажмите Create rule.
Не отмечайте «Expire current versions of objects» — это удалило бы сами резервные копии.
Шаг 3 — Политика: что разрешено серверу
- Откройте IAM (введите «IAM» в поиск), затем Policies и Create policy.
- Переключите редактор с Visual на JSON, выделите всё и замените политикой ниже. Впишите имя своего бакета в обоих местах, где стоит
litarbi-backup-yourfirm. - Нажмите Next. Policy name:
LitArbiServerBackup. Нажмите Create policy.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListTheBackupBucket",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::litarbi-backup-yourfirm"
},
{
"Sid": "ReadWriteBackupFiles",
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject", "s3:PutObjectRetention", "s3:DeleteObject"],
"Resource": "arn:aws:s3:::litarbi-backup-yourfirm/*"
}
]
}
С этой политикой сервер может просматривать, читать, записывать и удалять текущие файлы только в этом бакете. Удалять старые версии он не может — s3:DeleteObjectVersion отсутствует намеренно. Тот, кто захватит сервер, сможет лишь скрыть файлы, но не уничтожить их; скрытые копии можно восстановить в течение 30 дней.
Если редактор при наборе удваивает скобки или кавычки, вставьте политику, а не набирайте её.
Шаг 4 — Пользователь сервера и его ключ доступа
- В IAM откройте Users и нажмите Create user. User name:
litarbi-server-backup. Доступ к консоли не включайте. Next. - Permissions options: Attach policies directly. Найдите
LitArbiServerBackup, отметьте, Next, затем Create user. - Откройте нового пользователя, вкладку Security credentials, и в разделе Access keys нажмите Create access key.
- Сценарий: Application running outside AWS. Next, по желанию описание «LitArbi Server», затем Create access key.
- AWS покажет Access key (начинается с
AKIA) и Secret access key — секрет только один раз. Не закрывайте страницу до шага 5.
Секрет потерян? Удалите ключ доступа, создайте новый и внесите новую пару в LitArbi. Больше ничего не меняется.
Шаг 5 — Страница Backups в LitArbi Server
В LitArbi Web откройте Administration ▸ Backups. На странице три пронумерованные части; надписи на английском.
1 · Backup key
Нажмите Create the backup key. Страница один раз покажет комплект ключа: ключ LABK-… и его отпечаток. Распечатайте его или сохраните в менеджере паролей фирмы отдельно от сервера и позаботьтесь, чтобы ещё один человек знал, где он. Сервер хранит только открытую половину: он может записывать копии, но не читать их. Без комплекта их не откроет никто — ни вы, ни хостинг, ни Amazon, ни LitArbi.
2 · Backup place
Выберите S3-compatible storage и заполните:
| Поле | Что ввести |
|---|---|
| Endpoint | https://s3.eu-central-1.amazonaws.com — для другого региона https://s3.REGION.amazonaws.com |
| Region | eu-central-1 (регион бакета) |
| Bucket | имя вашего бакета |
| Access key | Access key из шага 4 |
| Object Lock: … days | 30 |
| Addressing | automatic |
| Secret key / password | Secret access key из шага 4 |
| Sub-folder (optional) | оставить пустым |
Подтвердите своим паролем LitArbi и нажмите Test and save. Сервер сначала записывает, читает и удаляет тестовый файл, так что ошибка видна сразу (см. «Если что-то не так» ниже). Данные доступа хранятся на сервере в зашифрованном виде.
3 · Keep restore points for
14 дней, 8 недель и 12 месяцев — хорошее начало: сохраняется самая свежая точка восстановления каждого дня, недели и месяца. Профессиональные обязанности по хранению документов могут потребовать больше месяцев.
В конце нажмите Back up now. Первая копия отправляет всё и может занять время — она продолжается в фоне. Следующие отправляют только новое.
Шаг 6 — Проверьте, что всё работает
- На странице Backups в Last backup стоит сегодняшняя дата, а в At the backup place — ваш бакет с «Object Lock 30 days».
- Обзор больше не сообщает, что резервное копирование не настроено.
- Введите ключ из комплекта в Check the kit. Он один раз открывает самую свежую точку восстановления и не сохраняется — доказательство, что комплект работает, ещё до того, как он понадобится.
- Check the backups сравнивает самую свежую точку восстановления с отправленным; сервер повторяет это сам каждую неделю.
Копирование идёт в фоне короткими частями, пока LitArbi используется. Если хостинг поддерживает задания cron, надёжнее запускать его каждую ночь в определённое время — строка приведена в руководстве по установке из пакета сервера.
Если что-то не так
Если Test and save не удаётся, страница показывает причину, которую назвал Amazon. Обычные случаи:
| В сообщении есть | Причина | Что делать |
|---|---|---|
| AccessDenied | Политика называет другой бакет или не прикреплена к пользователю. | Проверить имя бакета в обоих местах политики и что у пользователя есть LitArbiServerBackup. |
| InvalidAccessKeyId или SignatureDoesNotMatch | Ключ доступа или секрет введены с ошибкой — часто пробел в конце. | Вставить оба заново или создать новый ключ доступа. |
| NoSuchBucket или PermanentRedirect | Не совпадает имя бакета или регион. | Регион и endpoint должны быть те, что у бакета. |
| Bucket is missing Object Lock Configuration | Object Lock не включили при создании бакета. | Создать новый бакет с Object Lock (шаг 1) или указать Object Lock 0 дней — без защиты. |
Другие S3-провайдеры
Любое S3-совместимое хранилище работает так же — например Hetzner Object Storage, IONOS S3 Object Storage, Backblaze B2 или Wasabi. Везде важны три вещи:
- Включить Object Lock (а с ним версионирование) при создании бакета, если провайдер это предлагает.
- Создать ключ доступа только к этому бакету, если провайдер это позволяет.
- Взять endpoint и регион из документации провайдера и указать их на шаге 5.