
【VPC外リージョンサービス】
S3(Simple Storage Service) は、AWSが提供するオブジェクトストレージサービスです。高い耐久性(99.999999999%=11ナイン)を持ち、バケット と呼ばれるコンテナ単位でデータを保存します。
多様な ストレージクラス(Standard/Standard-IA/One Zone-IA/Intelligent-Tiering/Glacier など) を利用することで、データの使用頻度や重要度に応じてコストを最適化できます。
バージョニング を有効にすると、誤って上書きや削除を行った場合でも過去のデータを復元できます。
また、ライフサイクルポリシー を設定することで、一定期間後に別のストレージクラスへ自動移行したり、不要なオブジェクトを自動削除したりすることができます。
暗号化 にも対応しており、SSE-S3 や SSE-KMS を利用することで保存データを自動的に暗号化できます。さらに、バケットポリシー や IAMポリシー を用いて、ユーザー・アカウント・VPCなどの条件に基づいた厳格なアクセス制御を実現します。
レプリケーション機能 を使用すれば、他のバケットやリージョンへ自動的にデータをコピーでき、
DR(Disaster Recovery:災害対策) やデータ共有にも役立ちます。
オブジェクトロックを利用すると、指定期間中にデータを削除・上書きできないように保護でき、リーガルホールドを設定することで、特定のデータを法的保持対象として無期限に削除不可にすることも可能です。これにより、コンプライアンスや監査要件、法的証拠保全に対応することができます。
署名付きURLを利用することで、認証情報を共有せずに一時的にS3オブジェクトへのアクセスを許可することができます。これにより、特定ユーザーへの限定配布やダウンロードリンクの発行など、セキュアなアクセス制御を柔軟に実現できます。
S3は、イベント通知 や 静的ウェブサイトホスティング、サーバーアクセスログの収集 にも対応しており、
AWS Glue、Athena、EMR、Redshift Spectrum などの分析系サービスと連携することで、
データレイク基盤 として強力に活用することができます。
重要用語
ユースケース
| 静的コンテンツの保存と配信 | 画像・CSS・JavaScript・PDFなどの静的ファイルをS3に保存し、CloudFrontと組み合わせてWebサイトのコンテンツ配信に利用する。 |
| バックアップ・ログの集中保管 | アプリケーションログやRDSスナップショット、オンプレミスサーバーのバックアップデータをS3に集約し、耐久性の高いストレージとして保管する。 |
| データレイク基盤のストレージ | 分析用の生データ・加工データをフォルダ分けしてS3に保存し、AthenaやEMR、Glueなどから直接参照できるデータレイクとして利用する。 |
ベストプラクティス
| バケットポリシーの最小権限化 | 公開不要なバケットはパブリックアクセスブロックを有効にする。 |
| バージョニングとライフサイクル管理 | 削除・上書きに備えてバージョニングを有効化し、古いオブジェクトは自動で低コスト階層へ移行する。 |
| サーバーサイド暗号化 | SSE-S3またはSSE-KMSで保存データを暗号化する。 |
高可用性・バックアップ・リトライ
| 高可用性・バックアップ・リトライ設計のポイント |
|---|
| 【デフォルト】AWS内部で冗長化 ・データブロックのマルチAZ(オブジェクトの保存時、少なくとも3つ以上のAZ にコピーする) ・メタデータコントロールプレーン ・リクエスト制御プレーン ・内部ネットワークとレプリケーション制御 ・モニタリング・整合性検証 ・S3バケット命名・ルーティング層 |
| 【ストレージクラス】Standard / Standard-IA / Glacier / Deep Archive |
| 【バージョニング】上書きや削除された場合でも旧バージョンを復元可能 |
| 【ライフサイクル】データ冗長化+コスト最適化 |
| 【Cross-Region Replication】ディザスタリカバリ要件がある場合 |
セキュリティ
| 関連サービス | 設定内容 |
|---|---|
| KMS(データの暗号化と鍵の安全管理) | 【保存先がS3(SSE-S3)の場合】 独自KMSキー不要(鍵操作、監査ができない) |
| Secrets Manager(機密情報の安全管理) | - |
| SSM Parameter Store(設定情報の一元管理) | - |
| CloudTrail(操作履歴の記録・監査・追跡) | 【自動記録】 作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI) 【記録有効化を推奨】 データ操作(Put/Get/Delete)(データプレーンAPI) |
| Config(リソースの構成状態・設定変更を記録) | 【Configが有効な場合】 バケット設定変更履歴・公開設定/暗号化/バージョニング/ログ記録等の準拠評価 |
| GuardDuty(脅威を自動検出) | 【GuardDutyが有効な場合】 バケット削除/ACL変更のAPI異常検知 【追加オプション】 S3 Protection導入を推奨 S3 バケットへの API 呼び出しを監視し、不正アクセス・異常転送を検出 |
リソースベースポリシーによる補完
実行ロールで不足する権限をS3 のリソースベースポリシーで補うパターン
| リソースベースポリシーのPrincipal | リソースベースポリシーのAction |
|---|---|
| 【CloudFront】 cloudfront.amazonaws.com | s3:GetObject |
| 【ELB(アクセスログ)】 elasticloadbalancing.amazonaws.com | s3:PutObject |
| 【CloudTrail】 cloudtrail.amazonaws.com | s3:PutObject s3:GetBucketAcl |
| 【VPC Flow Logs】 delivery.logs.amazonaws.com | s3:PutObject |
| 【Config】 config.amazonaws.com | s3:GetBucketAcl s3:PutObject |
| 【RDS(スナップショットエクスポート)】 export.rds.amazonaws.com | s3:PutObject |
| 【CloudWatch Logs(エクスポート)】 logs.amazonaws.com | s3:PutObject s3:GetBucketAcl |
ログ・監視
| ログ出力先 | ログの種類 |
|---|---|
| S3 | サーバーアクセスログ |
標準メトリクス
| メトリクス名 | 説明 |
|---|---|
| ReplicationLatency | レプリケーション遅延 |
| NumberOfObjects | オブジェクト数(日次) |
| BucketSizeBytes | バケットサイズ(バイト)(日次) |
カスタムメトリクス(S3 Request Metrics)
| メトリクス名 | 説明 |
|---|---|
| AllRequests | 全リクエスト数 |
| BytesDownloaded | ダウンロードバイト数 |
| BytesUploaded | アップロードバイト数 |
| DeleteRequests | DELETEリクエスト数 |
| FirstByteLatency | 最初のバイトまでのレイテンシ |
| GetRequests | GETリクエスト数 |
| HeadRequests | HEADリクエスト数 |
| ListRequests | LISTリクエスト数 |
| PostRequests | POSTリクエスト数 |
| PutRequests | PUTリクエスト数 |
| TotalRequestLatency | 全体リクエストレイテンシ |
| 4xxErrors | 4xxエラー数 |
| 5xxErrors | 5xxエラー数 |
制限値(固定値/ハードリミット/ソフトリミット)
| 固定値 | 制限値 |
|---|---|
| バケット内オブジェクト数 | 無制限 |
| イベント通知の設定数 | 100/バケット |
| ハードリミット | 制限値 |
|---|---|
| オブジェクトサイズ | 最小0 Byte、最大5 TB |
| PUT 1回のアップロード | 最大5 GB |
| マルチパートアップロードのパート数 | 10,000パーツ |
| マルチパートアップロードの各パートサイズ | 5 MB - 5 GB |
| バケットポリシーサイズ | 20 KB |
| ソフトリミット | 制限値 |
|---|---|
| バケット数/アカウント | 10,000(デフォルト100から増加) |
| リクエストレート(GET/HEAD) | 5,500リクエスト/秒/プレフィックス |
| リクエストレート(PUT/COPY/POST/DELETE) | 3,500リクエスト/秒/プレフィックス |
AWS CLIのサンプルコード
S3 バケットを作成する
aws s3 mb s3://bucket-name
S3 バケットの一覧を表示する
aws s3 ls s3://bucket-name
S3 バケットを削除する
aws s3 rb s3://bucket-name --force
ファイルをアップロードする
aws s3 cp file.txt s3://bucket-name
ファイルをダウンロードする
aws s3 cp s3://bucket-name/file.txt .
ファイルを削除する
aws s3 rm s3://bucket-name/file.txt
CloudFormationのサンプルコード
Terraformのサンプルコード
料金計算
| 課金項目 | 説明 |
|---|---|
| ストレージ容量 | 保存するデータ量に基づく課金 (Standard、Intelligent-Tiering、Glacierなど) |
| リクエスト数 | PUT、GET、POST、LISTなどの APIリクエスト数に基づく課金 |
| データ転送 | インターネットへのデータ転送量(アウトバウンド) |
| レプリケーション | クロスリージョンレプリケーション(CRR)の転送量 |
| データ取得 | Glacier系ストレージからのデータ取得料金 |
| 管理と分析 | S3 Inventory、Analytics、Object Taggingの使用料 |