2026年7月14日
2026年7月14日
AWS S3でファイルストレージを設定する方法:バケット作成・IAM・AWS CLI
Amazon S3(Simple Storage Service)は、AWSのオブジェクトストレージです。WordPressのバックアップの保管先や、画像などのファイルの置き場所としてよく使われます。この記事では、ファイル保存用のバケットを作り、そのバケットだけを操作できるIAMユーザーを用意し、AWS CLIでファイルを出し入れするまでの手順を説明します。
AWSの画面の項目名や配置は、ときどき変わります。この記事の内容は2026年10月時点のAWS公式ドキュメントに基づいています。料金は保存容量、リクエスト数、データ転送量などで決まり、リージョンによって異なるため、AWSの料金ページで確認してください。
全体の流れ
- S3バケットを作る(公開しない設定のまま)
- そのバケットだけを操作できるIAMポリシーとIAMユーザーを作る
- サーバーにAWS CLI v2を入れ、認証情報を設定する
- ファイルをアップロード・同期・ダウンロードする
- バージョニングやライフサイクルなど、運用の設定を加える
1. S3バケットを作る
AWSマネジメントコンソールでS3を開き、「バケットを作成」から作成します。主な設定は次のとおりです。
| 項目 | 設定の目安 |
|---|---|
| リージョン | 利用者やサーバーに近いリージョン。日本なら東京(ap-northeast-1)か大阪(ap-northeast-3) |
| バケット名 | 3〜63文字の小文字英数字、ハイフン、ドット。ほかのAWSアカウントも含めて重複できない |
| オブジェクト所有者 | ACL無効(バケット所有者の強制)。新しいバケットの既定値 |
| パブリックアクセスをすべてブロック | オンのまま。新しいバケットの既定値 |
| デフォルトの暗号化 | SSE-S3(Amazon S3 マネージドキー)。新しいオブジェクトは既定で暗号化される |
AWSの公式ドキュメントでは、新しいバケットやオブジェクトは既定で公開されない設定になっていて、ブロックパブリックアクセスの4つの設定をすべてオンにしておくことが推奨されています。バックアップやファイル保管の用途では、バケットを公開する必要はありません。
ファイルを一般公開して配信したい場合も、バケットポリシーで "Principal": "*" を許可して公開するのではなく、CloudFrontを前に置き、CloudFrontからだけ読めるようにする方法がAWSで推奨されています。手順は AWS CloudFrontでCDNを設定する方法 で説明しています。
2. そのバケットだけを操作できるIAMユーザーを作る
S3を操作する認証情報には、必要な権限だけを付けます。すべてのS3操作を許可する AmazonS3FullAccess は、アカウント内のすべてのバケットを削除までできてしまうため、サーバーに置く認証情報には向きません。
IAMコンソールの「ポリシー」でポリシーを作成し、JSONで次の内容を入れます。example-wp-backup は自分のバケット名に置き換えます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListTheBucket",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::example-wp-backup"
},
{
"Sid": "ReadWriteObjects",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::example-wp-backup/*"
}
]
}
s3:ListBucket はバケット自体(arn:aws:s3:::バケット名)に、オブジェクトの読み書きはバケットの中身(arn:aws:s3:::バケット名/*)に対して許可します。バックアップの保存だけで、サーバーから削除させたくない場合は s3:DeleteObject を外します。
次に、IAMコンソールの「ユーザー」でユーザーを作り、このポリシーを付けます。そのユーザーの「セキュリティ認証情報」でアクセスキーを作成し、表示されたアクセスキーIDとシークレットアクセスキーを控えます。シークレットアクセスキーは作成時にしか表示されません。
EC2のようにAWS上のサーバーから使う場合は、アクセスキーを置かずに、ポリシーを付けたIAMロールをインスタンスに割り当てる方法が使えます。アクセスキーは漏れると悪用されるため、使う場合はこのユーザー専用にし、不要になったら無効化・削除します。
3. AWS CLI v2を入れて認証情報を設定する
Linux(x86_64)では、AWSの公式手順で次のようにインストールします。ARM(aarch64)の場合は、URLの x86_64 を aarch64 に置き換えます。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
ディストリビューションのパッケージ(apt など)で入るAWS CLIは、AWSが管理しているものではなく、最新版とは限りません。公式ドキュメントの手順で入れるのが確実性の高い方法です。
続いて、作成したアクセスキーを設定します。
aws configure
# AWS Access Key ID: 控えたアクセスキーID
# AWS Secret Access Key: 控えたシークレットアクセスキー
# Default region name: ap-northeast-1
# Default output format: json
設定は ~/.aws/credentials と ~/.aws/config に保存されます。どのユーザーとして接続しているかは、次のコマンドで確認できます。
aws sts get-caller-identity
4. ファイルをアップロード・同期・ダウンロードする
s3://バケット名/パス の形で保存先を指定します。
# 1つのファイルをアップロード
aws s3 cp backup-20261031.sql.gz s3://example-wp-backup/db/
# フォルダーの中身を同期(変更・追加されたファイルだけを送る)
aws s3 sync /var/www/html/wp-content/uploads s3://example-wp-backup/uploads/
# 中身の一覧と合計サイズ
aws s3 ls s3://example-wp-backup/ --recursive --human-readable --summarize
# ダウンロード
aws s3 cp s3://example-wp-backup/db/backup-20261031.sql.gz ./
aws s3 sync s3://example-wp-backup/uploads/ ./restore-uploads/
aws s3 sync に --delete を付けると、送り元にないファイルを送り先から削除します。送り元と送り先を逆に書くと、残したいファイルが消えることがあるため、--dryrun を付けて結果を確かめてから実行してください。
aws s3 sync /var/www/html/wp-content/uploads s3://example-wp-backup/uploads/ --delete --dryrun
バケットを公開せずに、特定のファイルを一時的にだれかに渡したい場合は、期限付きのURL(署名付きURL)を発行できます。--expires-in は秒数で、最大7日(604800秒)です。
aws s3 presign s3://example-wp-backup/db/backup-20261031.sql.gz --expires-in 3600
5. 運用の設定
公開設定を確認する
ブロックパブリックアクセスが有効になっているかは、次のコマンドで確認できます。4つの値がすべて true なら、公開を防ぐ設定になっています。
aws s3api get-public-access-block --bucket example-wp-backup
バージョニングで上書き・削除に備える
バージョニングを有効にすると、ファイルを上書きしたり削除したりしても、以前の版が残ります。誤操作やランサムウェアの対策になりますが、古い版の分も保存容量として課金されます。
aws s3api put-bucket-versioning --bucket example-wp-backup --versioning-configuration Status=Enabled
詳しくは AWS S3のバージョニングの設定方法 を参照してください。
ライフサイクルルールで古いファイルを整理する
バケットの「管理」タブにあるライフサイクルルールで、「一定日数が過ぎたファイルを削除する」「古い版を削除する」「低頻度アクセス向けのストレージクラスに移す」といった処理を自動化できます。バックアップを残し続けると容量が増え続けるため、保存期間を決めておくと費用を管理しやすくなります。低頻度アクセスやアーカイブ向けのストレージクラスは、保存料金が下がる代わりに、取り出しの料金や最低保存期間があるため、AWSの説明を確認してから選んでください。
利用状況とアクセスを確認する
- 保存容量と件数:S3コンソールのバケットの「メトリクス」タブや、CloudWatchのS3のメトリクスで、保存容量とオブジェクト数の推移を確認できます(1日1回の更新)
- アクセスの記録:だれがいつファイルを取得したかを残したい場合は、S3のサーバーアクセスログ(別のバケットに保存)か、AWS CloudTrailのデータイベントを有効にします
- 費用:AWSの請求ダッシュボードで、S3の費用の推移を確認します。予算を設定し、超えそうなときに通知を受け取るようにしておくと安心です
WordPressで使う場合
S3は、WordPressのバックアップの保存先や、メディアファイルの置き場所として使えます。具体的な手順は次の記事で説明しています。
まとめ
- バケットは「パブリックアクセスをすべてブロック」とACL無効の既定値のまま作る。公開配信が必要ならCloudFrontを前に置く
- サーバーに置く認証情報には
AmazonS3FullAccessではなく、対象バケットだけを操作できるポリシーを付ける。AWS上のサーバーならIAMロールを使う - AWS CLIは公式手順でv2を入れ、
aws sts get-caller-identityで接続先を確かめる aws s3 sync --deleteは--dryrunで確認してから実行する- バージョニング、ライフサイクルルール、メトリクスとログ、請求の確認を運用に組み込む