概要
Amazon S3(Simple Storage Service)とは、高耐久・大容量のオブジェクトストレージサービスです。いわゆる、私たちユーザが使っているようなクラウドストレージサービスです。(iCloudやDropboxのようなイメージです)
なぜオブジェクトストレージサービスというかと言うと、S3ではデータをオブジェクトとして扱うからです。そんなに深い意味はありません。(笑)
S3では、データを「バケット」という単位で扱います。まさに、バケツに大量のデータが入っているような感じです。
比較できるのが、Amazon EBS(Elastic Block Store)です。こちらは、EC2にアタッチして使うブロックストレージサービス。EBSでは、データを「ブロック」という単位で扱います。
「バケット」と「ブロック」はデータの細かさが違います。ブロックのほうがより細かいので、EBSはデータの更新頻度が高いHDDのような役割を果たします。
一方バケットは、データ量が大きく更新頻度はEBSほど高くありません。バケツにデータがぶち込まれている感じですね。
では、ここからはS3に関するさまざまな機能や特徴を見ていきましょう。
可用性・復元性に関する機能
S3には、デフォルトで以下のような機能があります。
・同一リージョンの3か所のAZ(Availability Zone)に自動複製
・99.9999999%の耐久性(イレブンナイン)
十分耐久性がありますが、中には誤ってデータを削除してしまったり、大規模災害でS3のあるリージョンが被災してしまったりする可能性もゼロではありません。
そこで、S3では以下の機能を有効にすることで、データの可用性や復元性を高めることができます。
バージョニング機能
バージョニング機能とは、オブジェクトの世代管理を提供する機能です。オブジェクト単位でID管理しているので、誤ってデータを更新・削除してしまった場合でも、以前の世代に戻すことができます。
有効にすることで、データの復元性が向上する。
機能を使うためのコストが発生する。
クロスリージョンレプリケーション
クロスリージョンレプリケーションとは、別のリージョンのS3バケットにオブジェクトを自動的に複製する機能です。
S3に保存したデータは、デフォルトで同一リージョン内の3か所のAZに自動複製されます。しかし、クロスリージョンレプリケーションを有効化することで、さらにデータの可用性を向上させることができます。
セキュリティに関する機能
S3には、重要なデータが保存されることもあるのでセキュリティ対策を行うことが必須です。S3で実施でいるセキュリティ対策には、「アクセス制御」と「暗号化」があります。
それぞれ詳しく見ていきましょう。
アクセス制御
S3では、主に以下の4つの方法でアクセス制御を行います。
IAMポリシーによるアクセス制御
AWSでは、IAMユーザーやIAMグループという、いわゆるユーザーやグループを作成することができます。また、IAMポリシーというのは、アクセス制御のルールと思ってください。
IAMユーザーやIAMグループに、適切なIAMポリシーを付与することでAWSサービスに対するアクセス制御を行うことができます。
S3でも、このIAMポリシーを付与することによって、限られたIAMユーザやIAMグループにだけアクセスを許可することができます。
バケットポリシーによるアクセス制御
バケットポリシーとは、あるS3バケットに対して、JSONコードを記述してバケット全体に対するアクセス制御を行う機能です。
バケットポリシーを設定することで、IPアドレスによる制御や、IAMユーザに対するS3バケットへの細かなアクセス制御を行うことができます。
※JSONコードとは
Java Script Object Notationの略。データ記述言語の一つ。キーとバリューの構成でデータを表現する。
ACLによるアクセス制御
ACL(Access Control List)とは、S3バケットやオブジェクトに対してAWSアカウントレベルでアクセス制御するための機能です。
ACLからパブリックアクセスの設定を行うと、不特定多数のユーザへファイルを公開することもできます。
ブロックパブリックアクセスによるアクセス制御
ここまでの機能の中で、バケットやオブジェクトのアクセス制御に用いられるのは、主にバケットポリシーとACLによるアクセス制御です。
しかし、それぞれには以下のような問題があります。
・JSONコードという特有の記述方法が必要になる。
・公開設定以外にも、さまざまな組み合わせの条件があり管理しづらい。
・バケットへのACL設定より、オブジェクトへのACL設定が優先されるため、常にアップロードされたオブジェクトに対してパブリックアクセスが拒否されているか確認しなければいけない。
そこで登場したのが、ブロックパブリックアクセスによるアクセス制御です。
ブロックパブリックアクセスを用いれば、ACLとバケットポリシーに対して一括してパブリックアクセスの制御を行うことができるのです。
そのため、ACLによるオブジェクトへのアクセス制御の漏れを防げますし、簡単にバケットポリシーを設定することができます。
※ちなみに、バケットポリシーはACLよりも優先されるので、バケットポリシーでパブリックアクセスが拒否されていれば、オブジェクト単位での制御は必要なくなります。
暗号化
S3バケットに保管されたデータの暗号化には、以下の3つの方法があります。
- S3のデフォルトキーを使用したAES-256暗号化
- AWS Key Management Service(KMS)で管理されている鍵によるAES-256暗号化
- ユーザーの任意の鍵によるAES-256暗号化
これらの暗号化の方式には、鍵の管理の違いがあります。
・ S3のデフォルトキーを使用したAES-256暗号化
・ AWS Key Management Service(KMS)で管理されている鍵によるAES-256暗号化
・ユーザーの任意の鍵によるAES-256暗号化
コスト最適化に関する機能
S3は、容量あたりの料金が安価に抑えられていますが、以下の機能を利用することで、さらにコストを最適化することができます。
ストレージクラス
ストレージクラスとは、S3の利用形態のことです。ストレージクラスには、以下のものがあります。
スタンダード
デフォルトのストレージクラスで、99.999999999%の耐久性を備えています。
標準低頻度アクセス(Standard-Infrequent Access)
スタンダードと同じ耐久性を兼ね備えており、スタンダードより低コストです。しかし、データの読み取りに課金されるため、長期間保管やバックアップ用途に利用されます。
1ゾーン低頻度アクセス(One Zone-Infrequent Access)
標準低頻度アクセスほど耐久性を必要としない場合に利用します。1か所のAZのみにデータを保存するため、標準低頻度アクセスよりさらに安価に利用できます。
低冗長化ストレージ(Reduced Redundancy Storage)
2か所のAZでのレプリケーションです。スタンダードと比べて耐久性は落ちるものの、コストを抑えて利用できます。
Amazon S3 Glacier
アーカイブを目的としたストレージで、大容量のデータを安価に保管できますが、データへのアクセスに時間を要します。
Glacierよりさらに取り出しに時間がかかるものの、より安価に利用できるのがGlacier Deep Archiveというストレージクラスです。
Intelligent-Tiering
低頻度・高頻度の2階層のストレージ層を用意し、S3上に格納したオブジェクトへのアクセス頻度に応じて、コストに見合った最適なストレージ層を自動的に使い分けるタイプです。
ライフサイクルポリシー
ライフサイクルポリシーとは、一定期間経過後オブジェクトを自動で削除したりアーカイブしたりする機能です。
ライフサイクルポリシーの設定場面は、例えばバージョニング機能を有効にした時です。バージョニング機能を有効にすると、バージョンごとにオブジェクトが保管されますが、それぞれの旧バージョンのオブジェクトには課金があります。ずっとオブジェクトを残していると、課金され続けるのです。
そこで、ライフサイクルポリシーを設定してあげると、一定期間経過後古いバージョンのオブジェクトを自動で削除してくれるので、コストの最適化になるということです。
ストレージ以外でのS3の用途
S3は、主にストレージとしての役割を果たしますが、ストレージ意外にも以下のような用途があります。
Webサイトホスティング
S3には、静的なコンテンツのWebサイトホスティング機能があります。これは、S3はWebサーバではないが静的なWebページを配信できる、という機能です。
この用途には、例えばSorryページの表示があります。Sorryページとは、VPC内のEC2が障害でダウンしている際、「システム障害により、ページが表示されません」といったような文言を表示させるページのことです。
このSorryページのhtmlファイルがS3に保管されていることで、EC2のWebサーバが起動できない場合でも、静的なコンテンツを配信することができるというのが、S3のWebサイトホスティング機能です。
署名付きURL
S3は、署名付きURLを発行することができます。署名付きURLとは、S3上のデータに対して、一定時間だけアクセスを許可するためのURLです。
これにより、AWSへログインできないユーザーでも、S3上のデータにアクセスすることができます。
例えば、お客様にS3上にデータをアップロード、あるいはS3上からデータをダウンロードしてほしいとします。その際に、署名付きURLを発行しお客様に渡すことで、本来アクセスできない会社のS3にアクセスでき、アップロードやダウンロードを行うことができるのです。
まとめ
以上、Amazon S3の機能や特徴を説明してきました。以下に、簡単にまとめます。
・バケットという単位でデータを扱う(バケットの中にオブジェクト)
・同一リージョンの3か所のAZ(Availability Zone)に自動複製
・99.9999999%の耐久性(イレブンナイン)
可用性・復元性に関する機能
・バージョニング機能
・クロスリージョンレプリケーション
セキュリティに関する機能
・アクセス制御
・暗号化
コスト最適化に関する機能
・ストレージクラス
・ライフサイクルポリシー
ストレージ以外の用途
・Webサイトホスティング
・署名付きURL