- AWS S3はほぼすべてのAWSプロジェクトで使われる最重要サービス。ストレージクラスの選定とライフサイクル設計ができれば、コスト最適化の提案力で差別化できる。
- バケットポリシー・ACL・暗号化の3層セキュリティを正しく設計できるエンジニアは、SES市場で月単価+5〜10万円の評価が見込める。
- 静的ウェブホスティング、ログ集約、データレイク基盤など多彩なユースケースを理解し「S3を軸にしたアーキテクチャ設計」ができる人材を目指そう。
なぜSESエンジニアにS3スキルが必要なのか
Amazon S3(Simple Storage Service)は、AWSのサービス群の中でも最も利用頻度が高いサービスです。2006年のAWS初期から提供されており、ストレージだけでなくウェブホスティング、データレイク、バックアップ、ログ保管など幅広い用途で使われています。
SES案件の現場では、インフラ構築からアプリケーション開発まで、ほぼすべてのプロジェクトでS3が登場します。S3の設計・運用スキルは、AWSエンジニアとしての基礎体力と言えるでしょう。
VPCでネットワークを設計し、IAMで権限を制御し、CloudWatchで監視する——これらと並んで、S3によるデータ管理はAWS案件の四本柱のひとつです。
SES市場でS3関連スキルが求められる具体的なシーンを見てみましょう。
- アプリケーションの静的アセット(画像・CSS・JS)配信基盤の構築
- CloudTrailやVPCフローログなど各種ログの集約ストレージ設計
- データレイク基盤の構築とETLパイプラインの設計
- バックアップ・DR(災害復旧)戦略の策定と実装
- フロントエンドSPA(React / Next.js / Vue)の静的ホスティング
S3の基本概念を押さえる
バケットとオブジェクト
S3は「オブジェクトストレージ」と呼ばれるタイプのストレージサービスです。ファイルシステムのようなディレクトリ構造ではなく、フラットな名前空間にオブジェクト(ファイル)を格納します。
| 概念 | 説明 | 制限・特徴 |
|---|---|---|
| バケット | オブジェクトを格納するコンテナ | グローバルに一意な名前。リージョン単位で作成 |
| オブジェクト | データ本体 + メタデータ | 最大5TB。キー(パス)で識別 |
| キー | オブジェクトの識別子 | logs/2026/03/access.log のようにプレフィックスで論理的に整理 |
| バージョニング | オブジェクトの世代管理 | 誤削除・上書きからの復旧が可能 |
整合性モデル
2020年12月以降、S3は**強い整合性(strong consistency)**を提供しています。PUT後の即時読み取りでも最新データが返されるため、以前のような結果整合性を意識した設計は不要になりました。これはSES案件でのシステム設計をシンプルにする重要なアップデートです。
ストレージクラスの選定でコスト最適化
S3には用途別に複数のストレージクラスが用意されています。アクセス頻度とコストのバランスを理解することが、クラウドコスト最適化の第一歩です。
主要ストレージクラス一覧
| ストレージクラス | 用途 | GB/月コスト目安 | 最低保存期間 |
|---|---|---|---|
| S3 Standard | 頻繁にアクセスするデータ | $0.025 | なし |
| S3 Intelligent-Tiering | アクセスパターン不明なデータ | $0.025 + 監視料 | なし |
| S3 Standard-IA | 低頻度アクセス(月1回程度) | $0.0138 | 30日 |
| S3 One Zone-IA | 再作成可能な低頻度データ | $0.011 | 30日 |
| S3 Glacier Instant Retrieval | アーカイブ(即時取得必要) | $0.005 | 90日 |
| S3 Glacier Flexible Retrieval | 長期アーカイブ | $0.0045 | 90日 |
| S3 Glacier Deep Archive | コンプライアンス向け超長期保管 | $0.002 | 180日 |
SES案件での選定パターン
実務では以下のように使い分けるケースが多く見られます。
パターン1:Webアプリケーションのアセット管理
画像・CSS・JS → S3 Standard + CloudFront
ユーザーアップロード画像 → S3 Standard(直近30日)→ S3 Standard-IA(それ以降)
パターン2:ログ集約基盤
直近7日のログ → S3 Standard
8〜90日 → S3 Standard-IA
91日〜1年 → S3 Glacier Instant Retrieval
1年超 → S3 Glacier Deep Archive
パターン3:データレイク
生データ(Raw) → S3 Standard
加工済み(Curated) → S3 Standard
過去データ → S3 Intelligent-Tiering(アクセスパターンが読めない)
ライフサイクルポリシーの設計
手動でストレージクラスを変更するのは現実的ではありません。ライフサイクルポリシーを設定して、オブジェクトの経過日数に応じた自動遷移を実現します。
ライフサイクルルールの設計例
{
"Rules": [
{
"ID": "LogArchivePolicy",
"Filter": { "Prefix": "logs/" },
"Status": "Enabled",
"Transitions": [
{ "Days": 30, "StorageClass": "STANDARD_IA" },
{ "Days": 90, "StorageClass": "GLACIER_IR" },
{ "Days": 365, "StorageClass": "DEEP_ARCHIVE" }
],
"Expiration": { "Days": 2555 }
}
]
}
この例では、logs/ プレフィックス配下のオブジェクトを以下のように自動管理します。
- 作成後30日で Standard-IA に移行(ストレージコスト約45%削減)
- 90日で Glacier Instant Retrieval に移行(さらに約64%削減)
- 365日で Deep Archive に移行(最大92%削減)
- 7年(2555日)で自動削除
SES案件では、このようなライフサイクル設計を設計書に明記し、コスト試算と合わせて提案できるエンジニアが高く評価されます。
S3セキュリティの三層設計
S3のセキュリティ設計は、SES案件で最も重要視されるスキルのひとつです。過去に発生したS3バケットからの情報漏洩事故の多くは、アクセス制御の設定ミスが原因でした。
第1層:バケットポリシー
バケットポリシーはJSON形式のリソースベースポリシーです。「誰が」「何を」「どの条件で」できるかを定義します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyUnencryptedUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-bucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "aws:kms"
}
}
}
]
}
第2層:IAMポリシーとの連携
IAM設計で学んだ最小権限の原則をS3にも適用します。バケットポリシー(リソース側)とIAMポリシー(ユーザー/ロール側)の両方で許可されている場合のみアクセスが成立する設計がベストプラクティスです。
第3層:暗号化
S3では以下の暗号化オプションを選択できます。
| 暗号化方式 | 管理者 | コスト | ユースケース |
|---|---|---|---|
| SSE-S3 | AWS管理キー | 無料 | 一般的なデータ保護 |
| SSE-KMS | KMS管理キー | KMS料金 | コンプライアンス要件あり |
| SSE-C | 顧客管理キー | 無料 | 独自鍵管理が必要な場合 |
| CSE | クライアント側暗号化 | なし | 超機密データ |
2023年1月以降、S3の新規バケットはデフォルトでSSE-S3暗号化が有効になっています。SES案件では、コンプライアンス要件に応じてSSE-KMSへの変更を提案できるとよいでしょう。
パブリックアクセスブロック
S3のセキュリティ設定で最も重要なのがパブリックアクセスブロックです。アカウントレベルとバケットレベルの両方で設定でき、意図しない公開を防止します。
# アカウントレベルでパブリックアクセスを完全ブロック
aws s3control put-public-access-block \
--account-id 123456789012 \
--public-access-block-configuration \
BlockPublicAcls=true,\
IgnorePublicAcls=true,\
BlockPublicPolicy=true,\
RestrictPublicBuckets=true
SES案件の参画初日に確認すべき項目として、パブリックアクセスブロックの設定状況は最優先です。
S3 + CloudFrontで静的コンテンツ配信
S3単体でも静的ウェブホスティングが可能ですが、本番環境ではCloudFront(CDN)と組み合わせるのが標準です。
構成のメリット
- パフォーマンス: エッジロケーションからの配信でレイテンシ削減
- セキュリティ: OAC(Origin Access Control)でS3バケットへの直接アクセスを遮断
- コスト: データ転送量の削減(CloudFrontからの配信はS3直接より安価な場合あり)
- HTTPS: 無料SSL/TLS証明書(ACM)との統合
OAC設定のポイント
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::123456789012:distribution/EDFDVBD6EXAMPLE"
}
}
}
]
}
OAC(Origin Access Control)は、旧方式のOAI(Origin Access Identity)に代わる新しい仕組みです。SES案件では新規構築はOACを選択し、既存環境ではOAIからの移行を提案するとよいでしょう。
イベント駆動アーキテクチャとの連携
S3はファイルのアップロードや削除をトリガーにして、他のAWSサービスを起動できます。これによりイベント駆動型のデータ処理パイプラインを構築できます。
代表的な連携パターン
画像リサイズパイプライン
S3にアップロード → S3イベント通知 → Lambda起動 → 画像リサイズ → 結果をS3に保存
ログ分析パイプライン
CloudTrailログ → S3に保存 → S3イベント → Lambda → DynamoDBに集計結果格納
ETL処理
CSVデータ → S3アップロード → EventBridge → Step Functions → Glue Job → Athenaでクエリ
Lambdaやサーバーレス設計と組み合わせることで、S3を起点としたモダンなアーキテクチャを構築できます。
S3のコスト管理と最適化
ストレージコストは長期的に積み上がるため、設計段階での最適化が重要です。
コスト最適化チェックリスト
- ✅ ライフサイクルポリシーで不要データの自動アーカイブ / 削除を設定
- ✅ S3 Intelligent-Tiering でアクセスパターン不明なデータを自動最適化
- ✅ 不完全なマルチパートアップロードの自動削除を設定
- ✅ バージョニング有効時に、古いバージョンの有効期限を設定
- ✅ S3 Storage Lens でストレージ使用状況を可視化
- ✅ リクエストコスト(GET / PUT)も含めた総合的なコスト試算
不完全マルチパートアップロードの削除
見落としがちですが、中断されたマルチパートアップロードは不完全な状態でストレージコストが発生し続けます。
{
"Rules": [
{
"ID": "AbortIncompleteMultipartUploads",
"Filter": {},
"Status": "Enabled",
"AbortIncompleteMultipartUpload": {
"DaysAfterInitiation": 7
}
}
]
}
SES案件でのS3スキルと単価への影響
S3のスキルレベルと案件単価の関係を整理します。
| スキルレベル | できること | 月単価目安(東京) |
|---|---|---|
| 基本操作 | バケット作成、ファイルアップロード、コンソール操作 | 50〜60万円 |
| 設計レベル | ストレージクラス選定、ライフサイクル設計、セキュリティ設計 | 60〜75万円 |
| アーキテクトレベル | データレイク設計、イベント駆動連携、コスト最適化提案 | 75〜95万円 |
S3は「使えて当たり前」のサービスだからこそ、設計力の差が如実に表れます。ストレージクラス選定の根拠を説明でき、セキュリティとコストの両面から最適解を提案できるエンジニアは、SES市場で高い評価を得られます。
まとめ:S3を制する者がAWSを制す
S3はAWSの最も基本的なサービスでありながら、奥深い設計要素を持つサービスです。本記事で解説した内容をおさらいしましょう。
- 基本概念: バケット・オブジェクト・キーの構造と強い整合性モデル
- ストレージクラス: 7種類のクラスとアクセス頻度に応じた選定パターン
- ライフサイクル: 自動遷移ルールによるコスト最適化
- セキュリティ: バケットポリシー・IAM連携・暗号化の三層設計
- CloudFront連携: OACによるセキュアな静的配信
- イベント駆動: S3を起点としたモダンアーキテクチャ
次のエピソードでは、AWSのCI/CD環境(CodePipeline / CodeBuild / CodeDeploy)について解説予定です。デプロイ自動化スキルを身につけて、さらなる単価アップを目指しましょう。