【AWS完全に理解したへの道】 S3編
本記事を書くための主とした動機
クラウドサービスがデフォルトスタンダードになりつつある昨今、私もそろそろAWSを理解していかないとまずいということで、まずは基本レベルを記事としてまとめることで記憶の定着に役立てる。さらに深掘りした内容は別の題目として記述することとする。
※AWSの公式ドキュメントを見れば、基本レベルのことは全て書いてあるとは思うし、情報がアップデートされている可能性もあるので正確な情報を見たい人はそちらを見てください。
S3とは
特徴
データ形式
Key-Value形式でのデータ管理を行う
耐久性
データを失わないことを保証するレベル
99.999999999% / 1年間
可用性
システムが稼働し続けることを保証するレベル
99.99% / 1年間
データ整合性
結果整合性なので操作完了のステータスが返ってきたとしても結果が反映されるまでにタイムラグがある
具体例
-
【読み込み整合性】新しいオブジェクトの書き込み
S3から「完了」が返されるまで新しく書き込んだオブジェクトはバケット内の一覧には表示されない -
【結果整合性】既存オブジェクトの上書き
S3から「完了」が返された後でも上書き前のデータが返ってくることがある。
一定時間経つと上書き後のデータが返ってくるようになる。 -
【結果整合性】オブジェクトの削除
S3から「完了」が返された後でも、削除操作を行った後のデータがバケットの一覧に表示されたり、データにアクセスできたりする。一定時間経つとバケットの一覧に反映されなくなり、当然データにもアクセスできなくなる。
アクセス制限
アクセス管理の方法
S3へのアクセス管理方法は以下の4つ
- アクセスコントロール(ACL)
- バケットポリシー
- IAMポリシー(ユーザポリシー)
- 署名付きURL
1.アクセスコントロール(ACL)
【できること】
バケットとオブジェクトそれぞれについて、読み取り/書き込みの許可を他のAWSアカウントに与えることができる。
オブジェクトに付与されているURLにHTTPSアクセスの許可をあたえることができる。
【できないこと】
条件付きアクセス許可を与えること、アクセス拒否の設定、自アカウント内のIAMユーザやグループのアクセス制限をすることはできない。
2.バケットポリシー
【できること】バケットごとに、自アカウント内のIAMユーザやグループ、他アカウントのユーザに対してアクセス許可を与えることができる。
条件付きのアクセス許可やアクセス拒否の設定もできる。
【できないこと】
3.IAMポリシー(ユーザポリシー)
【できること】
S3に対するアクセス可否許可を設定した自アカウント内のIAMユーザやグループ、ロールに割り当てることができる。またバケットポリシーと同様に
条件付きのアクセス許可を与えること、アクセス拒否の設定をすることもできる。
【できないこと】他アカウントを指定したアクセス権の設定はできない。
4.署名付きURL
S3バケットに格納された特定のオブジェクトを限られたエンドユーザにのみアクセスさせる
S3オブジェクトの暗号化とアクセスログ
S3オブジェクトの暗号化やアクセスログの取得はデフォルトではなくユーザ責任によって行う。
- オブジェクトの暗号化
【クライアント側】
クライアント側で事前に暗号化したデータをS3バケットにアップロードする
【サーバサイド側】
AWS側が管理する鍵やユーザが管理する鍵を使ってS3上で暗号化する - アクセスログ
S3バケットへのアクセスログを任意で同じかまたは異なるS3バケットに取得することができる
アクセスログに関して完全性は保証されず、アクセスログ格納バケットへのログの格納は実際のアクセスから時間をおいて行われる。
S3の静的Webサイトホスティング機能
【できること】
サーバ側のプログラム実行による動的なページはS3でホスティングできない
【できないこと】
静的なページやJavaScriptなどクライアント側で実行されるプログラムを含んだページ
【メリット】
EC2を利用するよりも運用の負荷やコストを抑えることができる。
アクセス先のエンドポイント
バケット名.s3-website-リージョン名.amazonaws.com
独自のドメインでアクセスさせるためにはRoute 53などのDNSサービスにより名前解決する必要がある。
S3のバージョニング機能
ユーザ任意でオブジェクトのバージョン管理を行う機能、デフォルトはOFF
S3バケット単位で有効にすることができる。
オブジェクトを誤って上書きしたり、削除した後でも操作前のオブジェクトを復元することができる。
Glacierとは
【用途】
参照する頻度の少ないデータを長期保管する
【データ格納方法】
-
S3のライフサイクル機能
-
SDKを利用して直接格納する
-
S3バケットに格納したオブジェクトを指定した日数が経過した後にGlacierに移行したり、削除したりすることができる機能
-
SDK(基盤となるREST APIをラップすることによりプログラミングの作業を簡素化したもの)を使って格納。
【デメリット】
- Glacierに格納した後、データを取得するのにデータの大きさに関わらず3~5時間時間がかかる。
- Glacierに保管しているデータ量の5%を超える場合、データ取り出しのための料金がかかる。