AWS S3入門:バケット作成と権限設定の基礎

AWS S3を使い始めるなら、バケット作成と権限設定を最初にマスターしてください。これらの基礎を押さえれば、ストレージ管理の90%は完了します。本記事では、AWS初心者でも理解できるよう、具体的な手順と実践的な設定方法を解説します。AWSアカウントを作成済みの方は、すぐに実践できる内容です。

AWS S3公式ドキュメントによると、S3はオブジェクトストレージサービスとして、世界中で100兆を超えるオブジェクトを保存しています。この規模のサービスだからこそ、セキュリティとコスト管理は最優先で取り組むべき課題です。本記事を読み終える頃には、安全なバケットの作成方法と、適切な権限設定の実践が身につきます。


目次


はじめに:AWS S3の基礎知識

AWS S3(Simple Storage Service)は、オブジェクトストレージサービスの代表格です。ファイルを「オブジェクト」として保存し、一意のキーでアクセスします。S3の主な特徴は以下の通りです。

特徴詳細メリット
耐久性99.999999999%(11 9の)耐久性データ損失のリスクが極めて低い
可用性99.99%の可用性(S3 Standard)常にアクセス可能なストレージ
拡張性無制限のストレージ容量ビジネスの成長に合わせて柔軟に対応
セキュリティ暗号化、アクセス制御、監査機能機密データの保護が可能
コスト効率従量課金制(ストレージクラスにより異なる)必要な分だけ支払う仕組み

S3は、Webサイトの静的コンテンツホスティング、バックアップ、ビッグデータ解析、アーカイブなど、幅広い用途で利用されています。特に、AWSの他サービスとの連携が容易な点が大きな魅力です。

S3の主要な用語

  • バケット:S3上のコンテナ。ファイル(オブジェクト)を保存する入れ物です。
  • オブジェクト:ファイルそのもの。画像、動画、ドキュメントなど、あらゆるファイル形式が保存できます。
  • キー:オブジェクトを一意に識別する名前(パス)。例:images/profile.jpg
  • リージョン:データが保存される地理的な場所。リージョンを選択することで、レイテンシやコスト、コンプライアンス要件に対応します。

AWS S3の公式ドキュメントによると、2023年現在、世界中に25以上のリージョンでS3が提供されています。日本国内では、東京リージョン(ap-northeast-1)と大阪リージョン(ap-northeast-3)が利用可能です。


AWS S3バケットの作成手順

AWS S3のバケットを作成するには、AWS Management Console、AWS CLI、またはAWS SDKを使用します。本記事では、最も一般的なAWS Management Consoleを使った方法を解説します。

バケット名のルールとベストプラクティス

バケット名は、AWS全体で一意である必要があります。以下のルールに従って命名してください。

  • 3~63文字の長さ
  • 小文字の英数字とハイフン(-)のみ使用可能
  • ハイフンで始めたり終えたりしない
  • IPアドレス形式(例:192.168.1.1)は使用不可
  • AWSが予約している用語(例:aws、amazon)は使用不可

ベストプラクティスとして、以下の命名規則を推奨します。

  • プロジェクト名ベース:例)my-project-assetscompany-name-media
  • 環境別:例)dev-assetsprod-backups
  • 用途別:例)logs-archiveuser-uploads

命名規則を統一することで、バケットの管理が容易になります。また、将来的な混乱を防ぐため、命名規則はチーム内で共有しておきましょう。

リージョン選択の重要性

バケットを作成するリージョンは、以下の要素を考慮して選択します。

要素考慮事項推奨リージョン(日本)
レイテンシユーザーやシステムとの距離。低レイテンシが求められる場合は、ユーザーに近いリージョンを選択ap-northeast-1(東京)
コストリージョンによってストレージコストが異なる。一般的に、米国リージョンは安価ap-northeast-1(東京)
コンプライアンスデータ保存に関する法規制。特定のリージョンでデータを保存する必要がある場合ありap-northeast-1(東京)
サービスの可用性リージョンによってサービスの可用性が異なる。重要なデータは複数リージョンに分散ap-northeast-1(東京) + ap-northeast-3(大阪)

日本国内のユーザーであれば、基本的にはap-northeast-1(東京リージョン)を選択します。ただし、データのバックアップや災害対策のために、ap-northeast-3(大阪リージョン)を併用するのも効果的です。

実際のバケット作成手順

それでは、AWS Management Consoleを使ってバケットを作成してみましょう。以下の手順は、2024年3月現在のAWS ConsoleのUIに基づいています。

  1. AWS Management Consoleにログイン

    AWSアカウントにログインし、AWS Management Consoleを開きます。AWSアカウントをお持ちでない場合は、AWS公式サイトから無料で作成できます。

  2. S3サービスを開く

    コンソールの検索バーに「S3」と入力し、S3サービスを選択します。

  3. バケットを作成する

    「バケットを作成」ボタンをクリックします。

  4. バケット名とリージョンを設定
    • バケット名:一意の名前を入力します(例:my-unique-bucket-name-2024
    • リージョン:適切なリージョンを選択します(例:アジアパシフィック(東京)[ap-northeast-1]
  5. オブジェクト所有権の設定
    • オブジェクト所有権オブジェクト所有者を選択します。通常は「バケット所有者」を選択します。
  6. ブロックパブリックアクセス設定
    • ブロックパブリックアクセス全てのパブリックアクセスをブロックにチェックを入れます。これはセキュリティ上のベストプラクティスです。

    注意:パブリックアクセスを許可する場合は、必要最小限の設定に留め、リスクを理解した上で実施してください。

  7. バケットの作成

    設定が完了したら、「バケットを作成」ボタンをクリックします。

以上で、バケットの作成は完了です。次に、バケットにオブジェクトをアップロードしてみましょう。


S3バケットの権限設定完全ガイド

S3バケットの権限設定は、データのセキュリティを確保する上で最も重要な作業です。不適切な権限設定は、データ漏洩や不正アクセスの原因となります。ここでは、IAMポリシー、バケットポリシー、ACL、CORSの4つの主要な権限設定方法を解説します。

IAMポリシーによるアクセス制御

IAMポリシーは、AWS Identity and Access Management(IAM)を通じて、ユーザーやロールに対してアクセス権限を付与します。IAMポリシーを使用することで、きめ細かなアクセス制御が可能になります。

IAMポリシーには、以下の2種類があります。

  • 管理ポリシー:AWSが提供するポリシーまたはカスタムポリシー。再利用が可能。
  • インラインポリシー:特定のユーザーやロールに直接紐付けられるポリシー。

IAMポリシーを作成する手順は以下の通りです。

  1. IAMコンソールを開く

    AWS Management ConsoleからIAMサービスを開きます。

  2. ポリシーを作成する

    「ポリシー」→「ポリシーの作成」をクリックします。

  3. JSONエディタを選択

    「JSON」タブを選択し、以下のテンプレートを参考にポリシーを記述します。

    <script type="application/json">
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::my-bucket-name",
            "arn:aws:s3:::my-bucket-name/*"
          ]
        }
      ]
    }
    </script>

    このポリシーは、指定したバケット(my-bucket-name)に対して、オブジェクトの取得(GetObject)とバケット内のオブジェクト一覧表示(ListBucket)を許可します。

  4. ポリシーを確認して作成

    「ポリシーの確認」をクリックし、問題がなければ「ポリシーの作成」をクリックします。

  5. IAMユーザーやロールにアタッチ

    作成したポリシーを、必要なIAMユーザーやロールにアタッチします。

IAMポリシーの主なアクションは以下の通りです。

アクション説明
s3:GetObjectオブジェクトの取得
s3:PutObjectオブジェクトのアップロード
s3:DeleteObjectオブジェクトの削除
s3:ListBucketバケット内のオブジェクト一覧表示
s3:CreateBucketバケットの作成

IAMポリシーを使用することで、ユーザーごとに異なるアクセス権限を設定できます。例えば、開発者にはフルアクセスを、一般ユーザーには読み取り専用アクセスを付与することが可能です。

バケットポリシーの設定方法

バケットポリシーは、特定のバケットに対して、特定のプリンシパル(ユーザー、ロール、AWSアカウント)に対してアクセス権限を付与します。バケットポリシーは、バケット単位で設定されます。

バケットポリシーを設定する手順は以下の通りです。

  1. S3コンソールを開く

    AWS Management ConsoleからS3サービスを開き、対象のバケットを選択します。

  2. バケットポリシーを編集

    「権限」タブ→「バケットポリシー」→「編集」をクリックします。

  3. ポリシーを記述

    以下のテンプレートを参考に、ポリシーを記述します。

    <script type="application/json">
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/username"
          },
          "Action": "s3:*",
          "Resource": [
            "arn:aws:s3:::my-bucket-name",
            "arn:aws:s3:::my-bucket-name/*"
          ]
        }
      ]
    }
    </script>

    このポリシーは、特定のIAMユーザー(arn:aws:iam::123456789012:user/username)に対して、バケットmy-bucket-nameへのフルアクセスを許可します。

  4. ポリシーを保存

    「変更を保存」をクリックします。

バケットポリシーの主な用途は以下の通りです。

  • 特定のAWSアカウントやIAMユーザーに対して、バケットへのアクセスを許可する
  • 特定のIPアドレスからのアクセスを制限する
  • 特定の条件下でのみアクセスを許可する(例:特定の時間帯のみ)

バケットポリシーの例として、特定のIPアドレスからのみアクセスを許可するポリシーを紹介します。

<script type="application/json">
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket-name/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": ["192.0.2.0/24", "203.0.113.0/24"]
        }
      }
    }
  ]
}
</script>

このポリシーは、192.0.2.0/24203.0.113.0/24のIPアドレス範囲からのみ、バケット内のオブジェクトの取得を許可します。

アクセスコントロールリスト(ACL)の活用

アクセスコントロールリスト(ACL)は、バケットやオブジェクトに対して、個々のユーザーやグループに対してアクセス権限を付与します。ACLは、IAMポリシーやバケットポリシーと比較して、より細かなアクセス制御が可能です。

ACLには、以下の3つのレベルがあります。

  • バケットレベルのACL:バケット全体に対するアクセス権限
  • オブジェクトレベルのACL:個々のオブジェクトに対するアクセス権限
  • 所有者:オブジェクトの所有者に対するアクセス権限

ACLを設定する手順は以下の通りです。

  1. S3コンソールを開く

    AWS Management ConsoleからS3サービスを開き、対象のバケットまたはオブジェクトを選択します。

  2. ACLを編集

    「権限」タブ→「オブジェクト所有者」または「アクセスコントロールリスト(ACL)」→「編集」をクリックします。

  3. 権限を設定

    以下の権限から必要なものを選択します。

    • 読み取り:オブジェクトの取得を許可
    • 書き込み:オブジェクトのアップロードを許可
    • フルコントロール:オブジェクトの所有者に対するフルアクセスを許可
  4. 保存

    「変更を保存」をクリックします。

ACLの主な用途は以下の通りです。

  • 特定のユーザーに対して、オブジェクトの所有権を付与する
  • 特定のユーザーに対して、オブジェクトの読み取り専用アクセスを許可する
  • 特定のユーザーに対して、オブジェクトの書き込みアクセスを許可する

ただし、ACLはIAMポリシーやバケットポリシーと比較して、管理が煩雑になるため、原則として使用を控えることを推奨します。AWSは、IAMポリシーやバケットポリシーを使用したアクセス制御を推奨しています。

CORS設定でWebアプリとの連携

CORS(Cross-Origin Resource Sharing)は、異なるオリジン(ドメイン、プロトコル、ポート)間でのリソース共有を制御する仕組みです。S3バケットに保存されたオブジェクトに対して、Webアプリケーションからアクセスする場合にCORS設定が必要になります。

CORS設定を有効にする手順は以下の通りです。

  1. S3コンソールを開く

    AWS Management ConsoleからS3サービスを開き、対象のバケットを選択します。

  2. CORS設定を編集

    「権限」タブ→「クロスオリジンリソース共有(CORS)」→「編集」をクリックします。

  3. CORSルールを設定

    以下のテンプレートを参考に、CORSルールを記述します。

    <script type="application/json">
    [
      {
        "AllowedHeaders": ["*"],
        "AllowedMethods": ["GET", "PUT", "POST", "DELETE"],
        "AllowedOrigins": ["https://example.com", "https://www.example.com"],
        "ExposeHeaders": []
      }
    ]
    </script>

    この設定は、example.comwww.example.comからのリクエストに対して、GET、PUT、POST、DELETEメソッドを許可します。

  4. 保存

    「変更を保存」をクリックします。

CORS設定の主な用途は以下の通りです。

  • WebアプリケーションからS3バケット内のオブジェクトにアクセスする
  • 特定のドメインからのみアクセスを許可する
  • 特定のHTTPメソッド(GET、PUT、POST、DELETEなど)を許可する

CORS設定を行う際は、以下の点に注意してください。

  • セキュリティAllowedOriginsには、信頼できるドメインのみを指定します。*を使用すると、全てのドメインからのアクセスが許可されます。
  • パフォーマンス:不要なHTTPメソッドは許可しないようにします。
  • テスト:CORS設定を変更した後は、必ず動作確認を行います。

S3セキュリティのベストプラクティス

S3のセキュリティは、データの機密性、完全性、可用性を確保する上で最も重要な要素です。ここでは、S3のセキュリティを強化するためのベストプラクティスを解説します。

暗号化設定(SSE-S3、SSE-KMS、クライアント側)

S3では、データを暗号化することで、不正アクセスから保護します。S3で使用できる暗号化方式は以下の通りです。

暗号化方式説明メリットデメリット
SSE-S3AWSが管理する暗号化キーを使用して暗号化簡単に設定可能、追加コストなしキーの管理がAWSに依存
SSE-KMSAWS KMS(Key Management Service)で管理される暗号化キーを使用高度なセキュリティ、キーのローテーションが可能追加コストが発生
クライアント側暗号化クライアント側で暗号化したデータをS3にアップロードデータがAWSに到達する前に暗号化される暗号化処理の負荷がクライアントに発生

暗号化設定は、バケット単位またはオブジェクト単位で設定できます。以下に、バケット単位の暗号化設定手順を解説します。

  1. S3コンソールを開く

    AWS Management ConsoleからS3サービスを開き、対象のバケットを選択します。

  2. 暗号化設定を編集

    「プロパティ」タブ→「デフォルト暗号化」→「編集」をクリックします。

  3. 暗号化方式を選択

    以下のいずれかの暗号化方式を選択します。

    • SSE-S3:AWS管理の暗号化キーを使用
    • SSE-KMS:AWS KMSで管理される暗号化キーを使用
  4. 保存

    「変更を保存」をクリックします。

SSE-KMSを使用する場合は、事前にAWS KMSで暗号化キーを作成しておく必要があります。KMSの暗号化キーを作成する手順は以下の通りです。

  1. KMSコンソールを開く

    AWS Management ConsoleからKMSサービスを開きます。

  2. 暗号化キーを作成

    「暗号化キー」→「キーの作成」をクリックします。

  3. キーの設定
    • キータイプ:対称暗号化キーを選択
    • キーの名前:分かりやすい名前を入力
    • 説明:キーの用途を記述
  4. キーの作成

    「キーの作成」をクリックします。

暗号化は、データの機密性を確保する上で最も基本的なセキュリティ対策です。必ず有効にしておきましょう。

バージョニングの有効化

バージョニングは、オブジェクトの複数のバージョンを保存する機能です。バージョニングを有効にすることで、誤ってオブジェクトを削除したり上書きしたりした場合でも、以前のバージョンを復元できます。

バージョニングを有効にする手順は以下の通りです。

  1. S3コンソールを開く

    AWS Management ConsoleからS3サービスを開き、対象のバケットを選択します。

  2. バージョニングを編集

    「プロパティ」タブ→「バージョニング」→「編集」をクリックします。

  3. バージョ
    ABOUT ME
    たから
    サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営