※本記事にはプロモーションを含む場合があります。

  • AWS S3は99.999999999%(イレブンナイン)の耐久性を持つオブジェクトストレージで、月額0.023ドル/GBから利用できる
  • バケット作成はコンソール上で10ステップ程度、CLIなら1コマンドで完了する
  • ストレージクラスは6種類あり、アクセス頻度に合わせて選ぶと保存コストを最大95%以上圧縮できるケースもあるとされている
  • 暗号化・IAM・バージョニング・ブロックパブリックアクセスの4点をセットで設定すると、初期状態から情報漏洩リスクを抑えられる
  • 静的サイトホスティングやイベント通知、クロスリージョンレプリケーションなど、応用機能は10種類以上に及ぶ

S3の特徴とは?

AWS S3(Simple Storage Service)は2006年3月に提供が始まったオブジェクトストレージサービスで、2026年時点でも世界中のシステムで採用されている。ファイルを「オブジェクト」という単位で扱い、各オブジェクトはキー(ファイル名に相当)、メタデータ、実データ(最大5TB)の3要素で構成される。この構造により、数KBのログファイルから数TB規模の動画ファイルまで、1つのサービスで一元管理できる点が支持されている理由の一つといわれている。

用途はストレージにとどまらない。Lambda・Glue・Athena・CloudFront・CloudWatchなど、AWSの主要サービスとほぼすべて連携できるため、バックアップ用途はもちろん、データレイクの基盤、機械学習の学習データ置き場、静的Webサイトの配信元としても利用されている。1秒あたり数千件規模のリクエストを処理できるスケーラビリティを持つため、アクセス集中が想定されるサービスの土台にも向いている。

項目内容
耐久性99.999999999%(11 nines)。10,000,000個のオブジェクトを保管した場合、1万年に1個程度しか失われない計算とされている
可用性99.95%(SLA基準)。リージョン内の複数AZに自動で冗長化される
ストレージクラスStandard、Intelligent-Tiering、Standard-IA、One Zone-IA、Glacier系(3種)の合計6系統
最大オブジェクトサイズ5TB(1回のPUTでは5GBまで、それ以上はマルチパートアップロードが必要)
料金体系保存容量・リクエスト数・データ転送量の3要素で従量課金

次のセクションでは、実際にバケットを作るところから手を動かしていく。

バケット作成手順

バケットとはS3上でオブジェクトを格納する箱のことで、1つのAWSアカウントにつきデフォルトで100個まで作成できる(上限緩和申請で増やすことも可能)。コンソールからの作成手順は以下の通りだ。

  1. AWS Management Consoleにログインし、サービス検索から「S3」を開く
  2. 画面右上のリージョン選択で対象リージョンを選ぶ(日本国内向けなら「ap-northeast-1」東京リージョン)
  3. 「バケットを作成」ボタンをクリックする
  4. バケット名を入力する。バケット名はAWS全体でグローバルに一意である必要があり、3〜63文字の小文字英数字とハイフンのみ使用できる(例:company-app-data-prod-2026)
  5. オブジェクト所有権は「ACLを無効にする(推奨)」を選択する。ACLは非推奨機能のため、IAMポリシーやバケットポリシーでのアクセス制御に統一するのが望ましい
  6. 「パブリックアクセスをすべてブロック」はデフォルトのままオンにしておく
  7. バケットバージョニングを「有効」にする。誤削除や上書きからの復旧が可能になる
  8. デフォルトの暗号化で「SSE-S3」または「SSE-KMS」を選択する
  9. 必要であればオブジェクトロック(WORM)とタグを設定する
  10. 内容を確認し「バケットを作成」をクリックする

CLIを使う場合は、事前にaws configureでアクセスキー・シークレットキー・デフォルトリージョンを設定した上で、以下の1行でバケットを作成できる。

aws s3 mb s3://company-app-data-prod-2026 --region ap-northeast-1

コンソールでの操作は10ステップ前後かかるが、CLIなら数秒で完了する。検証環境で何度もバケットを作り直す場合はCLIやIaCツール(Terraformなど)に切り替えると作業時間を大幅に短縮できる。

作成時の注意点

バケットを作った直後の設定次第で、その後の運用負荷やセキュリティリスクが大きく変わる。以下はチェックリスト形式でまとめた、作成時に確認しておきたい項目だ。

  • □ バケット名にプロジェクト名・環境名(dev/stg/prod)・年度を含めているか
  • □ リージョンはレイテンシ・コスト・コンプライアンス要件を踏まえて選定したか
  • □ パブリックアクセスブロックが4項目すべて有効になっているか
  • □ バージョニングを有効化したか(ストレージコストは増えるが復旧性が上がる)
  • □ デフォルト暗号化(SSE-S3もしくはSSE-KMS)を設定したか
  • □ タグ付け(Environment、Team、Costcenterなど)でコスト按分できるようにしたか
  • □ アクセスログやCloudTrailでの操作履歴収集を有効にしたか

特にバケット命名規則は後から変更できない点に注意したい。S3のバケット名は作成後にリネームする手段が用意されておらず、名前を変えるには新規バケットを作成してオブジェクトをコピーし直す必要がある。運用開始前に「company-service-用途-環境-年」のような命名フォーマットをチーム内で統一しておくと、数十〜数百バケットが並ぶ規模になっても迷わず管理できる。

また、ライフサイクルポリシーの設定もこの段階で検討しておきたい。例えば「30日経過したオブジェクトをStandard-IAへ、90日経過したものをGlacierへ移行し、365日で削除する」といったルールをあらかじめ組んでおけば、後からコスト超過に気づいて慌てて調整する事態を避けやすくなる。

オブジェクト管理術

オブジェクトのアップロード・取得・削除は、コンソール、AWS CLI、AWS SDKの3通りの方法で行える。用途に応じて使い分けると作業効率が上がる。

コンソールからのアップロード

バケットを開き「アップロード」→「ファイルを追加」でローカルファイルを選択、必要であればContent-Typeなどのメタデータやストレージクラスを指定して「アップロード」を押すだけで完了する。数個〜数十個のファイルを手動で扱う場合に向いている。

CLIでの操作

大量ファイルや自動化を伴う場合はCLIが効率的だ。基本コマンドは以下の通り。

aws s3 cp ローカルファイルパス s3://バケット名/オブジェクトキー

aws s3 cp /home/user/data.csv s3://company-app-data-prod-2026/data/data.csv --storage-class STANDARD_IA

一覧表示、ダウンロード、削除も同様にシンプルなコマンドで行える。

aws s3 ls s3://バケット名/(一覧表示)

aws s3 cp s3://バケット名/キー ローカルパス(ダウンロード)

aws s3 rm s3://バケット名/キー --recursive(フォルダごと削除)

SDK(Python/boto3)での操作

アプリケーションからS3を直接操作したい場合はSDKを使う。pip install boto3でライブラリを導入すれば、10行に満たないコードでアップロード処理が書ける。

import boto3
s3 = boto3.client('s3')
s3.upload_file('/home/user/data.csv', 'company-app-data-prod-2026', 'data/data.csv')

メタデータの更新はcopy_objectメソッドでMetadataDirective='REPLACE'を指定することで実現できる。同一キーへコピーし直す形になるため、頻繁に更新するメタデータには向かない点は覚えておきたい。

ストレージクラス比較

S3はアクセス頻度に応じて選べる6種類のストレージクラスを用意している。同じ100GBのデータでも、選ぶクラスによって月額コストは20倍以上変わることがある。

ストレージクラス可用性取得速度月額コスト目安(USD/GB)主な用途
S3 Standard99.95%ミリ秒0.023頻繁にアクセスされるデータ、アプリログ
Intelligent-Tiering99.9%ミリ秒0.023+監視費アクセス頻度が読めないデータ
Standard-IA99.9%ミリ秒0.0125月1〜2回程度アクセスするバックアップ
One Zone-IA99.5%ミリ秒0.01単一AZ保存で問題ない二次データ
Glacier Instant Retrieval99.9%ミリ秒0.004年数回アクセスの長期保存データ
Glacier Flexible Retrieval該当なし数分〜数時間0.0036年1〜2回アクセスのアーカイブ
Glacier Deep Archive該当なし最大12時間0.00099規制対応の長期保存データ

出典:AWS S3 Storage Classes(2026年1月時点の情報を参照)

選び方の基準はシンプルで、「アクセス頻度」「データの重要度」「取得までに許容できる待ち時間」の3点で決める。例えば直近1ヶ月以内に作成されたログはStandard、90日以上アクセスされていないバックアップはStandard-IA、監査目的で7年間保存が義務付けられている書類はGlacier Deep Archiveといった具合に振り分けると、保存コストを実勢の3〜9割程度削減できたという事例も報告されている。ストレージクラスの切り替えはコンソール・CLI・ライフサイクルポリシーのいずれからでも設定でき、CLIの場合は--storage-classオプションを指定するだけで完結する。

セキュリティ設定術

S3のセキュリティは「暗号化」「アクセス制御」「監視」の3レイヤーで組み立てる。デフォルト設定のままでも一定の安全性は確保されているが、業務データを扱う場合は追加の対策を組み合わせておくと安心材料になる。

暗号化

暗号化方式にはSSE-S3(AWS管理キー)、SSE-KMS(顧客管理キー、KMSで鍵のローテーションや監査が可能)、SSE-C(顧客提供キー)の3種類がある。監査要件が厳しい業界では、鍵の利用履歴をCloudTrailで追跡できるSSE-KMSが選ばれる傾向にある。

アクセス制御

アクセス制御はIAMポリシー、バケットポリシー、VPCエンドポイントポリシーを組み合わせて設計する。原則は「最小権限」で、readとwriteの権限を分離し、削除権限は限られた運用担当者のみに付与する構成が一般的だ。ACL(アクセス制御リスト)は現在では非推奨とされており、新規構築では使用しない方針が推奨されている。

監視・ログ

S3サーバーアクセスログやAWS CloudTrailのデータイベントを有効にすると、誰がいつどのオブジェクトにアクセスしたかを記録できる。CloudWatchアラームと組み合わせれば、通常時の10倍を超えるアクセスが発生した際に自動通知するといった異常検知の仕組みも構築可能だ。GuardDutyのS3保護機能を併用すると、不審なAPI呼び出しをリアルタイムで検知できる点も見逃せない。

これら3レイヤーをすべて設定した場合、初期構築に半日〜1日程度かかることが多いが、後からインシデント対応に追われる工数を考えれば先行投資として妥当な範囲といえる。

S3の応用機能

S3はストレージ機能に加えて、システム構築に役立つ応用機能を豊富に持つ。

静的Webサイトホスティング

バケットのプロパティから「静的ウェブサイトホスティング」を有効にすると、HTML/CSS/JSファイルを置くだけで簡易的なWebサイトを公開できる。CloudFrontと組み合わせれば、独自ドメインとHTTPS化にも対応できる。サーバー管理が不要なため、コーポレートサイトやLPの公開先として選ばれるケースが多い。

イベント通知

オブジェクトのアップロードや削除をトリガーに、Lambda関数の実行やSQS・SNSへの通知を自動化できる。例えば画像がアップロードされた0.5秒後にサムネイル生成のLambdaを起動する、といった非同期処理の起点として活用されている。

クロスリージョンレプリケーション(CRR)

異なるリージョン間でオブジェクトを自動複製する機能で、災害対策(DR)やレイテンシ改善のために利用される。東京リージョンのデータを大阪リージョンへ複製しておけば、片方のリージョンで障害が起きても数分〜数十分でサービスを継続できる体制を整えられる。

S3 Transfer AccelerationとMultipart Upload

大陸をまたぐ転送速度を最大50〜500%改善するTransfer Acceleration、100MBを超えるファイルを分割並列でアップロードするMultipart Uploadなど、大容量データの転送を高速化する仕組みも用意されている。

よくあるトラブル

S3運用でよく遭遇するトラブルと対処法を整理した。

トラブル原因対処法
403 ForbiddenエラーIAMポリシーやバケットポリシーの権限不足該当ユーザー/ロールのポリシーを見直し、必要なアクション(s3:GetObjectなど)を付与する
バケット名が使用できないグローバルで既に他アカウントが使用中命名規則にプロジェクト名や日付を加えて一意性を高める
想定外の高額請求不要になった大容量オブジェクトの放置、頻繁なGlacier取得ライフサイクルポリシーで自動削除・階層移行を設定、Cost Explorerで月次確認する
アップロードが途中で失敗する大容量ファイルの単一PUT試行、ネットワーク不安定100MB超はMultipart Uploadを使用し、再試行処理を実装する
削除したはずのオブジェクトが残るバージョニング有効時は削除マーカーが付与されるだけで実体は残る過去バージョンも含めて完全削除する場合は個別にバージョンIDを指定して削除する

特に「想定外の高額請求」は多くの運用者がつまずくポイントだ。テスト用に作成した数百GB規模のバケットを消し忘れたまま数ヶ月放置し、気づいた頃には数万円規模の請求になっていたという相談も少なくない。月初にCost Explorerでストレージ費用の推移を確認する運用ルールを1つ加えるだけでも、こうした事態はかなり防ぎやすくなる。

よくある質問

Q1. AWS S3の料金はどのくらいかかりますか?
A. Standardクラスで1GBあたり月0.023ドル程度が目安とされている。加えてリクエスト数(PUT/GETなど)とデータ転送量に応じた課金が発生するため、実際の請求額は使い方によって変動する。

Q2. バケット名は後から変更できますか?
A. できない。バケット名を変更したい場合は、新しいバケットを作成してオブジェクトをコピーし、古いバケットを削除する手順を踏む必要がある。

Q3. 無料枠はありますか?
A. AWS無料利用枠では、S3 Standardで5GBのストレージ、20,000件のGETリクエスト、2,000件のPUTリクエストが12ヶ月間無料で利用できるとされている(提供内容は変更される場合がある)。

Q4. 削除したオブジェクトを復元できますか?
A. バージョニングを有効にしていれば、削除マーカーの前のバージョンを指定して復元できる。バージョニングを有効にしていない場合、削除したオブジェクトの復元は基本的にできない。

Q5. S3とEBS、EFSの違いは何ですか?
A. S3はオブジェクトストレージでHTTP経由のAPIアクセスが基本、EBSはEC2にアタッチするブロックストレージ、EFSは複数インスタンスから同時マウントできるファイルストレージという位置づけになる。用途に応じて使い分けるのが一般的だ。

【編集・制作ポリシー】本記事はInfra Academy編集部が各ベンダー公式ドキュメントおよびエンジニア監修をもとに作成している。インフラ・クラウド構築は環境により結果が異なるため、本番環境への適用前にはテスト環境での検証をおすすめする。情報の正確性には努めているが、最新情報は各公式ドキュメントを参照してほしい。

【編集・制作ポリシー】
本記事はInfra Academy編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。 編集ポリシーはこちら
ABOUT ME
たから
フリーランスIT講師/エンジニア。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900//サーティファイC言語/情報処理技術者 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営