Lightsail(BookStack)バックアップ用 S3 + IAM 設定手順
はじめに
本記事では、Lightsail 上の BookStack データを S3 にバックアップするための最小構成を、 AWS マネジメントコンソール(GUI)操作前提で整理する。
方針は以下:
- S3 は バックアップ専用
- IAM は 最小権限
- 将来的に 自動実行(cron / Task Scheduler) を想定
- 手戻りが起きにくい順序で構築
全体の作業順序(重要)
① S3 バケット作成(名前を確定)
② IAM ポリシー作成(バケットを限定)
③ IAM グループ作成(ポリシー付与)
④ IAM ユーザー作成(グループ所属)
⑤ Lightsail 側で認証設定
※ 技術的には順不同だが、この順が最も事故が少ない
① S3 バケットを作成する
目的
- バックアップ保存先を確定
- IAM ポリシーで参照する ARN を確定
手順
- AWS マネジメントコンソール
- S3 → バケット → バケットを作成
推奨設定
| 項目 | 設定 |
|---|---|
| バケット名 | bookstack-backup-<任意>(全世界一意) |
| リージョン | Lightsail と同一 |
| オブジェクト所有者 | ACL 無効(推奨) |
| パブリックアクセス | すべてブロック |
| バージョニング | 任意(後から可) |
| 暗号化 | SSE-S3(デフォルトでOK) |
⚠️ この時点では IAM 設定不要
② IAM ポリシーを作成する(JSON)
目的
- この S3 バケットにだけ 書き込み可能にする
手順
- IAM → ポリシー → ポリシーの作成
- JSON タブを選択
- 以下を貼り付け(
bookstack-backup-xxxxは①で作成した実際の名前に置換)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListBucket",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::bookstack-backup-xxxx"
},
{
"Sid": "AllowPutGetObjects",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::bookstack-backup-xxxx/*"
}
]
}
AllowPutGetObjectsのResourceの値の末尾の/*を消さないこと。(AllowListBucketのものとは値が異なる)
ポリシー名(例)
BookStackBackupToS3
③ IAM グループを作成する
目的
- 将来ユーザーが増えても権限管理を簡単にする
手順
-
IAM → ユーザーグループ → グループを作成
-
グループ名:
bookstack-backup-group -
②で作成したポリシーをアタッチ
-
他のポリシーは付けない
④ IAM ユーザーを作成する
目的
- Lightsail から S3 にアクセスする実体
手順
-
IAM → ユーザー → ユーザーを作成
-
ユーザー名:
bookstack-backup -
AWS マネジメントコンソールへのアクセス
- ❌ チェック不要(プログラム専用)
-
グループ:
bookstack-backup-groupを選択
-
タグ:
- 任意(省略可)
作成後
- アクセスキー(Access Key / Secret Key)を発行
- ユーザーを表示して、「右上のアクセスキーを作成」 を押す。
- 「主要なベストプラクティスと代替案にアクセスする」が表示されたら、選択肢から「AWS コンピューティングサービスで実行されるアプリケーション」を選択
- 確認のチェックを入れて「次へ」
- アクセスキーとシークレットアクセスキーを控えてcsvファイルをダウンロードする
この画面を閉じたら 二度と Secret は見えない
⑤ Lightsail 側で認証設定
前提
- Lightsail インスタンスに SSH 接続できること
手順
aws configure
入力内容:
AWS Access Key ID = 発行したキー
AWS Secret Access Key = 発行したシークレット
Default region name = S3 と同じリージョン(東京なら`ap-northeast-1`)
Default output format = json
動作確認
aws s3 ls s3://bookstack-backup-xxxx/
→ エラーが出なければ成功
補足:今後やると良い設定(後回し可)
-
S3 ライフサイクル
- 30日後 → Glacier
- 90日後 → 削除
-
バージョニング有効化
-
バックアップ完了通知(SNS / Slack)
まとめ
- S3 → IAM → Lightsail の順が安全
- ポリシーは JSON で最小権限
- コンソールログイン権限は不要
- 後戻りコストが低い設計