【備忘】Amazon S3の概要_後編

# はじめに
##### ～AWS学習アウトプット第3弾～
AWS未経験者の私が学習したことをアウトプットし、将来的にはSAA合格を目指します。

今回は、前回に引き続き、 **Amazon S3** の基本的な内容をまとめます！
前回の記事をまだ見ていない方はぜひご覧ください。

https://qiita.com/rm_zeal/items/8abae7f52ae94d3f0d97

# 目次
・S3の機能
　ストレージクラス
　S3 Glacierの復元リクエスト
　S3のアクセス制御
　データ暗号化
・おわりに
・参考

# S3の機能

## ストレージクラス
①Amazon S3 標準 (S3 標準)
②Amazon S3 Intelligent-Tiering (S3 Intelligent-Tiering)
③Amazon S3 Express One Zone
④Amazon S3 標準 – 低頻度アクセス (S3 標準 – IA)
⑤Amazon S3 One Zone-Infrequent Access (S3 One Zone-IA)
⑥Amazon S3 Glacier Instant Retrieval
⑦Amazon S3 Glacier Flexible Retrieval (旧 S3 Glacier)
⑧Amazon S3 Glacier Deep Archive

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/762b4cf1-64d7-1dfc-868b-2048276165df.png)
※上記の図ではAmazon S3 Express One Zoneは省略しています（問題としてあまり出ないため）

### Amazon S3 標準 (S3 標準)
>S3 Standard は、アクセス頻度の高いデータ向けに高い耐久性、可用性、パフォーマンスのオブジェクトストレージを提供します。低レイテンシーと高スループットを提供するため、S3 標準は、クラウドアプリケーション、動的なウェブサイト、コンテンツ配信、モバイルやゲームのアプリケーション、ビッグデータ分析など、幅広いユースケースに適しています。 
：公式サイトから引用

:::note warn
・デフォルトのストレージクラス
・**アクセス頻度の高いデータ**向けの汎用ストレージ
・データ保存料金は**S3 Express One Zoneの次に高い(No.2)**・取り出し**料金はなし**・取り出し**遅延はなし**・保存AZは**3以上**
:::

### Amazon S3 Intelligent-Tiering (S3 Intelligent-Tiering)
>Amazon S3 Intelligent-Tiering (S3 Intelligent-Tiering) は、パフォーマンスへの影響、取り出し費用、運用上のオーバーヘッドなしに、アクセス頻度に基づいてデータを最も費用対効果の高いアクセス階層に自動的に移動することにより、きめ細かいオブジェクトレベルでストレージコストを自動的に削減できる初めてのクラウドストレージです。
：公式サイトから引用

:::note warn
・**アクセスパターンが変化したり不明なデータ向け**
・データ**保存料金は変動**・取り出し**料金はなし**・取り出し**遅延は変動**・保存AZは**3以上**
:::

### Amazon S3 Express One Zone
>Amazon S3 Express One Zone は、アクセス頻度が最も高いデータやレイテンシーの影響を受けやすいアプリケーションに対して 1 桁ミリ秒単位の一貫したデータアクセスを提供するために構築された、高性能な単一アベイラビリティーゾーンストレージクラスです。 S3 Express One Zone は、S3 Standard と比較してデータアクセス速度が 10 倍向上し、リクエストコストが 50% 削減されます。
：公式サイトから引用

:::note warn
・**アクセス頻度が最も高いデータ向け**の高性能ストレージ
・多数の小さなオブジェクトを含む大規模なデータセット向けに最適化されている
・データ保存料金は**他のストレージクラスと比べNo.1**・取り出し**料金はなし**・取り出し**遅延はなし**・保存AZは**1**・最短保存期間は**1時間**
:::


### Amazon S3 標準 – 低頻度アクセス (S3 Standard-IA)
>S3 Standard-IA は、アクセス頻度は低いが、必要に応じてすぐに取り出すことが必要なデータに適しています。S3 Standard-IA は、S3 Standardと同じ高い耐久性、高スループット、低レイテンシーを低価格のストレージ料金 (GB 単位) および取り出し料金 (GB 単位) で提供します。低コストかつ高パフォーマンスのこの組み合わせは、S3 Standard-IA は長期保存、バックアップ、ディザスタリカバリファイルのデータストアとして理想的です。
：公式サイトから引用

:::note warn
・**ミリ秒単位のアクセス**を必要とする**アクセス頻度の低い**データ向け（一か月に一回）
・データ保存料金は**S3 Standardの次に高い(No.3)**・取り出し**料金は有り**・取り出し**遅延はなし**・保存AZは**3以上**・最短保存期間は**30日間**
:::


### Amazon S3 One Zone-Infrequent Access (S3 One Zone-IA)
>S3 1 ゾーン – IA は、アクセス頻度は低いが、必要に応じてすぐに取り出すことが必要なデータに適しています。データを少なくとも 3 つのアベイラビリティーゾーン (AZ) に保存する他の S3 ストレージクラスとは異なり、S3 1 ゾーン – IA はひとつの AZ にデータを保存するため、S3 標準 – IA よりもコストを 20% 削減できます。S3 1 ゾーン – IA はアクセス頻度が低いデータに適した低コストのオプションが必要だが、S3 標準または S3 標準 – IA のようなアベイラビリティーを必要としないお客様に最適です。
：公式サイトから引用

:::note warn
・**ミリ秒単位のアクセスを必要**とする**アクセス頻度の低い**データ向け（一か月に一回）
・**一つのAZ**に保存される
・データ保存料金は**S3 Standard-IA の次に高い(No.4)**・取り出し**料金は有り**・取り出し**遅延はなし**・保存AZは**1**・最短保存期間は**30日間**
:::

### Amazon S3 Glacier Instant Retrieval
>Amazon S3 Glacier Instant Retrieval は、アクセスされることがほとんどなく、ミリ秒単位の取り出しが必要な、長期間有効なデータ用に最低コストのストレージを提供するアーカイブストレージクラスです。S3 Glacier Instant Retrieval を使用すると、四半期に一度データにアクセスする場合、S3 Standard-Infrequent Access (S3 Standard-IA) ストレージクラスを使用する場合と比較して、ストレージコストを最大 68% 節約できます。
：公式サイトから引用

:::note warn
・**データアーカイブ専用**に設計されている
・**ミリ秒単位に取得可能**でアクセス頻度が**四半期に一度**のデータ向け（年に数回）
・データ保存料金は**S3 One Zone-IAの次に高い(No.5)**・取り出し**料金は有り**・取り出し**遅延はなし**・保存AZは**3以上**・最短保存期間は**90日間**
:::


### Amazon S3 Glacier Flexible Retrieval (旧 S3 Glacier)
>S3 Glacier Flexible Retrieval は、1 年に 1〜2 回アクセスされ、非同期で取り出されるアーカイブデータ向けに、(S3 Glacier Instant Retrieval よりも) 最大 10% 低いコストのストレージを提供します。バックアップや災害対策のユースケースなど、すぐにアクセスする必要はないものの、大量のデータを無料で取り出せる柔軟性が必要なアーカイブデータにとって、S3 Glacier Flexible Retrieval (旧 S3 Glacier) は理想的なストレージクラスです。S3 Glacier Flexible Retrieval は、コストと数分から数時間のアクセス時間、および無料の一括検索とのバランスをとる、最も柔軟性が高い取り出しオプションを提供します。
：公式サイトから引用

:::note warn
・**データアーカイブ専用**に設計されている
・**数分から数時間で取得可能**でアクセス頻度が**一年に一度**のデータ向け
・データ保存料金は**Glacier Instant Retrievalの次に高い(No.6)**・取り出し**料金は有り**・取り出し**遅延は有り**・保存AZは**3以上**・最短保存期間は**90日間**
:::


### Amazon S3 Glacier Deep Archive
>S3 Glacier Deep Archive は、Amazon S3 の最も低コストのストレージクラスであり、1 年のうち 1 回か 2 回しかアクセスされないようなデータを対象とした長期保存やデジタル保存をサポートします。特に、金融サービス、ヘルスケア、パブリックセクターなどの規制が厳しい業界のお客様を対象としており、コンプライアンス要件を満たすために 7～10 年以上データセットを保管するように設計されています。
：公式サイトから引用

:::note warn
・**データアーカイブ専用**に設計されている
・**数時間で取得可能**でアクセス頻度が**一年に一度**のデータ向け
・データ保存料金は**S3 Glacier Flexible Retrievalの次に高い(No.7)**・取り出し**料金は有り**・取り出し**遅延は有り**・保存AZは**3以上**・最短保存期間は**180日間**
:::

https://aws.amazon.com/jp/s3/storage-classes/

:::note info
・ストレージクラスの問題は頻出
・要件を満たせるストレージクラスは何か選ぶ問題が多いため、それぞれのストレージクラスの違い・特徴の把握が必須
:::

:::note info
**確認point**
　・アクセス頻度は高いか・低いか
　　⇒高いのであれば、取り出し料金がかかるもの・遅延が発生するものは×
　・取り出しの遅延は許されるのか
　　⇒許されないのであれば、遅延が発生するものは×
　・データ喪失の可能性は許されるのか
　　⇒許されないのであれば、保存AZが限られているものは×
:::

## S3 Glacierの復元リクエスト
>次のストレージクラスまたは階層の Amazon S3 オブジェクトはアーカイブされ、リアルタイムでアクセスできなくなります。
S3 Glacier Flexible Retrieval ストレージクラス
S3 Glacier Deep Archive ストレージクラス
S3 Intelligent-Tiering Archive アクセス階層
S3 Intelligent-Tiering Deep Archive アクセス階層
S3 Glacier Flexible Retrieval ストレージクラスまたは S3 Glacier Deep Archive ストレージクラスに保存されている Amazon S3 オブジェクトは、すぐにはアクセスできません。これらのストレージクラスのオブジェクトにアクセスするには、指定された期間 (日数) の間、オブジェクトの一時コピーを S3 バケットに復元する必要があります。オブジェクトの永続的なコピーが必要な場合は、オブジェクトを復元して、Amazon S3 バケット内にそのオブジェクトのコピーを作成します。
：公式サイトから引用

「S3 Glacier Flexible Retrieval」「S3 Glacier Deep Archive」に保存されているオブジェクトは**直接ダウンロードできないため、復元する必要がある。**
復元は、下記の三種類の方法がある。

**①標準取り出し**
・デフォルトのオプション
・データの取得は数時間以内に行える（3~5時間)

**②迅速取り出し**
・標準取り出しよりも迅速にデータを取り出せる
・データの取得は通常 1〜5 分以内で使用可能（250MBまでのデータ）
・追加料金がかかる

**③大容量（バルク）取り出し**
・S3 Glacier の最も安価な取り出しオプション
・標準取り出しより時間はかかるが、低価格でデータを取り出せる
・データの取得は通常5〜12 時間で完了

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/3bca70d3-1997-16e5-c152-652e1b7f154d.png)


## S3のアクセス制御
S3のバケットやオブジェクトは、デフォルトだとバケットやオブジェクトを作成したAWSアカウント（S3リソースの所有者）だけがアクセス可能です。
アクセス制御の方法は大きく分けて、4つあります。

### バケットポリシー
>Amazon S3 バケットポリシーを使用すると、バケット内のオブジェクトへのアクセスを保護して、適切な権限を持つユーザーだけがアクセスできるようにすることができます。適切な権限を持たない認証済みユーザーが Amazon S3 リソースにアクセスできないようにすることもできます。
：公式サイトから引用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/09015996-3dd8-88c5-33e7-9330e0e8847d.png)

:::note warn
・**バケット単位で**アクセス制御を設定することができる機能
・自AWSアカウントのIAMユーザーだけでなく**他AWSアカウントのユーザーに対してもアクセス権限を設定できる**
・設定が出来るのは、**バケット所有者のみ**
・アクセス元のIPアドレスやドメイン名によるアクセス制御も可能
:::

:::note warn
・S3のオブジェクトは**アップロードしたAWSアカウントが所有権を持つ**
:::






### ユーザー（IAM）ポリシー
>AWS でのアクセスを管理するには、ポリシーを作成し、IAM アイデンティティ (ユーザー、ユーザーのグループ、ロール) または AWS リソースにアタッチします。ポリシーは AWS のオブジェクトであり、アイデンティティやリソースに関連付けて、これらのアクセス許可を定義します。AWS は、IAM プリンシパル (ユーザーまたはロール) によってリクエストが行われると、それらのポリシーを評価します。ポリシーでの許可により、リクエストが許可されるか拒否されるかが決まります。
：公式サイトから引用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/781ca617-211b-ec7d-0930-cee5fc98523a.png)

:::note warn
・**IAMユーザー/グループ単位で**アクセス制御を設定することができる機能
・S3で行う設定ではなく、**IAMで行う設定**
・**他のAWSアカウントには設定できない**
・アクセス元のIPアドレスやドメイン名によるアクセス制御も可能
:::





### ACL（アクセスコントロールリスト）
>Amazon S3 のアクセスコントロールリスト (ACL) では、バケットとオブジェクトへのアクセスを管理できます。各バケットとオブジェクトには、サブリソースとして ACL がアタッチされています。これにより、アクセスが許可される AWS アカウントまたはグループと、アクセスの種類が定義されます。リソースに対するリクエストを受け取ると、Amazon S3 は該当する ACL を確認して、リクエスタに必要なアクセス許可があることを確かめます。
：公式サイトから引用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/f638fb72-c7ae-f751-faf6-1ed7386f698d.png)

:::note warn
・**AWSアカウント単位で**アクセス制御を設定することができる機能
・アクセス元のIPアドレスやドメイン単位でのアクセス制御はできない
:::


### ブロックパブリックアクセス
>Amazon S3 のパブリックアクセスブロック機能は、Amazon S3 のリソースへのパブリックアクセスの管理に役立つ、アクセスポイント、バケット、アカウントの設定を提供します。デフォルトでは、新しいバケット、アクセスポイント、およびオブジェクトはパブリックアクセスを許可しません。ただし、ユーザーはバケットポリシー、アクセスポイントポリシー、またはオブジェクトのアクセス許可を変更することで、パブリックアクセスを許可できます。S3 ブロックパブリックアクセス設定は、これらのポリシーやアクセス許可を上書きして、これらのリソースへのパブリックアクセスを制限できるようにします。
：公式サイトから引用

:::note warn
・**バケット単位だけでなくAWSアカウント単位でも**アクセス制御を設定することができる機能
・バケットポリシーやACLの設定に対して、一括で制限を設けることが出来る
・**オブジェクトを外部に公開するかどうか**を設定する
:::


アクセス制御について、詳細をわかりやすくまとめているサイトがあったので、下記記載します。

https://qiita.com/K5K/items/ef6a02aee760b128a25b#2-2-%E3%83%90%E3%82%B1%E3%83%83%E3%83%88%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC

:::note info
・問題では、制御対象を上げたうえで、どの機能を使うか選ぶことが多い
・機能とセットで対象を必ず覚えること
:::


## データ暗号化
>データ保護とは、転送時 (Amazon S3 との間でデータを送受信するとき)と保存時 (Amazon S3 データセンター内のディスクに格納されているとき) にデータを保護することを指します。Secure Socket Layer/Transport Layer Security (SSL/TLS) またはクライアント側の暗号化を使用して、転送中のデータを保護できます。
：公式サイトから引用

S3のデータ暗号化には、サーバー側の暗号化とクライアント側の暗号化の二種類があります。

### サーバー側の暗号化（Server-Side Encryption:SSE）
>サーバー側の暗号化とは、データを受信するアプリケーションまたはサービスによって、送信先でデータを暗号化することです。Amazon S3 は、AWS データセンターのディスクに書き込まれるときにデータをオブジェクトレベルで暗号化し、お客様がデータにアクセスするときに復号します。リクエストが認証され、お客様がアクセス許可を持っていれば、オブジェクトが暗号化されているかどうかに関係なく同じ方法でアクセスできます。
：公式サイトから引用


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/9ce173af-2457-cf63-e662-5e5a9c299895.png)

:::note warn
・**S3にデータを保存する際に**、**S3が**オブジェクトの暗号化を行う。
・保存したデータをダウンロードするときに、S3がオブジェクトを復号化する。
:::


#### ①SSE-S3
・Amazon S3 マネージドキーによるサーバー側の暗号化
　⇒**S3が作成・管理している鍵**で、**S3が暗号化・復号化**
※Amazon S3 のすべてのバケットでのデフォルトの暗号化設定
※追加料金なしで使用できる

#### ②SSE-KMS
・AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化
　⇒**KMSが作成・管理している鍵**で、**S3が暗号化・復号化**
※SSE-S3よりも細かいキーの設定が行える
※追加料金がかかる

#### ③DSSE-KMS
・AWS KMS キーによる二層式サーバー側の暗号化
　⇒**KMSが作成・管理している鍵**で、**S3が暗号化・復号化**
※データを多層暗号化できるため、暗号化キーを完全に制御することができる
※追加料金がかかる

#### ④SSE-C
・顧客提供のキーによるサーバー側の暗号化
　⇒**ユーザーが作成・管理している鍵**で、**S3が暗号化・復号化**
※暗号化キーを完全に制御する
※使用に追加料金はかからないが、SSE-C を設定・使用するためのリクエストには、標準のAmazon S3 リクエスト料金が発生する。

### クライアント側の暗号化（Client-Side Encryption:SSE）
>クライアント側の暗号化は、データをローカルで暗号化することで、転送時および保管時のセキュリティを確保するためのものです。Amazon S3 に送信する前にオブジェクトを暗号化するには、Amazon S3 暗号化クライアントを使用します。オブジェクトがこの方法で暗号化されている場合、オブジェクトは AWS を含むサードパーティーに公開されません。Amazon S3 は、すでに暗号化されているオブジェクトを受け取るだけで、オブジェクトの暗号化または復号には関与しません。Amazon S3 暗号化クライアントとサーバー側の暗号化の両方を使用してデータを暗号化できます。
：公式サイトから引用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074902/536852a9-ba9f-fa66-8493-120374d08b30.png)

:::note warn
・**S3にデータを保存する前に**、**クライアント側でデータを暗号化**し、暗号化したデータをAmazon S3 にアップロードする。
・保存したデータをダウンロードしてから、**クライアント側でデータを復号化**する。
・暗号化プロセス、暗号化キー、関連ツールはクライアント側で管理する。
:::

#### ①KMSキーを使用
・AWS KMS（AWS Key Management Service）に保存されているKMSキーを使用する
　⇒**KMSが作成・管理している鍵**で、**クライアントが暗号化・復号化**

#### ②ルートキーを使用
・クライアント側に保存したルートキーを使用する
　⇒**クライアントが作成・管理している鍵**で、**クライアントが暗号化・復号化**


# おわりに
今回は、前回に引き続きAmazon S3について整理しました。
ストレージクラス・アクセス制御は頻出なうえ、ごちゃごちゃしやすい部分なので、今回それぞれ調べてまとめたことでかなり理解することが出来たと感じます。
AWS学習アウトプットは今後も続けますので、また機会がありましたらご覧ください！

　

＊前編はこちら！

https://qiita.com/rm_zeal/items/8abae7f52ae94d3f0d97

# 参考
https://aws.amazon.com/jp/s3/storage-classes/

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/storage-class-intro.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/restoring-objects.html

https://docs.aws.amazon.com/ja_jp/amazonglacier/latest/dev/downloading-an-archive-two-steps.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/example-bucket-policies.html

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/acl-overview.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/access-control-block-public-access.html

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/UsingEncryption.html




---------------------------------------------------

 株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください：
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area