【SAS対策】Amazon S3 まとめ

## はじめに
ソリューションアーキテクトアソシエイト対策の学習メモ

## S3とは
 - ストレージサービス
 - オブジェクト(ファイル)を<font color="red">**バケット**</font>に<font color="#1e90ff">**キー**</font>として格納できる
   - s3://<font color="red">my-bucket</font><font color="#1e90ff">/my_file.txt</font>
   - s3://<font color="red">my-bucket</font><font color="#1e90ff">/hoge/huga/my_photo.png</font>
 - キーは<font color="orange">**プレフィックス**</font>と<font color="green">**オブジェクト名**</font>で構成される
    - s3://my-bucket<font color="orange">/hoge/huga/</font><font color="green">my_photo.png</font>
 - バケットはグローバルに一意の名前が必要
 - 一ファイル当たり一度に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が管理する鍵で暗号化
    - ユーザがコントロール、監査証跡
 - 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
  - 迅速な取り出し：1～5分(高額)
  - 標準な取り出し：3～5時間
  - 大容量なな取り出し：5～12時間
  - 最低保存期間90日(90日間は削除できない)
- 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コストを削減
- Requester Pay
  - バケット所有者ではなく、バケットへリクエスト、ダウンロードをしたAWSユーザに費用を要求できる
- Glacier Vault Lock、S3オブジェクトロック
  - WORM(Write Once Read Many)：一度書き込んだら、編集できない
  - コンプライアンスやデータ保持に役立つ
- S3オブジェクトロック
  - WORM(Write Once Read Many)：一度書き込んだら、編集できない
  - 保存期間指定、期限なし(リーガルホールド)を選択できる
  - ガバナンスモード：上書き、削除に特別な権限が必要
  - コンプライアンスモード：すべてのユーザが上書き、削除できない
- S3 Analytics
  - ストレージクラスを標準⇒標準 IAに移行するためのタイミングを判断できる