はじめに
本記事では、AWS最も基本的かつ重要なストレージサービスであるS3について解説します。
Amazon S3の基本
ストレージクラス
- Standard
頻繁にアクセスするデータ向け - Standard-IA
アクセス頻度が低いマスターデータの長期保存向け - Glacier
アーカイブデータ向け
S3のデータ保護機能
オブジェクトロック機能
S3バケットに保存されるドキュメントが保存後に変更も削除もできないようにするには、オブジェクトロックのコンプライアンスモードを活用する。
- コンプライアンスモード
オブジェクトが削除または上書きできないように一定期間または無期限に防止できる。 - MFA Delete機能
バケットからのデータ削除時にMFA入力を必須化して、誤った削除を防止する。
データ削除保護の選択
- 一部社員が消せない → ガバナンスモード
- みんな消せない → コンプライアンスモード
S3の暗号化オプション
- SSE-S3
AES-256を利用したS3の暗号化機能。追加料金が発生せず、APIコールの制限を考慮する必要もないのがメリット。ただし、利用状況の監査証跡が取れないのがデメリット。 - SSE-C
顧客が管理する暗号化キーをS3に適用する形式。ユーザー側で独自の暗号化キーを作成可能。 - SSE-KMS
暗号化キーの管理機能をマネージドサービスで提供。CloudTrailによりアクティビティの証跡ログが取得可能。
S3の拡張機能
S3イベント通知
S3バケットに新しいオブジェクトがアップロードされた際などに、自動的に処理を実行できる機能。
S3バケットにデータが保存されたイベント → トリガー → Lambda関数 → データ処理
S3 Select
シンプルなSQLステートメントを使用してS3オブジェクトのコンテンツをフィルタリングし、必要なデータのサブセットのみを取得できる機能。
S3が転送するデータ量を削減でき、データ取得コストと待ち時間を改善できる。
S3の応用的な活用法
静的ウェブホスティング
S3バケットを使って静的ウェブサイトをホスティングする方法は下記である。
- 静的ウェブホスティングをS3バケットに構成
- Amazon CloudFrontを構成し、S3バケットをオリジンとして設定
- バケットポリシーでインターネットからのS3:GetObjectを許可
- パブリックアクセスブロックを無効化
S3バケットへのアクセス制限
特定のユーザーに一時的にアクセス許可を与える方法
事前署名付きURLを発行することで、特定の画像を一時的に共有するための特別なURLを発行できる。
不正アクセスからの保護
- Referer制限
CloudFrontディストリビューションにAWS WAFを設定し、直接URLリンクを参照することを制限する - OAI(オリジンアクセスアイデンティティ)
CloudFront側でOAIを割り当て、そのOAIにのみS3バケット内への読み取り権限があるようにS3バケットポリシーを設定 - OAC(オリジンアクセスコントロール)
OAIと同様の機能を提供する新しい方式
S3 Transfer Acceleration
S3バケットへのデータアップロードを効率化する機能。
CloudFrontのエッジロケーションを活用して、遠隔地からのアップロードパフォーマンスを向上させる。
マルチパートアップロード
大きなファイルを分割してアップロードする機能で、アップロード速度の向上と信頼性の確保に役立つ。
暗号化関連の注意点
S3バケットでは、バケットポリシーによってデータアップロードリクエストを評価してアクセス許可を実施した上で、データアップロード時の暗号化が適用される。
バケットの暗号化設定を有効化していても、暗号化情報なしのPUTリクエストを拒否するバケットポリシーがある場合は、そのPUTリクエストは拒否される。
暗号化失敗が発生した場合は、バケットポリシーの設定を確認する。