SAA 学習メモ S3 関連

## S3 ストレージクラス
### Standard
- 標準のストレージクラス
- ミリ秒単位のアクセスが可能で、アクセス頻度の高いデータ
- 取り出し頻度の目安：（1か月に1回以上）
- 可用性：99.99%
- 取り出し料金：なし
- 取り出し遅延：なし
- 保存AZ：3AZ以上
- 最短保存期間：なし
### Standard-IA
- IA = Infrequent Access(低頻度アクセス)
- アクセスパターンが変化したり不明であるデータ
- 取り出し頻度の目安：（1か月に1回）
- 可用性：99.9%
- 取り出し料金：あり
- 取り出し遅延：なし
- 保存AZ：3AZ以上
- 最短保存期間：30日間
### One Zone-IA
- 1つのAZに保存され、ミリ秒単位のアクセスが可能な再利用可能でアクセス頻度の低いデータ
- 取り出し頻度の目安：（1か月に1回）
- 可用性：99.5%
- 取り出し料金：あり
- 取り出し遅延：なし
- 保存AZ：1AZ
- 最短保存期間：30日間
### Express One Zone-IA
- 単一のAZ内のレイテンシーの影響を受けやすいアプリケーションに対する1桁のミリ秒単位のデータアクセス
- 可用性：99.95%
- 取り出し料金：なし
- 取り出し遅延：なし
- 保存AZ：1AZ
- 最短保存期間：なし
### Glacier Instant Retrieval
- ミリ秒単位で瞬時に取得可能で、アクセスが四半期に一度の存在期間が長いアーカイブデータ
- 取り出し頻度の目安：（四半期に一度）
- 可用性：99.9%
- 取り出し料金：あり
- 取り出し遅延：なし
- 保存AZ：3AZ以上
- 最短保存期間：90日間
### Glacier Flexible Retrieval
- 取得時間が数分から数時間で、アクセスが1年に一度の存続期間が長いアーカイブデータ
- 取り出し頻度の目安：（１年に一度）
- 取り出し料金：あり
- 取り出し遅延：数分～数時間
- 保存AZ：3AZ以上
- 最短保存期間：90日間
### Glacier Deep Archive
- 取得時間が数時間で、アクセスが1年に1回未満の存続期間が長いアーカイブデータ
- 取り出し頻度の目安：（１年に１回未満）
- 可用性：99.99%(オブジェクトを復元後)
- 取り出し料金：あり
- 取り出し遅延：数時間
- 保存AZ：3AZ以上
- 最短保存期間：180日間
### Intelligent-Tiering
- 知的階層化
- アクセスパターンが変化したり不明であるデータ
- 可用性：99.99%
- 取り出し料金：なし
- 取り出し遅延：なし
- 保存AZ：3AZ以上
- 最短保存期間：なし

### 料金表
※表はGPT作のため誤記の可能性あり、公式を確認すること
| ストレージクラス                     | 保存料金（GBあたり/月）  | データ取り出し料金（GBあたり） | 最低ストレージ期間 | データ取り出し時間   |
|------------------------------------|-------------------------|--------------------------------|--------------------|----------------------|
| **S3 Standard**                    | $0.023                  | $0.0004                        | なし               | 即時                 |
| **S3 Standard-IA**                 | $0.0125                 | $0.01                          | 30日               | 即時                 |
| **S3 One Zone-IA**                 | $0.01                   | $0.01                          | 30日               | 即時                 |
| **S3 One Zone-IA (Express)**       | $0.01                   | $0.01                          | 30日               | 即時                 |
| **S3 Glacier Instant Retrieval**   | $0.004                  | $0.004                         | なし               | ミリ秒単位           |
| **S3 Glacier Flexible Retrieval**  | $0.004                  | $0.025                         | 90日               | 数分から数時間       |
| **S3 Glacier Deep Archive**        | $0.00099                | $0.02                          | 180日              | 最大12時間           |
| **S3 Intelligent-Tiering**         | 高頻度アクセス: $0.023  | $0.0004                        | なし               | 即時                 |
|                                    | 低頻度アクセス: $0.0125 | $0.01                          | なし               | 即時                 |
|                                    | アーカイブアクセス: $0.004 | $0.025                        | なし               | 数分から数時間       |
|                                    | ディープアーカイブアクセス: $0.00099 | $0.02                      | なし               | 最大12時間           |

## S3 Glacierの復元リクエスト
- Glacierに保存されているデータを「アーカイブ」という
- Frexible Retriebal と Deep Archive に保存されているデータは直接ダウンロードできないので「復元リクエスト」を行鵜必要がある
- 復元リクエストには取出し時間と料金に応じて３つのオプションがある

### ３つの取出しオプション
#### 標準取出し
- Frexible Retriebal, Deep Archive に保存されているデータを取り出す際のデフォルトオプション
- データの取得に数分～数時間かかる
#### 迅速取出し
- 追加料金を支払い標準取出しよりも迅速にデータを取り出し可能
- 250MBまでのデータであれば通常１～５分以内に取り出し可能
- Frexible Retriebal と Intelligent-Tiering のアーカイブアクセス階層に保存されているデータに対してのみ選択できるオプション
#### 大容量（バルク）取出し
- 大容量のデータを取り出す場合に標準取り出しより時間がかかるが、料金が低価格になる
- ペタバイト単位のデータを１日かけて取り出し可能

## S3 マルチパートアップロード
- S3バケットに保存できるオブジェクトの最大サイズは5TB
- 一度にアップロードできるオブジェクトサイズは5GB
- 5GBを超えるファイルをアップロードする場合はマルチパートアップロードを利用する
- AWSではファイルサイズが100MBを超える場合はマルチパートアップロードを推奨している

## S3 アクセス制御
### バケットポリシー
- バケット単位でアクセス権限を設定するリソースベースのポリシー
- 自アカウントのIAMユーザーや他のAWSアカウントのユーザーに対してS3バケットやオブジェクトへのアクセス権限を設定できる
- アクセス元のIPアドレスやドメイン名によるアクセス制御が可能
- オブジェクトアップロード時にバケット所有者にフルコントロール権限を付与することを強制できる
### IAMポリシー
- IAMユーザー単位でアクセス制限を設定するIDベースのポリシー
- ユーザーやロールに対して、S3へのアクセス権限を設定
- 他のAWSアカウントには設定できない
### ACL
- AWSアカウント単位でアクセス権限を設定する機能
- 他のAWSアカウントに対してS3やオブジェクトへの読み取りまたは書き込みを許可する

## ストレージ形式
### オブジェクトストレージ
階層/入れ子などの構造がなくフラットに管理する
- S3
  - 容量：無制限
  - 同時アクセス：可
  - 特徴
    - HTTP/HTTPS経由でデータアクセスが可能
### ブロックストレージ
データをブロックという固定長の単位で管理する
- EBS
  - 容量：16TB
  - 同時アクセス：不可
  - 特徴
    - EC2のローカルストレージとして利用
### ファイルストレージ
データを「ファイル」「フォルダ」の単位で階層構造として管理する
- EFS
  - 容量：無制限
  - 同時アクセス：可
  - 特徴
    - 複数のEC2インスタンス（1～数千）から利用可能
- FSx
  - 容量：64TB(FSx for Windowsの場合)
  - 同時アクセス：可
  - 特徴
    - SMBで接続可能な FSx for Windows や、HPC環境に対応した FSx for Lustre がある

## S3 暗号化
S3の暗号化には「サーバ側の暗号化」と「クライアント側の暗号化」の2種類がある

### サーバー側の暗号化 (Server Side Encription:SSE)
- データを保存するときにサーバー側で暗号化する方法
- データがS3に保存されるタイミングで自動的にS3が暗号化を行う
- データを取り出すときはS3がデータを複合してユーザーに渡す
- SSEには3種類ある
#### SSE-S3
- S3が管理している鍵を使用する
- 鍵の利用状況を記録するなどの高度な管理はできない
#### SSE-KMS
- KMSに保存されているKMSキーを使用する
- 鍵の利用状況を自動的に記録する
#### SSE-C
- ユーザーが管理している鍵を使用する

### クライアント側の暗号化
- データをS3にアップロードする前にクライアント側で暗号化を行い、暗号したデータをそのままS3に保存する
- データを取り出すときは暗号化したデータをS3から取り出した後、クライアント側で複合する
- クライアント側の暗号化には2種類ある
#### KMS
- KMSで作成/管理された鍵を使用してユーザーが暗号/複合処理
#### クライアント側に保存したルートキーを使用
- ユーザーが作成/管理された鍵を使用してユーザーが暗号/複合処理

## S3 オブジェクトロック
- オブジェクトに対して更新・削除を制限する機能
- S3バケット作成時にのみ設定可能
- オブジェクトロックを有効にするとバージョニングも有効になる
- 主にオブジェクトが意図的に改ざん・削除されることを防止する目的で使用される
- オブジェクトロックには「リーガルホールド」と「リテンションモード」の2種類がある
### リーガルホールド
- 保存期間が無期限
- s3:PutObjectLegalHold の権限を持たないユーザーに対して、リーガルホールドが解除されるまでオブジェクトを読み取り専用にする
- 権限を持つユーザーのみオブジェクトの更新・削除とリーガルホールドの解除が可能
### リテンションモード
- 保存期限付き
- リテンションモードには「ガバナンスモード」と「コンプライアンスモード」の2種類がある
#### ガバナンスモード
- s3:BypassGovernanceRetention の権限を持たないユーザーに対して、指定した期間中オブジェクトを読み取り専用にする
- 権限を持つユーザーのみオブジェクトの更新・削除とガバナンスモードの解除が可能
#### コンプライアンスモード
- ルートユーザーを含む全てのユーザーに対して、指定した期間中オブジェクトを読み取り専用にする
- 期間中、ルートユーザーを含めてコンプライアンスモードの解除が不可能

### オブジェクトロックの構造
- オブジェクトロック（更新・削除制限）
  - リーガルホールド（一部読専、期限なし）
  - リテンションモード（期限あり）
    - ガバナンスモード（一部読専、解除可能）
    - コンプライアンスモード（完全読専、解除不可）

## S3 署名付きURL
- 非公開設定されたオブジェクトに対して有効期限付きのURLを発行し、AWSアカウントを持たないユーザーでも一時的にアクセス可能になる機能
- ダウンロード用、アップロード用どちらのURLも発行可能
- URLには非常に長い文字列が入るため、推測することはほぼ不可能
- URLが漏洩すると誰でもアクセス可能なためリスクがある

## S3 MFA Delete
- バージョニングされているオブジェクトを削除する際にMFAデバイス認証が必要になる機能
- ユーザーによる誤った削除や不正アクセスによるデータ損失を防ぐ目的で使用される
- ルートユーザーのみが世代管理されたデータの削除権限を持つ
- MFA Deleteが有効になっているバケットのオブジェクトを完全に削除するには、ルートユーザーがMFA認証を行い、削除対象のバージョンIDを指定する