📝

s3作成備忘録

に公開

🪣 S3 バケットの基本設定

1. バケットとは

  • S3 バケットは、オブジェクト(ファイル)をキーで管理する階層構造を持たないデータストア
  • 見た目上フォルダがあるように見えるが、実際には「キー(例:images/cat.png)」として管理されており、
    「ディレクトリ」は プレフィックス(キーの一部)を利用した擬似的な構造

2. バケットタイプ

種類 概要 備考
汎用 (General purpose) 通常利用に最適。ほとんどのユースケースでこれを選択。 ✅ 推奨
ディレクトリ (Directory buckets) AWS の新機能(S3 Express One Zoneで、特定のリージョン内で低レイテンシを実現。
通常のバケットとは別物で制約も多い。
特殊用途のみ

3. バケット名

  • 作成後は変更不可
  • グローバルで一意である必要がある。
    例:myapp-static-assets-prod
  • 命名規則
    • 小文字英数字、ハイフン(-)のみ
    • ピリオド(.)は避ける(証明書検証などで問題になることがある)

4. アクセスコントロールリスト(ACL)

  • 非推奨(無効推奨)
    AWS 公式でも、バケットポリシーと IAM ポリシーによる管理が推奨されている。
  • 有効化すると他 AWS アカウントからもアクセス制御できるが、複雑になりやすく、誤設定のリスクあり。
  • 必要がなければ 無効のままで OK

5. パブリックアクセスブロック

  • 「すべてのパブリックアクセスをブロック」 を有効にしておく。
    → 外部からの直接アクセスを防止できる。
  • CloudFront など CDN 経由で配信したい場合は、
    バケットポリシーで CloudFront OAI/OAC のみ許可 するように設定する。
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Statement",
          "Effect": "Allow",
          "Principal": {
            "Service": "cloudfront.amazonaws.com"
          },
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::<バケット名>/*",
          "Condition": {
            "StringEquals": {
              "AWS:SourceArn": "arn:aws:cloudfront::<AWSアカウントID>:distribution/<CloudFrontID>"
            }
          }
        }
      ]
    }
    

6. バージョニング

  • 有効にすると、削除や上書きの際に古いバージョンを保持できる。
  • ただし、ストレージコストが増加する。
  • Git などで履歴管理している場合は無効でも OK

7. デフォルトの暗号化設定

暗号化タイプ 内容 おすすめ度
SSE-S3 S3 が自動でキーを管理。設定が簡単で自動化に向いている。 ✅ 推奨
SSE-KMS KMS で独自キーを管理。ガバナンス・監査用途に最適だが運用が複雑。 特殊用途のみ
SSE-C クライアント側でキーを管理。一般利用では不要。 非推奨
  • S3 のデフォルト暗号化タイプは「SSE-S3」で十分。
  • KMS を使うとキー管理や権限設計が必要になるため、シンプルな構成では避けるのが無難。

8. バケットキー

  • SSE-KMS 利用時に KMS キー呼び出しを最適化するための機能。
  • SSE-S3 を使用する場合は 無効のままで OK

9. 推奨構成まとめ

設定項目 推奨設定 理由
バケットタイプ 汎用 通常利用に最適
ACL 無効 IAM/ポリシー管理推奨
パブリックアクセス 全てブロック セキュリティ確保
バージョニング 任意(用途に応じて) 誤削除防止や履歴保持に有効
暗号化 SSE-S3 管理が簡単で安全
バケットキー 無効(SSE-S3 の場合) SSE-S3 では不要

10. 補足

  • 静的 Web サイトホスティングを行う場合は、別途「静的ホスティングを有効化」する設定が必要。
  • CloudFront 経由でアクセス制御を行う場合は、OAI(Origin Access Identity)または
    OAC(Origin Access Control)を使用して S3 を直接パブリックにしない構成が推奨。
GitHubで編集を提案

Discussion