はじめに
ソリューションアーキテクトアソシエイト対策の学習メモ
S3とは
- ストレージサービス
- オブジェクト(ファイル)をバケットにキーとして格納できる
- s3://my-bucket/my_file.txt
- s3://my-bucket/hoge/huga/my_photo.png
- キーはプレフィックスとオブジェクト名で構成される
- s3://my-bucket/hoge/huga/my_photo.png
- バケットはグローバルに一意の名前が必要
- 一ファイル当たり一度に5GBまでアップロード可で、
5GB以上はマルチパートアップロードを使う(100MB以上のファイルは推奨) - 強い整合性と一貫性をもっており、新規作成/削除などが瞬時に反映される
バージョニング(履歴管理機能)
- 同じキー(ファイル)で上書きするとバージョンが増加(バージョンID)、過去の履歴をすべて管理
- バケットレベルで有効/無効を設定(有効にするのがベストプラクティス)
- バージョニングを有効にする前にアップロードされた
バージョニングされていないファイルのバージョニングはnull - バージョニングされているオブジェクトを削除すると削除マーカーが付与される
- 一覧には表示されないが、履歴からは確認可能
- バージョニング情報を削除することも出来る(履歴の削除になるので復元不可)
バージョン表示OFF
s3://my-bucket/hoge/huga/my_photo.png
バージョン表示ON
s3://my-bucket/hoge/huga/my_photo.png バージョンID bbb
└s3://my-bucket/hoge/huga/my_photo.png バージョンID aaa
s3://my-bucket/my_file.txt バージョンID eee 削除マーカー
└s3://my-bucket/my_file.txt バージョンID ddd
└s3://my-bucket/my_file.txt バージョンID ccc
↓バージョンID bbbを削除
バージョン表示ON
s3://my-bucket/hoge/huga/my_photo.png バージョンID aaa
s3://my-bucket/my_file.txt バージョンID eee 削除マーカー
└s3://my-bucket/my_file.txt バージョンID ddd
└s3://my-bucket/my_file.txt バージョンID ccc
オブジェクトの暗号化
- SSE-S3
- オブジェクトをAWSが管理する鍵で暗号化
- AES-256形式
- ※SSE:サーバサイドエンクリプション
- SSE-KMS
- オブジェクトをKMSが管理する鍵で暗号化
- KMS管理のため暗号化キーのローテーション可
- ユーザがコントロール、監査証跡
- SSE-C
- 鍵はクライアントで管理、オブジェクト+鍵をHTTPS(HTTP不可)でS3に送信し、S3で暗号化
- 鍵はサーバ側(AWS)で管理しない
- CLIからのみ使用可能
- クライアントサイド暗号化
- S3送信前にクライアント側でオブジェクトを暗号化
- Amazon S3 Encryption Clientなどのライブラリを使用可能
- その他
- 暗号化は個別のオブジェクトに対して暗号化の有無や種類をそれぞれ設定できる
- バケットに対してデフォルトの暗号化の有無や種類を設定することもできる
バケットポリシー
- 以下のような用途で使用
- バケットへのパブリックアクセスを許可
- アップロード時のオブジェクトを強制的に暗号化
- クロスアカウントへのアクセス許可
pre-signed URL
- 特定のファイルを特定のユーザに限られた時間だけアクセス許可する
- コンソールからは設定不可
- ダウンロードはCLI
- アップロードはSDK
ウェブサイトのホスティング
- 設定することで静的webサイトとして公開できる
- バケットに対して静的ウェサイトのホスティングを有効に
- パブリックアクセスブロックを解除
- バケットポリシーでバケット内のオブジェクトへのパブリックアクセスを許可
s3://my-bucket/hoge/huga/index.html
レプリケーション機能
- 送り先のS3と送り元S3双方でバージョニングが有効になっている必要あり
- クロスリージョンにも対応
- バケットは異なるアカウントでもOK
- 送り元のS3バケットにレプリケーション設定を実施する(送り先情報、IAMロール)
アクセスログ
- すべてのS3に対するすべてのリクエストを記録し別のS3に保管できる
ストレージクラス
- Amazon S3 標準
- Amazon S3 標準 - 低頻度アクセス(IA)
- Amazon S3 標準 1ゾーン - 低頻度アクセス
- アクセス頻度低い、重要性が低いデータ向け
- Amazon S3 Intelligent-Tiering
- Amazon Glacier(Amazon Glacier Flexible Retrieval)
- 迅速な取り出し:1~5分(高額)
- 標準な取り出し:3~5時間
- 大容量なな取り出し:5~12時間
- 最低保存期間90日(90日間は削除できない)
- Amazon Glacier Instant Retrieval
- ミリ秒単位の迅速なデータ引き出し
- Amazon Glacier Deep Archive
- 標準:データ取り出しに12時間
- 大容量:データ取り出しに48時間
- 最低保存期間180日
※オブジェクト一つずつに設定できる
ライフサイクル
- オブジェクトの移動、削除を自動化できる
- 基本的にはバケットに設定
- 種類
- 移行アクション
- 例:作成してから〇日後にstandard IAに移動
- 期限切れアクション
- 例:〇日後に削除(古いバージョンのオブジェクト削除も可能)
- 移行アクション
イベント通知
- S3に対してオブジェクト作成、更新、削除などが行われた際に他サービスへ通知を出せる
- ターゲットはSNS、SQS、Lamdba
- 例:S3からSQSに通知をするには、SQS側でS3からの通知を受け取る設定(アクセスポリシー)をする必要あり
その他
- CORS設定
- クロスオリジンとしてS3のオブジェクトを呼び出す場合、対象バケットのヘッダーにCORS設定が必要
- S3 Selecet、Glaicier Select
- サーバ側でフィルタリングを行うことで、必要なデータのみをSQLで取得
- ネットワーク転送量を減らし、クライアント側のCPUコストを削減
- 廃止になった、代替としてAthenaを使う
- Requester Pay
- バケット所有者ではなく、バケットへリクエスト、ダウンロードをしたAWSユーザに費用を要求できる
- Glacier Vault Lock
- Vault Lockポリシーをコミットしたら二度と編集・削除できまない(AWSサポートでも不可)
- 旧Glacier構成やコンプライアンス要件の強いシステムで使われ続けている
- S3オブジェクトロック
- WORM(Write Once Read Many):一度書き込んだら、編集できない
- 保存期間指定、期限なし(リーガルホールド)を選択できる
- ガバナンスモード:上書き、削除に特別な権限が必要
- コンプライアンスモード:すべてのユーザが上書き、削除できない
- S3 Analytics
- ストレージクラスを標準⇒標準 IAに移行するためのタイミングを判断できる
- S3 Storage Lens
- S3バケットの使用状況・パフォーマンス・セキュリティのメトリクスを集計・可視化する分析機能
- 「S3がどのように使われていて、どこを改善すべきか?」を把握できる監視・分析ツール
- バイトレンジリクエスト(Byte-Range Request)
- S3オブジェクトの特定の部分(バイト範囲)だけを取得する
- データ転送量を減らしたり、大きなファイルを効率的に扱うための仕組み