メインコンテンツまでスキップ

Amazon S3 とは?基本的な使い方や料金を学ぼう

タグ:

AWS でドキュメントや画像を格納するとしたら、S3 が最初の候補になります。しかし、適当に S3 を使ってしまうと、後からセキュリティやコストで苦労することが多くなるため、基本的な Amazon S3 の使い方を説明します。

Amazon S3 とは

ドキュメント、画像、動画などデータを格納できるストレージサービスです。S3 ではデータのことをオブジェクトと言い、オブジェクトを格納するリソースをバケットと言います。基本的にはオブジェクトを格納するサービスになりますが、用途に合わせてコストを抑えたり、意図せずオブジェクトが公開されないようにセキュリティを意識する必要があります。

S3 は耐久性が高く(99.999999999%)、事前に容量を確保する必要がないため、データ量を気にせず利用できます。主な用途としては、ウェブサイトで使う画像や動画の配信、アプリケーションのログ保存、データのバックアップやアーカイブ、静的ウェブサイトのホスティングなどがあります。EC2 や Lambda などの他の AWS サービスとも連携しやすく、多くのシステム構成で中心的な役割を担います。

料金

S3 の料金は実際に使用した分だけ発生する従量課金になります。主にどれぐらいのオブジェクトサイズをどのストレージクラスに保存したかで決まります。他にはリクエストやデータ転送などもありますが、使用量が少ないうちはほとんど影響しないです。

ストレージクラス

色々ありますが、良く使うストレージクラスは以下になります。デフォルトは S3 標準になっているため、バックアップ目的などで頻繁にアクセスしない場合は、ストレージクラスを変更してコストを抑えましょう。

用途ストレージクラス料金 (東京リージョン)
頻繁に使用するS3 標準USD 0.025/GB
月に数回使用するS3 標準 - 低頻度アクセスUSD 0.0138/GB
四半期に使用するS3 Glacier Instant RetrievalUSD 0.005/GB
ほぼ使用しないS3 Glacier Deep ArchiveUSD 0.002/GB

セキュリティ

S3 のセキュリティ問題は多く、外部からアクセスできてしまった場合、機密情報が漏洩するリスクがあります。そのため、S3 のアクセス許可を制限し、必要なユーザーやサービスからのみアクセスできるようにしましょう。なお、外部に公開する予定がないのであれば、パブリックアクセスはブロックしておきましょう。

パブリックアクセスは、アクセスコントロールリスト (ACL)、アクセスポイントポリシー、バケットポリシー、またはそのすべてからバケットおよびオブジェクトに付与されます。Amazon S3 のすべてのアクセスポイント、バケット、オブジェクトへのパブリックアクセスを確実にブロックするために、アカウントへのパブリックアクセスをブロックする 4 つの設定をすべて有効にすることをお勧めします。

バケットポリシー

バケットポリシーは JSON 形式のポリシーをバケットに直接アタッチし、アクセス制御をより細かく設定できます。特定の IAM ユーザーやロール、あるいは特定の IP アドレスからのアクセスのみを許可するといった制御が可能です。以下は、特定の IAM ユーザーにのみオブジェクトの読み取りを許可するポリシーの例です。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/example-user"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::exrecord-test-bucket/*"
}
]
}

バケットポリシーは AWS コンソールまたは AWS CLI から設定できます。ポリシーを誤って設定すると意図しないアクセス制御になる場合があるため、適用前にテスト環境で動作を確認しておきましょう。特定の VPC からのみアクセスを許可したり、MFA 認証を必須にするといった制御も可能です。IAM ポリシーと組み合わせることで、より細かいアクセス管理を実現できます。

暗号化

S3 では保存するオブジェクトを暗号化できます。デフォルトでサーバーサイド暗号化(SSE-S3)が有効になっており、AWS が管理するキーによってオブジェクトが自動的に暗号化されます。コンプライアンス要件が厳しい場合は、AWS KMS で管理するキーを使った SSE-KMS を選択することもできます。暗号化の設定はバケット作成時または既存バケットのプロパティから変更できます。

バージョニング

バージョニングを有効にすると、オブジェクトを上書き・削除した際に以前のバージョンが保持されます。誤って上書きや削除をしてしまった場合でも過去の状態に戻せるため、重要なデータを扱うバケットでは有効化を検討しましょう。

バージョニングを有効化するには以下のコマンドを実行します。

❯ aws s3api put-bucket-versioning --bucket exrecord-test-bucket --versioning-configuration Status=Enabled

有効化後は、同じキー名でオブジェクトをアップロードするたびに新しいバージョンが追加されます。バージョンの一覧は以下で確認できます。

❯ aws s3api list-object-versions --bucket exrecord-test-bucket

バージョニングを使用すると保存されるバージョン数に応じてストレージコストが増加します。不要になった古いバージョンは、ライフサイクルルールを使って自動削除するように設定しておくと管理しやすいです。また、バージョニングが有効な状態でオブジェクトを削除すると、実際には削除マーカーが付与されるだけで過去のバージョンは保持されます。完全に削除するにはバージョン ID を指定する必要があります。

AWS CLI で S3 を使ってみる

AWS CLI で S3 を使ってみましょう。実際にコマンドを実行した場合にどうなるか結果を記載します。

バケットの作成

バケット名はすべてのアカウントで一意になりますので、固有の名称を付けて一意の名前にしましょう。なお、AWS CLI のプロファイルで指定したリージョンに作成されます。

❯ aws s3 mb s3://exrecord-test-bucket
make_bucket: exrecord-test-bucket

バケットが作成されたことを確認します。

❯ aws s3 ls
2026-04-12 05:07:26 exrecord-test-bucket

パブリックアクセスの設定を確認します。すべての項目が true であれば、外部からアクセスできない安全な状態です。

❯ aws s3api get-public-access-block --bucket exrecord-test-bucket
{
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
}
}

オブジェクトのアップロード

ローカルのファイルを S3 バケットにアップロードします。

❯ aws s3 cp test.txt s3://exrecord-test-bucket
upload: ./test.txt to s3://exrecord-test-bucket/test.txt

バケット内のオブジェクト一覧は以下で確認できます。バケット作成と同じコマンドでバケットを指定します。

❯ aws s3 ls s3://exrecord-test-bucket
2026-04-12 05:10:22 0 test.txt

オブジェクトのダウンロード

S3 バケットからローカルにファイルをダウンロードします。アップロードとは引数の順番が逆という違いであるため、注意が必要です。

❯ aws s3 cp s3://exrecord-test-bucket/test.txt .
download: s3://exrecord-test-bucket/test.txt to ./test.txt

オブジェクトの削除

S3 バケット内のオブジェクトを削除します。バージョニングが有効でない限り、削除したオブジェクトは復元できないため、対象のキーを確認してから実行しましょう。

❯ aws s3 rm s3://exrecord-test-bucket/test.txt
delete: s3://exrecord-test-bucket/test.txt

バケット内のオブジェクトをすべて削除したい場合は --recursive オプションを使います。ディレクトリ単位でまとめて削除するときに役立ちます。

❯ aws s3 rm s3://exrecord-test-bucket --recursive

バケットの削除

バケットを削除するには、バケット内のオブジェクトをすべて削除しておく必要があります。オブジェクトが残っている状態では削除が失敗します。--force オプションを付けると、バケット内のオブジェクトの削除とバケットの削除を一度に実行できます。

❯ aws s3 rb s3://exrecord-test-bucket --force
remove_bucket: exrecord-test-bucket

なお、バージョニングが有効なバケットを削除する場合は、--force だけでは不足です。過去のバージョンや削除マーカーもすべて削除してからバケットを削除する必要があります。

まとめ

S3 がどういうサービスであったり、基本的な使い方について説明しました。AWS を利用する上で S3 はほぼ使用することになるため、以下のポイントを押さえた使い方をしていきましょう。

  • パブリックアクセスブロック設定を確認する
  • 必要最小限のアクセス権限のみを付与する
  • アクセス頻度に応じたストレージクラスを選択してコストを最適化する
  • 重要なデータはバージョニングを有効にして誤削除に備える

これらを意識することで、安全かつコスト効率の良い S3 運用ができます。