「静的Webホスティングができるよ〜」「ストレージサーバーとして使っているよ〜」という使い方はしてきたのですが、実は高機能だという事を最近知ったので、改めてS3の機能について洗い出してみました。
自戒の意味を込めた記事です
Contents
S3のアクセス制御
制御方法 | 説明 | 適用範囲 | ユースケース例 |
---|---|---|---|
バケットポリシー | - 特定のバケットやオブジェクトに対するアクセスを制御する - 他のアカウントに対しても適用できる - IPアドレスやドメイン単位での制御ができる |
バケット全体 | 静的ウェブサイトのホスティングで「GetObject」を許可。 |
IAMポリシー | - AWSユーザーやロール単位でS3のアクセス権限を付与する - IPアドレスやドメイン単位での制御ができる |
IAMユーザー、グループ、ロール | バックアップ用のS3バケットに特定のIAMユーザーだけがアクセス。 |
ACL(アクセス制御リスト) | - オブジェクトやバケット単位で細かなアクセス制御を設定する - 推奨されない - 他のアカウントに対しても適用できる - IPアドレスやドメイン単位での制御はできない |
バケットまたはオブジェクト | 一部のオブジェクトを公開アクセスにする。 |
S3のストレージクラス
ストレージクラス | 特徴 | 料金 | ユースケース |
---|---|---|---|
S3 Standard | - 高い可用性と耐久性(99.999999999%) - 即時アクセス可能 |
最も高いストレージ料金 | - 頻繁にアクセスするデータ - 重要なWebアプリケーションのデータ |
S3 Intelligent-Tiering | - アクセス頻度に応じて自動的に階層を移動 - アクセスがない場合は低コストになる |
アクセスと移行ごとに追加料金あり | アクセス頻度が不明なデータや長期間保存される可能性のあるデータ |
S3 Standard-IA (Infrequent Access) | - 高耐久で即時アクセス可能だが、アクセス頻度が低いデータ向け | 保存コストは安いが、アクセスごとに取り出し料金が発生 | バックアップデータやアーカイブなど、たまにアクセスするデータ |
S3 One Zone-IA | - 1つのAZにのみ保存されるため、低コストだが耐久性は低い。 | Standard-IAより安い | 再生成可能なデータや、特定の地域に限定されたデータ |
S3 Glacier Flexble Retrieval(旧S3 Glacier) | - 低コストの長期保存向け - 取り出しに数時間かかる場合あり。 |
非常に安価だが、取り出し時の料金が高い | 監査記録や法的なデータ保存 |
S3 Glacier Deep Archive | - 最も安価なストレージクラス - 取り出しに12時間以上かかることも。 |
最も低いストレージコスト | ほとんどアクセスされないデータの保存(数年単位のアーカイブ) |
S3 Glacier Instant Retrieval | - アクセスされることがほとんどなく、ミリ秒単位の取り出しが可能 | 標準よりやや安価 | すぐにアクセスする必要のあるアーカイブデータ |
S3の暗号化方式
サーバー側暗号化 (SSE: Server-Side Encryption)
Amazon S3がデータを保存する際に暗号化を実施
SSE-S3 (Server-Side Encryption with Amazon S3-Managed Keys)
特徴 | S3が自動的に管理するキーを使用して暗号化 |
管理 | ユーザー側のキー管理は不要 AWSでやってくれる |
ユースケース | デフォルトで簡単な暗号化を利用したい場合 |
SSE-KMS (Server-Side Encryption with AWS Key Management Service)
特徴 | AWS KMSを使用して、ユーザーが管理するキーで暗号化 |
管理 | ユーザーはAWS KMSのキー管理が必要。アクセス制御や監査ログが可能 |
ユースケース | 高度なキー管理や監査が必要な場合 |
SSE-C (Server-Side Encryption with Customer-Provided Keys)
特徴 | ユーザーが提供したカスタムキーを使用して暗号化 AWSはキーを保持しない |
管理 | ユーザーがキーを完全に管理する必要あり |
ユースケース | ユーザーが完全にキーを管理したい場合 |
クライアント側暗号化 (CSE: Client-Side Encryption)
クライアント(ユーザー)がデータをS3にアップロードする前に暗号化します。AWSは暗号化されたデータしか保存しません。
クライアント側暗号化 (CSE) の種類:
- CSE-KMS: AWS KMSを使用してクライアントがデータを暗号化。
- CSE-C: ユーザーが独自に管理するキーを使用してクライアント側で暗号化。
暗号化方式の選択ポイント
- デフォルトの簡単な暗号化: SSE-S3
- 監査ログやアクセス制御が必要: SSE-KMS
- カスタムキー管理が必要: SSE-C
- データをAWSに渡す前に暗号化したい: CSE-KMSまたはCSE-C
オブジェクトロック
S3バケット内のオブジェクトを一定期間、または無期限に「変更不可能」にするための機能です。
これにより、意図的または誤って削除・上書きされることを防ぎ、データの不変性(immutability)を保証します。
これは、金融・医療分野など、法的なデータ保持や監査要件のあるシステムに役立ちます。
リテンションモード
保存期間のあるロックモード。
- ガバナンスモード
- 保存期間が到来すると自動解除
- `s3:BypassGovernanceRetention` の権限を持っていれば削除可能
- コンプライアンスモード
- 保存期間が到来すると自動解除
- root ユーザーも含めて全てのユーザーが更新, 削除ができない
リーガルホールド
保存期間のないロックモード
- `s3:PutObjectLegalHold` の権限を持っていれば適用及び削除が可能
Transfer Acceleration
AWSのネットワークを用いて高速にデータを転送する機能。
(CloudFront経由のほうが早い説があったりする…?