勝手にAWS教室 5時間目:S3
情報が古い場合があります。間違っている箇所がありましたらご教授いただけると幸いです。
AWSのサービスの中でも、地味に見えて実はめちゃくちゃ重要なのが Amazon S3(Simple Storage Service)です。
「ファイルを保存するやつでしょ?」で終わらせてしまうと、実務で痛い目を見ます。S3には独自の概念がいくつあり、使い方を間違えると全世界に公開、、、、そんなことになります。
「バケットって何?」「ストレージクラスってどう使い分けるの?」「アクセス制御が2種類あるのはなぜ?」——この辺りがスッキリしていない方、今回で整理してしまいましょう。
先にまとめ
- バケット・オブジェクト・キー:タンス・服・引き出しのラベルの関係
- ストレージクラス:アクセス頻度別の「保管場所」の選び方
- アクセス制御:誰に鍵を渡すかの仕組み
S3とは何か
Amazon S3とは、一言でいうと インターネット上に置けるファイル置き場 です。
容量はほぼ無制限で、画像・動画・ログ・バックアップなどあらゆるファイルを保存できます。保存したファイルはURLでアクセスできるため、Webサイトの画像配信やアプリのデータ保管に広く使われています。
自分の部屋のクローゼットだと容量に限界がありますが、S3は「どれだけ荷物を入れても溢れないトランクルーム」のようなものです。しかもインターネットさえあればどこからでも出し入れできます。
S3は本当にいろんなところで使われていて、AWSを使っているサービスの裏側にはだいたいS3がいます。縁の下の力持ちですね。
1. バケット・オブジェクト・キーの関係
S3で最初に覚えるべき用語が3つあります。
- バケット(Bucket)
- オブジェクト(Object)
- キー(Key)
EC2の回で「AMI・インスタンス・EBS」を覚えたように、S3にも三位一体の概念があります。
これを 「タンス・服・引き出しのラベル」 で覚えましょう。
バケット = タンス
バケットは、ファイルを入れるための 最上位の入れ物 です。
ここで重要なのが、バケット名は世界中で一意(他の誰とも被ってはいけない)である必要があるということ。自分のプロジェクトだけでなく、世界中のAWSユーザーの中で唯一の名前にする必要があります。
家具屋さんで買ったタンスに名前をつけるとき、世界中のタンスと被らない名前にしないといけないイメージです。「my-tansu」みたいなシンプルな名前はまず取られているので、「mycompany-project-images-prod」のように具体的な名前をつけるのがコツです。
また、バケットはリージョン(地域)を指定して作成します。東京リージョンに作れば、日本からのアクセスが速くなります。タンスを置く部屋(リージョン)を最初に決める、ということですね。
オブジェクト = 服
オブジェクトは、バケットの中に入れる 実際のファイル本体 です。画像・PDF・動画・ログファイルなど、どんな種類のファイルでも保存できます。
タンスの中に入れる服そのものです。Tシャツでもコートでも何でも入ります。
1つのオブジェクトは最大5TBまで。5TBって、フルHDの映画だと約2,500本分です。1つのファイルでこのサイズなので、普通に使う分にはまず困りません。
キー = 引き出しのラベル(ファイルの住所)
キーは、バケット内でオブジェクトを識別するための 名前(パス) です。
たとえば images/2024/photo.jpg というキーは「imagesフォルダの中の2024フォルダの中のphoto.jpg」を指します。
タンスの引き出しに「靴下」「Tシャツ」「冬物」とラベルを貼るのと同じです。ラベルがあるから、どこに何を入れたかすぐわかります。
ここで1つ知っておいてほしいのが、S3には本当の意味でのフォルダはありません。/ を含むキー名でフォルダのように見せているだけです(擬似フォルダ)。
AWSのコンソール画面ではフォルダがあるように見えますが、裏側では
images/2024/photo.jpgという1本の長い名前のファイルがあるだけです。ラベルに/が入っているだけで、実際に引き出しが分かれているわけではない、というイメージですね。
3つの関係まとめ
| 用語 | 比喩 | 役割 |
|---|---|---|
| バケット | タンス | ファイルの最上位の入れ物(世界で一意の名前) |
| オブジェクト | 服 | 実際のファイル本体(最大5TB) |
| キー | 引き出しのラベル | バケット内でオブジェクトを識別する名前 |
2. ストレージクラスの選び方
S3には複数の「ストレージクラス」があります。クラスによって料金・取り出し速度が変わります。
EC2の回で購入オプション(オンデマンド・リザーブド・スポット)を学びましたが、S3にも似たような「使い方に応じたプラン選び」があるわけです。
これを 「アクセス頻度別の保管場所」 で覚えましょう。
よく使うファイル = 手の届く棚(S3 Standard)
デフォルトのストレージクラスです。取り出しが速く、何度アクセスしても追加料金なし。ただし保管コストは一番高めです。
デスクの上に置いてある書類と同じです。すぐ手に取れるけど、デスクのスペース(=保管コスト)を使います。
毎日アクセスするような画像ファイルやAPIのレスポンスデータなどはこれ一択です。
たまにしか使わないファイル = 押し入れ(S3 Standard-IA)
IA = Infrequent Access(低頻度アクセス) の略。保管コストはStandardより安いですが、取り出す際に追加料金がかかります。
押し入れに入れた季節物の服と同じです。出すときにちょっと手間(=追加料金)がかかるけど、クローゼットに入れっぱなしにするよりスペース代は安い。
月に1回くらいしかアクセスしないバックアップデータや、古いログファイルなどに向いています。
ほとんど使わないファイル = 地下倉庫(S3 Glacier)
長期保存・アーカイブ向けです。保管コストは非常に安いですが、取り出しに数分〜数時間かかります。
実家の地下倉庫に預けた段ボールと同じです。保管料は安いけど、「あの書類取ってきて」と頼んだら届くまでに時間がかかります。
数年に一度しか参照しない契約書や監査ログなどに使います。「もう見ないかもしれないけど、法律上○年は保管しないといけない」というデータの置き場所にぴったりです。
ストレージクラスまとめ
| クラス | 比喩 | 取り出し速度 | 向いている用途 |
|---|---|---|---|
| S3 Standard | 手の届く棚 | 即時 | 頻繁にアクセスするファイル |
| S3 Standard-IA | 押し入れ | 即時(取り出し料金あり) | 月1回程度のアクセス |
| S3 Glacier | 地下倉庫 | 数分〜数時間 | 年1回以下・長期アーカイブ |
ストレージクラスの選択はコスト最適化に直結します。全部Standardに置いておくと楽ですが、アクセスしないファイルまでStandardにしているのはお金がもったいないです。「このファイルは最後にいつ使った?」を定期的に見直すのが大事ですね。
3. アクセス制御の仕組み
S3に保存したファイルは、デフォルトでは非公開です。これ、地味に重要です。
過去に「S3バケットを公開設定にしたまま個人情報が流出した」というニュースが何度もありました。S3のアクセス制御をちゃんと理解しているかどうかは、セキュリティに直結します。
アクセスを制御する方法は主に2つあります。
バケットポリシー = パスワード付きタンス
バケット単位で設定するアクセスルールです。「このバケットはCloudFrontからしかアクセスできない」「このバケットは全員読み取り可能」といったルールをJSON形式で記述します。
タンス自体にパスワードロックをかけるイメージです。「暗証番号を知っている人だけ開けられる」のように、タンス側で誰を通すか決めます。
IAMポリシー = 家族に渡す合鍵
ユーザー・ロール単位で設定するアクセス権限です。「このIAMユーザーはS3の読み取りのみ可能」「このロールは特定のバケットにだけ書き込める」といった形で、人やサービス側に権限を持たせます。
お母さんには全部の引き出しを開けられる合鍵、子どもにはお菓子の引き出しだけ開けられる合鍵を渡す、というイメージです。タンス側のルールではなく、「誰にどの鍵を渡すか」で制御します。
どっちを使えばいいの?
正直、両方使います。ただ、考え方の起点が違います。
| 種類 | 設定する場所 | 考え方の起点 | 一言説明 |
|---|---|---|---|
| バケットポリシー | バケット側 | 「このタンスを誰に開けさせるか」 | リソースベース(タンス視点) |
| IAMポリシー | ユーザー・ロール側 | 「この人にどの合鍵を渡すか」 | アイデンティティベース(人視点) |
EC2の回で学んだセキュリティグループ(インスタンスにつける)とNACL(サブネットにつける)の関係に似ていますね。「どこに設定を置くか」が違うだけで、どちらもアクセスを制御するという目的は同じです。
まとめ
| 概念 | 比喩 | 一言ポイント |
|---|---|---|
| バケット | タンス | 世界で一意の名前・リージョン指定が必要 |
| オブジェクト | 服 | 実際のファイル本体(最大5TB) |
| キー | 引き出しのラベル | バケット内のファイルの住所(擬似フォルダ) |
| Standard | 手の届く棚 | 頻繁アクセス向け・取り出し即時 |
| Standard-IA | 押し入れ | 低頻度アクセス向け・取り出し時に追加料金 |
| Glacier | 地下倉庫 | アーカイブ向け・取り出しに時間がかかる |
| バケットポリシー | パスワード付きタンス | バケット単位でアクセスを制御 |
| IAMポリシー | 家族に渡す合鍵 | ユーザー・ロール単位でアクセスを制御 |
最後に
S3は「ただのファイル置き場」ではなく、ストレージクラスの使い分けやアクセス制御の設計が重要なサービスです。特にストレージクラスの選択はコストに、アクセス制御はセキュリティに直結するので、「なんとなくStandardで全公開」は絶対にやめましょう。
とりあえずS3について聞かれたら「タンスと服と引き出しのラベルのことですね!」と言ってみてください。これで伝わる人がいればそれはきっと元教員をしていたエンジニアです。
現在までに投稿してきた「勝手にAWS教室」はこちらにまとめてあります。
興味がある方はご覧ください。





