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

☁️ LightsailからS3へバックアップを送るための設定手順(IAM・AWS CLI・疎通確認)

🧭 はじめに

本記事では、Lightsail(Linux)上のBookStackバックアップをAmazon S3へ安全にアップロードするための設定手順を、 「作業 → 確認 → 正常判定」の流れでまとめる。 目的は以下の3点。

  • Lightsail から S3 に書き込み可能な最小権限を用意する
  • AWS CLI を使って確実にアップロードできる状態を作る
  • cron 等で自動化する前に人間が検証できるところまで到達する

🧱 全体像(この手順でできること)

  • IAMユーザー(S3専用・最小権限)を作成
  • Lightsail に AWS CLI を導入
  • 認証情報を安全に配置
  • aws s3 ls / sync実際にS3へ書き込めることを確認

この時点では自動化しない。 まず「手で叩いて成功」を確認する。


🔐 1. IAMユーザーを作成する(S3専用・最小権限)

🧑‍💼 1-1. IAMユーザー作成

AWS マネジメントコンソール → IAM → ユーザー → 作成。

  • ユーザー名例:bookstack-backup
  • アクセス方法:プログラムによるアクセス(アクセスキー)

コンソールログインは不要。 付けない。


🧾 1-2. ポリシーを作成(最小権限)

対象バケットを1つに限定する。

ポリシー例(JSON)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowListBucket",
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME"
    },
    {
      "Sid": "AllowPutGetDeleteObject",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
    }
  ]
}
  • YOUR_BUCKET_NAME は実際のバケット名に置換

AdministratorAccess を付与しない。 バックアップ用途では過剰。


🔑 1-3. アクセスキーを控える

作成後に表示される以下2点を安全な場所に控える。

  • Access Key ID
  • Secret Access Key

Secret Access Key は再表示できない。 必ず保存。


🧰 2. LightsailにAWS CLIを導入する

🔍 2-1. 既に入っているか確認

aws --version
  • バージョンが表示されればOK

📦 2-2. 無い場合のインストール(Ubuntu想定)

sudo apt update
sudo apt install -y awscli

確認:

aws --version

ここで aws コマンドが叩ければ次に進める。


🔐 3. 認証情報を安全に配置する

📁 3-1. 認証情報ファイルを作る(root専用)

cron から使う前提で、root のみに読ませる。

sudo mkdir -p /root/.aws
sudo nano /root/.aws/bookstack_env

中身:

AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=xxxxxxxx
AWS_DEFAULT_REGION=ap-northeast-1

権限設定:

sudo chmod 600 /root/.aws/bookstack_env

600 以外は不可。 他ユーザーに読ませない。


☁️ 4. S3への疎通確認(最重要)

🪣 4-1. バケット一覧が取れるか

. /root/.aws/bookstack_env
aws s3 ls

正常例

2025-12-27  my-bookstack-backup-xxxx

この時点で IAM・認証・ネットワークはOK。


📂 4-2. バケット内を確認

aws s3 ls s3://YOUR_BUCKET_NAME/
  • 空でもOK(エラーにならなければ成功)

⬆️ 4-3. テストファイルをアップロード

echo test > /tmp/s3_test.txt
aws s3 cp /tmp/s3_test.txt s3://YOUR_BUCKET_NAME/test/s3_test.txt

確認:

aws s3 ls s3://YOUR_BUCKET_NAME/test/

正常例

2025-12-27 03:12:00          5 s3_test.txt

Lightsail → S3 の書き込み成功。


🧹 4-4. テストファイル削除

aws s3 rm s3://YOUR_BUCKET_NAME/test/s3_test.txt

🔁 5. バックアップディレクトリを同期する(手動)

📦 5-1. 同期コマンド(初回)

aws s3 sync /var/backups/bookstack s3://YOUR_BUCKET_NAME/bookstack/

🔍 5-2. 正常確認

aws s3 ls s3://YOUR_BUCKET_NAME/bookstack/

ローカルにあるバックアップがS3に見えれば成功。


⚠️ 6. よくあるミスと注意点

cron で動かす前に、必ず手動で成功させる。

--delete は最初は使わない。 ミラー運用は後で。

アクセスキーを .bashrc や world-readable な場所に置かない。


✅ ここまでで達成できたこと

  • Lightsail → S3 の認証が確立
  • 最小権限でのアップロードが可能
  • aws s3 sync が使える状態

次のステップは cron 化と「成功/失敗の機械判定」。