メインコンテンツへスキップ

Lightsail(BookStack)バックアップ用 S3 + IAM 設定手順

はじめに

本記事では、Lightsail 上の BookStack データを S3 にバックアップするための最小構成を、 AWS マネジメントコンソール(GUI)操作前提で整理する。

方針は以下:

  • S3 は バックアップ専用
  • IAM は 最小権限
  • 将来的に 自動実行(cron / Task Scheduler) を想定
  • 手戻りが起きにくい順序で構築

全体の作業順序(重要)

① S3 バケット作成(名前を確定)
② IAM ポリシー作成(バケットを限定)
③ IAM グループ作成(ポリシー付与)
④ IAM ユーザー作成(グループ所属)
⑤ Lightsail 側で認証設定

※ 技術的には順不同だが、この順が最も事故が少ない


① S3 バケットを作成する

目的

  • バックアップ保存先を確定
  • IAM ポリシーで参照する ARN を確定

手順

  1. AWS マネジメントコンソール
  2. S3 → バケット → バケットを作成

推奨設定

項目 設定
バケット名 bookstack-backup-<任意>(全世界一意)
リージョン Lightsail と同一
オブジェクト所有者 ACL 無効(推奨)
パブリックアクセス すべてブロック
バージョニング 任意(後から可)
暗号化 SSE-S3(デフォルトでOK)

⚠️ この時点では IAM 設定不要


② IAM ポリシーを作成する(JSON)

目的

  • この S3 バケットにだけ 書き込み可能にする

手順

  1. IAM → ポリシー → ポリシーの作成
  2. JSON タブを選択
  3. 以下を貼り付け(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/*"
    }
  ]
}

AllowPutGetObjectsResourceの値の末尾の/*を消さないこと。(AllowListBucketのものとは値が異なる)

ポリシー名(例)

BookStackBackupToS3

③ IAM グループを作成する

目的

  • 将来ユーザーが増えても権限管理を簡単にする

手順

  1. IAM → ユーザーグループ → グループを作成

  2. グループ名:

    bookstack-backup-group
    
  3. ②で作成したポリシーをアタッチ

  4. 他のポリシーは付けない


④ IAM ユーザーを作成する

目的

  • Lightsail から S3 にアクセスする実体

手順

  1. IAM → ユーザー → ユーザーを作成

  2. ユーザー名:

    bookstack-backup
    
  3. AWS マネジメントコンソールへのアクセス

    • ❌ チェック不要(プログラム専用)
  4. グループ:

    • bookstack-backup-group を選択
  5. タグ:

    • 任意(省略可)

作成後

  • アクセスキー(Access Key / Secret Key)を発行
    1. ユーザーを表示して、「右上のアクセスキーを作成」 を押す。
    2. 「主要なベストプラクティスと代替案にアクセスする」が表示されたら、選択肢から「AWS コンピューティングサービスで実行されるアプリケーション」を選択
    3. 確認のチェックを入れて「次へ」
    4. アクセスキーとシークレットアクセスキーを控えて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 で最小権限
  • コンソールログイン権限は不要
  • 後戻りコストが低い設計