𝕏 f B! L
案件・求人数 12,345
案件を探す(準備中) エージェントを探す(準備中) お役立ち情報 ログイン
案件・求人数 12,345
AWS 完全攻略 Ep7: SESエンジニアのためのS3・ストレージ設計入門

AWS 完全攻略 Ep7: SESエンジニアのためのS3・ストレージ設計入門

AWSS3ストレージオブジェクトストレージSES
目次
⚡ 3秒でわかる!この記事のポイント
  • 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ストレージクラスとライフサイクルのコスト比較 S3には用途別に複数のストレージクラスが用意されています。アクセス頻度とコストのバランスを理解することが、クラウドコスト最適化の第一歩です。

主要ストレージクラス一覧

ストレージクラス用途GB/月コスト目安最低保存期間
S3 Standard頻繁にアクセスするデータ$0.025なし
S3 Intelligent-Tieringアクセスパターン不明なデータ$0.025 + 監視料なし
S3 Standard-IA低頻度アクセス(月1回程度)$0.013830日
S3 One Zone-IA再作成可能な低頻度データ$0.01130日
S3 Glacier Instant Retrievalアーカイブ(即時取得必要)$0.00590日
S3 Glacier Flexible Retrieval長期アーカイブ$0.004590日
S3 Glacier Deep Archiveコンプライアンス向け超長期保管$0.002180日

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/ プレフィックス配下のオブジェクトを以下のように自動管理します。

  1. 作成後30日で Standard-IA に移行(ストレージコスト約45%削減)
  2. 90日で Glacier Instant Retrieval に移行(さらに約64%削減)
  3. 365日で Deep Archive に移行(最大92%削減)
  4. 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-S3AWS管理キー無料一般的なデータ保護
SSE-KMSKMS管理キー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の最も基本的なサービスでありながら、奥深い設計要素を持つサービスです。本記事で解説した内容をおさらいしましょう。

  1. 基本概念: バケット・オブジェクト・キーの構造と強い整合性モデル
  2. ストレージクラス: 7種類のクラスとアクセス頻度に応じた選定パターン
  3. ライフサイクル: 自動遷移ルールによるコスト最適化
  4. セキュリティ: バケットポリシー・IAM連携・暗号化の三層設計
  5. CloudFront連携: OACによるセキュアな静的配信
  6. イベント駆動: S3を起点としたモダンアーキテクチャ

次のエピソードでは、AWSのCI/CD環境(CodePipeline / CodeBuild / CodeDeploy)について解説予定です。デプロイ自動化スキルを身につけて、さらなる単価アップを目指しましょう。

出典・参考リンク

SES案件をお探しですか?

SES記事をもっと読む →
🏗️

SES BASE 編集長

SES業界歴10年以上のメンバーが在籍する編集チーム。SES企業での営業・エンジニア経験、フリーランス独立経験を持つメンバーが、業界のリアルな情報をお届けします。

📊 業界データに基づく記事制作 🔍 IPA・経済産業省データ参照 💼 SES実務経験者が執筆・監修