S3 — オブジェクトストレージ

概要

Amazon S3 (Simple Storage Service) はファイルを「オブジェクト」単位で保存する AWS のフルマネージドストレージです。 ファイルシステムではなくキーバリュー形式で、URL(パス)にファイルを置く・取り出すだけのシンプルな API。 静的サイト配信、ログ集約、データレイク、Terraform state、バックアップなど、AWS 上のほぼ全プロジェクトで何かしら使う中核サービスです。

11 ナイン(99.999999999%)の耐久性を SLA で謳っており、「データが消える」を実用上心配しなくて済むレベル。 容量無制限・従量課金・Region ごとに完全独立。

主な機能

使うべきパターン

使わない方が良いパターン

Terraform 最小サンプル(OAC 経由の非公開バケット)

resource "aws_s3_bucket" "site" {
  bucket = "my-site-${data.aws_caller_identity.current.account_id}"
}

# 1. 公開を構造的に禁止 (4 スイッチ全 true)
resource "aws_s3_bucket_public_access_block" "site" {
  bucket                  = aws_s3_bucket.site.id
  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

# 2. バージョニング
resource "aws_s3_bucket_versioning" "site" {
  bucket = aws_s3_bucket.site.id
  versioning_configuration { status = "Enabled" }
}

# 3. SSE-S3 (AES256)
resource "aws_s3_bucket_server_side_encryption_configuration" "site" {
  bucket = aws_s3_bucket.site.id
  rule {
    apply_server_side_encryption_by_default { sse_algorithm = "AES256" }
  }
}

# 4. Lifecycle: 90 日経過で Glacier
resource "aws_s3_bucket_lifecycle_configuration" "site" {
  bucket = aws_s3_bucket.site.id
  rule {
    id     = "to-glacier"
    status = "Enabled"
    filter { prefix = "logs/" }
    transition { days = 90; storage_class = "GLACIER" }
  }
}

用語集

バケット (Bucket)
S3 のオブジェクト群を入れる単位。AWS 全体でグローバル一意な命名が必要。
オブジェクト
S3 上のファイル本体 + メタデータ + キー (URL パス相当)。1 オブジェクト 5TB まで。
Public Access Block
バケット / アカウント単位で「公開設定そのものを構造的に禁止」する 4 つのスイッチ。
OAC (Origin Access Control)
CloudFront からのみ S3 を読めるように制限する仕組み。OAI の後継、KMS 暗号化バケットや S3 以外の origin にも対応。
Storage Class
オブジェクトのアクセス頻度に応じた料金プラン。STANDARD / IA / Intelligent-Tiering / Glacier 系など。
SSE-S3 / SSE-KMS
サーバ側暗号化。SSE-S3 は AWS 管理キー (AES256)、SSE-KMS は顧客管理キー。
presigned URL
一時的に有効な URL を発行し、それを持つ人だけが GET / PUT できる仕組み。クライアント直接アップロードに使う。
Lifecycle Rule
「N 日経過したオブジェクトを別ストレージクラスに移す / 削除する」自動ルール。コスト最適化の基本。
11 ナイン
99.999999999% の耐久性。1 兆個のオブジェクトに対して 1 個失う頻度。