はじめに
2度目の投稿。機能やストレージクラス、暗号化の内容がいろんなところに散らばっててまとめるのに時間がかかりました。。
S3とは?
オブジェクトストレージサービスの一種であり、データ容量を気にすることなく保存が可能。バックアップストレージ、動画や画像ファイルなどのメディアファイルのホスティングなどに使用される。オブジェクトのファイル単位での出し入れも可能。オブジェクトURLという保存されたデータに紐づいてURLをクリックすることでそのデータにアクセスすることができ、インターネット経由でのデータアクセスが可能となる。
AMIでアクセス制限の設定を行うことができる
デフォルトではアカウント管理者およびルートユーザーのみアクセスが可能
- プレフィックスごとに1秒あたり3500回以上のPUT/COPY/POST/DELETEリクエストまたは5500回以上のGET/HEADリクエストが可能
- 発生するリクエストが高い場合(オブジェクトに対して1秒あたり5000リクエストを超える率が持続される)にHTTP 503 slowdownレスポンスが発生する
- データ転送時には約100~120ミリ秒の一定のレイテンシを実現できる
カスタムプレフィックスを利用して並列処理をすることでパフォーマンスを向上させることもできる
オブジェクトストレージ
「オブジェクト」という最小単位でデータを保存、管理するストレージ形式。ファイルストレージよりも多くのメタデータを任意で設定可能。REST APIによって操作でき、サーバーを介した操作が不要になる。他のストレージ(EBS、EFS)より読み書き速度が遅いが、多数の大きなファイルをに取り扱うのに向いている。データは「階層構造のないフラットなアドレス空間」に保存される
メリット
- フラットなアドレス空間に保存されているため、インデックスの作成が容易
- 大規模なデータや非構造かデータでも高速な検索が可能
- 仮想化技術を使用して複数のサーバを1つのストレージプールトする分散ファイルストレージ形式で構成することが可能
- HTTP(S)によるREST形式で場所を問わず自由なアクセスを実現している
・メタデータとは?
「ファイル名」「ファイルサイズ」「日付」「コピー回数」「保管期限」「データの種類」などのこと
・REST(representational state transfer)とは?
シンプルなwebシステムの設計思想のこと。「統一インターフェイス」「アドレス可能性」「接続性」「ステートレス性」の4つの原則を持っている。
詳細はこちら
S3の特徴
-
柔軟なストレージ機能
ストレージが自動的に拡張・縮小されるため、事前に正確な容量計算や先行投資して余分にリソース確保する必要がない - 耐久性と可用性の高さ
-
低コストによる運用が可能
S3の料金は実際に保存されている容量とリクエスト数、データの転送料金などを参考に決定される。従量課金制のためコストを意識した利用が可能になっている。また、静的WEBサイトを低コストでホスティング(サーバーを借りること、レンタルサーバー)したい場合も有効
オブジェクトへのリアルタイムアクセスができ、バージョン管理もすることが可能
Data Consistency Model(データ整合性モデル)
強い整合性モデルを利用しているため、反映に誤差が生じることがない。オブジェクトの上書き後すぐに最新の情報にアクセスすることが可能。また、書き込み後に変更を反映したオブジェクトのリストをすぐに取得することが出来る。
プレフィックス
オブジェクト名の前の完全なパスとなることができる文字列のこと。オブジェクトキー名全体を含む任意の長さに設定することができる。
毎秒3500件のPUT/COPY/POST/DELETEリクエストまたは5500件の GET/HEADリクエストをサポートできる。バケット内で持つことができるプレフィックスの数に制限はない
代表的なユースケース
- バックアップとストレージ
- アプリケーションのホスティング
- メディアのホスティング
- ソフトウェアの配信
- 静的なwebサイトのホスティング
S3の機能
バケットポリシー
バケットのアクセス権をJSONで設定することができる。1つのバケットに対して1つだけ設定可能
外部ユーザーやアプリケーションなども管理可能
ACL(アクセスコントロールリスト)
バケット・オブジェクト単位でのアクセス権をXMLで設定することができる。オブジェクトに個別に設定可能
S3アクセスポイント
S3の共有データセットへの大規模なデータアクセスの管理を簡素化する機能。バケットにアタッチされた名前付きのネットワークエンドポイントで、S3 オブジェクトのオペレーション (GetObjectやPutObjectなど) を実行するために使用する。
Block Public Access
インターネットからのアクセスをブロックする機能。デフォルトで有効化されている
事前署名付きURL
特定のユーザーのみがアクセスできる特別なURLが利用可能になる。AWS SDK、CLIによって生成することができる。デフォルトでは3600秒利用制限時間になる
Block Public Accessが有効化になっていてもアクセスは可能
静的WEBホスティング
S3を利用して簡易な静的WEBサイトを作ることができる機能。サーバーなしにwebサイトをホスティング可能なため値段が安い。Route53にて独自ドメインを設定することができる。単独ではSSLが使用できないので、CloudFrontが必要になる
静的webサイトとは??
webサイトの構成の一つで、静的コンテンツのみで構成されたサイト。動的な仕組みがないためサイトを設置するサーバー環境を選ばず、負荷も軽くセキュリティ上のリスも低いという特徴がある。
・静的コンテンツ
テキストや画像、音声、文ファイルなどのコンテンツを提供するが、内容をwebサーバー上にファイルとして保存しておき、ブラウザの要求に応じて送信するだけのもの。
・動的コンテンツ
HTMLフォームなどを利用する。閲覧者側から何らかのデータを送信し、サーバ上でプログラムを起動してこれを処理し結果を反映して動的に生成したもの。
静的WEBホスティングの流れ
- S3静的WEBサイトホスティング機能の有効化
- パブリックアクセスの無効化
- バケットポリシーで
s3:GetObject
を設定
ライフサイクル管理
オブジェクトをコスト効率よく保管するために使用する。オブジェクトを異なるストレージクラスに自動的に移行したり、期限切れにすることができる。移行時には料金が発生する
オブジェクト更新日を基準にして日単位で指定し、毎日0:00UTC(世界標準時間)にキューが実行される
MFA Deleteが有効だと設定不可
・Transition actions(移行アクション)
別のストレージクラスにオブジェクトを移行するタイミングを定義する。
・Expiration actions(有効期限切れアクション)
オブジェクトの有効期限を定義し、ユーザーに代わって有効期限切れのオブジェクトを削除する。
バージョニング
バケット単位で単一のオブジェクトの複数のバージョンを保持、管理できるようになる。操作ミスによる削除に対しても、簡単に復旧できる手段を提供する。デフォルトでは無効になっている。変更前と変更後のオブジェクトは異なるバージョンIDをそれぞれ保持する。
- オブジェクトの旧バージョンをアーカイブに移動することはできない
- ライフサイクル設定時では失効か削除するアクションを行う
有効前のオブジェクトにはIDは付与されず「null」と表示される
MFA Delete機能
バージョニングと組み合わせて利用し有効にすることで、特定の操作で追加のMFA認証が必要になる
設定するにはCLI、AWS SDK、REST APIで可能。マネジメントコンソールから不可となる
- バケットのバージョニング状態を変更する操作
- オブジェクトのバージョンを完全削除する操作
S3 Event Nortification
S3バケット内でオブジェクトの作成・削除・復元などのイベントが発生したときにお知らせを受けることができる。SQS,SNS。Lambdaと連携することが可能
SRR(Single-Region Replication)
同一リージョンのバケットに同じデータを保存する。本番用のデータとテスト用のデータと分ける際などにレプリケーションしてバケットを複数設定できる
CRR(Cross-Region Replication)
異なるAWSリージョンにあるS3パケット間でオブジェクトをコピーするために使用される。リージョン障害として使われる。
事前にバージョニング機能を有効にする必要がある。データ転送費用が発生する
- イベントリ:格納されているオブジェクト、metaデータ、暗号化ステータスの可視化
- バケットにオブジェクトが作成・更新・削除された際のイベントをトリガーとしてレプリケーションが実行される
CROS(Cross-Origin Resource Sharing)
アプリケーション上で複数ドメインからのコンテンツアクセスをS3バケットに許可する際に利用する仕組み。アクセス元のアプリのオリジンとアクセス先のリソースのオリジンが異なる場合に発生する。HTTPリクエストを行う場合は、リクエストできように許可する必要がある。
セキュリティについて
オブジェクトロック
S3バケットに保存するオブジェクトに対してWORN(Write Once Read Many)モデルを提供する機能。オブジェクトが削除及び上書きされるのを一定期間または無期限に防止することができる。
オブジェクトロックを有効にすると、自動的にバージョニングも有効になり無効化はできない。
リテンションモードとリーガルホールドの2種類のモードがある
オブジェクトロックの有効化は、S3バケット作成する際にしか実施できない
リテンションモード
以下の2つのモードにさらに分けられる
-
ガバナンスモード
s3:BypassGovernanceRetention
権限を持たないユーザーはオブジェクトの上書き、削除ができない。 -
コンプライアンスモード
ルートユーザーを含め、全てのユーザーはオブジェクトの上書き、削除ができない。
一度コンプライアンスモードでロックしてしまうと保持期間を過ぎるまでオブジェクトの削除などができなくなる
リーガルホールド
オブジェクトの上書き、削除を無期限にロックすることが可能。s3:PutObjectLegalHold
の権限を持つユーザー/ロールのみロックの無効化が可能
Vault Lock
Vault Lockには以下の2種類が存在する
Vault access policy
コンプライアンスに関係なく「一時的で頻繁に変更される」アクセス制御を行う際に使用する。アクセスポリシーを適用して権限管理をすることができ、指定した第三者に対して読み取り許可をすることができる
Vault Lock policy
Vault access policyと一緒でアクセス制御を行うが、「将来的な変更を防止するためにロックすること」ができコンプライアンス制御を強力にすることが可能になる。
OAC(オリジンアクセスコントロール)
指定のCloudFrontディストリビューションにのみS3バケットへのアクセスを許可することによって、S3オリジンを簡単に保護できるようにする機能。
- 短時間のみ有効な商人情報およびより頻度の高い認証ローテーションによるセキュリティ体制の強化
- リソースベースのきめ細かいポリシー設定
- SSE-KMSの使用
AWS KMS(Key Management Service)
データの暗号化に利用する暗号化キーの作成・管理を行うためのマネージドサービス。AZをまたいだ冗長化により高可用性を担保することし、CMK(カスタマーマスターキー)の耐久性は99.999999999%(イレブンナイン)
サーバサイド暗号化
データセンターのディスクに書き込まれる時に、データをオブジェクトレベルで暗号化し、利用者がデータにアクセスする時に複合する
S3バケットのデフォルト暗号化を有効化することで、各アクセスログファイルはS3バケットに保存される前に自動的に暗号化される
-
SSE-S3(Sever Side Encryption With S3 managed keys)
S3の標準暗号化方式で簡易に利用可能で、所有者であるAWSアカウントID以外からのアクセスを拒否する。暗号化用のマネージドキーの作成・管理をS3側で自動で実施してくれる。Advanced Encrypiton Standard(AES-256、ブロック暗号の一つ)を使用して暗号化する
暗号化する場所:AWS側
鍵を管理する人:S3
料金かからず無料で使用可能 -
SSE-KMS(Sever Side Encryption With KMS managed keys)
KMSに設定したキーを利用した暗号化を実施。復号化するためには権限が必要になる。AES-256を利用する
暗号化する場所:AWS側
鍵を管理する人:KMS
CloudTrailで証跡、ログの管理が可能 -
SSE-C(Sever Side Encryption With Client provided keys)
利用者が指定したキーによるサーバ側の暗号化
AWS SDK(Software Development Kit)が提供するS3のファイルのクライアントサイドの暗号化(Client Side Encryption)を利用することで、高いセキュリティを提供することができる
暗号化する場所:AWS側
鍵を管理する人:ユーザー
・クライアントサイドの暗号化(Client Side Encryption)とは?
ユーザー自身が作成した秘密鍵によって暗号化・復号化する暗号化方式。利用者が用意したキーによって、クライアント内で暗号化したオブジェクトをS3に登録することで、暗号化されたオブジェクトはユーザー以外に復号化が不可能になる。
クロスアカウントアクセス
別のアカウントのIAMユーザーやロールからのアクセスを許可する設定。以下の3つの方法がある
-
バケットポリシーとIAMポリシーによる許可
S3バケットへのアクセスを許可するIAMポリシーを設定し、IAMユーザーとロールに付与する。
クロスアカウントアクセスを許可する場合は。バケットポリシーでアカウントを指定して許可を行う -
ACLとIAMポリシーによる許可
S3バケットへのアクセスを許可するIAMポリシーを設定し、IAMユーザーとロールに付与する。
S3バケットの特定オブジェクトへのクロスアカウントアクセスを許可する場合は、ACLでアカウントを指定して許可を行う -
IAMロールによる許可
ロールの権限移譲を利用して、S3バケット・オブジェクトへのプログラムによるアクセスまたはコンソールアクセス用のクロスアカウントのIAMロールを設定する
AssumeRoleの実行を許可したロールにより別アカウントのユーザーに権限を委譲する
アップロードについて
S3 Multipart Upload
大きなファイルをアップロードするのに有効
アップロードするファイルをいくつかに分割し、そのファイル(パート)をそれぞれアップロード後再び1つのファイルに結合する機能。
- Multipart Upload APIを使用して実行する
- 100MB以上のオブジェクトに推奨
- 5MB~5TBまでのオブジェクトに使用可能
5GBを超える場合は使用必須!!
S3 TransferAcceleration
地理的に分散したオブジェクトを1つのS3にアップロードする際に有効
エッジロケーションを利用して、クライアントとS3パケット間の長距離ファイルを高速、簡単、かつ安全に転送できる機能を提供する。
通常速度より早ければ課金される
アップロードを高速化するための機能のため、ダウンロードのために使用しない
AWS Transfer Family
SFTP,FTP,FTP,AS2プロトコルを使用して、ストレージサービスへの定期的な企業間ファイル転送を安全にスケールする。クライアント側の既存の認証、アクセス、ファイヤーウォールの設定を維持することで、S3およぼEFSとの間でのファイル転送ワークフローをシームレスに移行、自動化、モニタリングする。
料金
リクエスタ支払い
リクエスタ支払いを設定することで、リクエストおよびバケットからのデータのダウンロードにかかるコストをリクエストを実行した者が支払うようにすることができる。データを共有したいが、他社がデータにアクセスする際に発生する費用を負担したくない時に有効。
ストレージクラス
大きく分けて以下のカテゴリに区分される
-
データ容量
データ量と保存期間に応じて課金される -
転送料
受信は同一リージョンのAWSサービスとの連携は無料だが、インターネットへのデータ転送、S3からAWS内でのデータ転送は料金がかかる -
リクエスト料とデータ取得
GET/PUT/POST/LIST/COPYなどのリクエスト数に対しての課金、データを取得した量に応じて課金される -
アップロード
S3へアップロードする際、転送容量の課金はないが転送回数の課金はある
ストレージクラスのStandardで月額1GB/約3円の保管料金がかかり、Standard-IAとOneZone-IAではオブジェクトごとに最低容量の料金も発生する
どのクラスでもデータ転送における課金はなし
Standard
標準的なストレージクラスで、月に何度もアクセスする場合は推奨
複数のAZにまたがってデータを複製するため耐久性が高い
遅延も少なく、スループットが高いため幅広い用途で使用されている
【代表的な用途】
・クラウドアプリケーション
・動的なwebサイト
・コンテンツ配信
・モバイルやゲームのアプリケーション
・ビッグデータ分析
Standard-IA(Infrequency Access)
アクセス頻度は低いけど、必要な時にすぐに取り出したいという用途で使用するストレージクラス
Standardと比べてスペックは一緒で安価。しかし、データを取り出す際料金発生
【代表的な用途】
・長期保存
・バックアップ
・災害対策ファイルのデータストア
One Zone-IA
1つのAZ内にデータを保存するため、Standard-IAよりも20%ほど安い。冗長性を気にしない、あまり重要ではないデータ保存に向いている
【代表的な用途】
・セカンダリバックアップのコピー
Intelligent-Tiering
各オブジェクトのアクセス頻度のモニタリングを行い、自動的に階層の移動が実現され適切なストレージ料金を適用できる。以下4つの階層に振り分けられる
Glacier Instant Retrieval
アクセス頻度が1ヶ月に1回以下向け。StandardやStandard 1-Aと同様ミリ秒単位のアクセスができ、Standard 1-Aと比べて最大68%コスト削減することが可能。
瞬時に取り出すことも可能である。
最低保持期間は90日間のため、それより前に削除しても90日分料金が取られる
【代表的な用途】
・医療画像やゲノミクスデータの取得
Glacier Flexible Retrieval
オブジェクトアーカイブに適したクラス。アクセスに数分から数時間かかっても問題なく、年に1回アクセスされるアーカイブデータが対象
オブジェクトを取り出す際は以下のオプションを選択できる
最低保持期間は90日間のため、それより前に削除しても90日分料金が取られる
オプション | データ取り出し時間 | 特徴 |
---|---|---|
迅速(ExpediteRetival) | 1~5分 | 緊急でデータ取り出しが必要な場合に使用。最大規模のアーカイブ(250MB以上)は対象外 |
標準(Standard) | 3~5時間 | 取り出しオプションのデフォルト設定 |
大容量(Bulk) | 5~12時間 | 最も安価な取り出し。大量のデータ(ペタバイトのデータ含む)を1日以内に低コストで取得 |
Glacier Deep Archive
S3で最安のストレージクラス。年に1回もアクセスされないような長期保存に向いている。オブジェクトを取り出す際は以下のオプションを選択できる
最低保持期間は180日間*
オプション | データ取り出し時間 |
---|---|
標準(Standard) | 12時間以内 |
大容量(Bulk) | 48時間以内 |
【代表的な用途】
・磁気テープの代替え
・会計データ
・学籍情報
データ分析
データを別の分析システムに移動することなく、直接S3データに対して高度なビッグデータ分析を実行することができる。
S3 Select(Glacier Select)
S3の内部機能で、シンプルなSQLステートメントを使用してS3オブジェクトのコンテンツをフィルタリングし、必要なデータのサブセットのみを取得することができる。S3が転送するデータ量の削減、データ取得に対するコスト削減、待ち時間を改善できる
Gzip、圧縮データ、CSV、JSONに対して実行可能
Amazon Athena
インタラクティブ(相互に作用する)なクエリサービスで、S3内のデータを標準SQLを使用して簡単に分析ができる。他のサービスと異なり、S3と統合して利用可能なサーバレスサービスであり、準備時間が必要なくS3パケットを指定してSQLによる解析を即時に実行することができる
RedShift Spectrum
S3バケット上に保存されたファイルをRedShiftにロードするための特殊な準備をなしに、S3バケットに直接高度なクエリ処理を実行することが可能になる。データセットがエクサバイトを超えても、高速な取り出しと一貫したパフォーマンスを実現することができる。
HTTPコード
オブジェクトのアップロードが成功した際以下のコードが表示される
HTTPコード | 内容 |
---|---|
200 | アップロード成功 |
300 | リダイレクト |
400 | クライアントエラー |
500 | サーバーのエラー |
AWS Storage Gateway
オンプレミス環境のデータとクラウドストレージのデータを橋渡しするサービス。アプリケーションをオンプレミス環境に残したまま、データ保管領域だけをクラウドで構成することが可能になる。
いくつか種類が存在する
1.S3ファイルゲートウェイ
オンプレミス環境のデータをS3で保存できるインターフェイスを提供する。オンプレミス側のキャッシュストレージにより、低レイテンシーでデータ取得可能とし、更新データを非同期でS3に転送することができる。
ファイルゲートウェイへはNFSもしくはSMBプロトコル、その先S3へはHTTP通信を利用する
S3のライフサイクル機能を使用することでコスト削減も可能
・NFSプロトコルとは?
LinuxなどUNIX系OSで利用される分散ファイルシステムおよびそのための通信規約のこと。IPネットワーク上で利用され、標準ではTCP2049番ポートで行われる。
・SMBプロトコルとは?
主にWindowsシステムで採用される認証済みプロセス間通信機構のこと。
アプリケーションレベルのネットワークプロトコルであり、ネットワーク上のノード間でプリンタ、ファイルへのアクセス、シリアルポートを共有し様々な通信のために使用される。
2-1.キャッシュ型ボリュームゲートウェイ
S3をプライマリーとするiSCSIプロトコルのブロックストレージを提供するサービス。書き込まれたデータを読み込む場合、ゲートウェイ内のキャッシュを参照しデータを読み込む。データがない場合は直接クラウド上のストレージから読み込まれる。
2-2.保管型ボリュームゲートウェイ
オンプレミスをプライマリーとするiSCSIプロトコルのブロックストレージを提供するサービス。データの書き込みや読み出しは全てGatewayのストレージ内から行われるため、ユーザからのアクセスレスポンスが良くなる。プライマリストレージのコストを大幅に節約し、オンプレミスに置いたままS3へと拡張することが可能。
- 更新データは非同期でAWSに転送
- EBSスナップショット、Storage Gatewayボリュームクローン、AWS Backupを利用してデータ保護・復旧が可能
・iSCSI(Internet Small Computer System Interface)とは?
ストレージにアクセスするために利用しているSCSIプロトコルをTCP/IP上で利用するための規格。
3.テープゲートウェイ
オンプレミス側の物理テープから仮想テープを構築し、クラウドでのライブラリ管理を提供するサービス。物理テープメディアのマウントなどの操作や保管管理、テープ装置の物理的なメンテナンスが不要になる。
ハードウェアアプライアンス
オンプレミスでのデプロイメント(配置、展開)用の物理的なスタンドアロン(機器がネットワークにつながっていない状態)で検証されたサーバ構成。Storage Gatewayソフトウェアがあらかじめ搭載されており、ファイル・ボリューム・テープゲートウェイの作成と構成、必要なCPU、メモリなどをすべて提供する。
参考
絵で見て 3分でおさらいする Amazon S3 のバージョニングとライフサイクル
S3ストレージクラスの選択に迷った時に見るフローチャートを作ってみた(2022年8月版)
データ保護に使う暗号化キーを一元管理。AWS KMS をグラレコで解説