S3

# 0.はじめに
この記事はAWS SAA試験勉強のための、S3に関する知識のまとめです。

# 1.S3とは
Amazon Simple Storage Service (Amazon S3) は、スケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービス。






- S3を利用すると、ユーザーが設定しなくても、AWS側でストレージリソースを自動的にスケールアップ/ダウンして、変動する需要に対応します

- Amazon S3 はバケットという格納場所を生成して、オブジェクト単位でデータを保存する。JSON形式でバケットポリシーを記述できます

- S3の耐久性はストレージクラスに寄らずイレブンナイン(99.999999999%)。StandardとGlacierの可用性は99.99%
(耐久性の「い」とイレブンの「イ」、可用性の「よ」と9が4つの「よ」で覚えています。）

- URL経由で保存データをダウンロードできます

- 2020年12月から強い整合性(データの反映が即時で行われる性質)を持ちます

- ユーザーが設定することなく、初めからマルチAZ構成のフォールトトレランスを考慮して設計されています

- RDSのバックアップを定期的に保存するために利用されます





# 2.データへのアクセス
## 2.1.データへのアクセス
S3の各オブジェクトには、RESTや[SOAP](https://ja.wikipedia.org/wiki/SOAP_(%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB))といったHTTPをベースとしたWeb APIを使ってアクセスします。

- S3データにアクセスするには、バケットポリシーとIAMロールを両方許可する必要があります



- 別のAWSアカウントに所有するS3バケットの利用を許可したい場合は、そのアカウントとユーザーに対してIAMポリシーとバケットポリシー両方の許可設定が必要

## 2.2.ライターキー
Amazon S3などのクラウドストレージサービスでは、バケットにデータを書き込むために必要なアクセスキーがライターキーです。IAM（Identity and Access Management）を使用して、特定のユーザーやサービスに書き込み権限を付与します。

# 3.暗号化方式
S3には、以下の２つの暗号化方式があります。
- サーバサイド暗号化
- クライアントサイド暗号化(CSE)

サーバサイド暗号化は、さらにS3で管理された暗号化鍵によるサーバ側の暗号化( **SSE-S3**)と、KMSに保存されているカスタマーキー(CMK)による暗号化(**SSE-KMS**)、の2種類に分けることが出来ます。

SSE-S3はすべてのS3バケットに共通の鍵を使い、鍵に対する個別のアクセス制御はできませんが、**最も管理に手間がかかりません**。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359600/f8b95553-9e4f-b6c0-4f1b-3c061a997fb7.png)

また、暗号化方式にはクライアントが提供するキーを使用してサーバーサイドでデータを暗号化する**SSE-C**もあります。



Amazon S3において暗号化を有効化して、サーバーサイド暗号化を適用すると、Amazon S3 はオブジェクトをデータセンター内のディスクに保存する前に暗号化を実施し、オブジェクトをダウンロードするときに**S3側で自動で復号します。**

# 4.S3イベント通知機能
S3イベントにLambda関数を設定して、ファイルがアップロードされるたびにLambda関数を呼び出すことができます。

# 5.コスト

S3では課金されるのはS3からの送信だけです。受信(S3へのアップロード)は無料です。

### コストに影響するもの

- 選択したストレージクラス

- 保存したデータの合計量（GB）

- データ転送

- リクエスト数

- 設置したリージョン

### 次のS3とのデータ転送は無料

- インスタンスがS3バケットと同じAWSリージョンにある場合、Amazon EC2インスタンスに転送されたデータ
- Amazon CloudFontに転送されたデータ


[公式サイトのAmazon S3の料金に関する説明](https://aws.amazon.com/jp/s3/pricing/)






# [6.AWS Storage Gateway](https://qiita.com/naoya_ok/items/121ea92de54f54b05542)

オンプレミス環境にあるストレージとAmazon S3に接続して拡張するサービス。



# 7.S3 クロスオリジンリソース共有(Cross-Origin Resource Sharing, CORS)
クロスオリジンリソース共有は、別のドメインにあるリソースとの通信の設定です。スクリプトの実行を許可するHTTPヘッダーを送信できます。

# 8.S3 Transfer Acceleration

AWSがグローバルに展開している２００カ所を超えるエッジロケーションを利用してクライアントと S3 バケットの間で、長距離にわたるファイル転送を高速、簡単、安全に行えるようになります。




# [9.ストレージクラス](https://qiita.com/naoya_ok/items/2066b5b2b8f5a346f504)




# 10.ライフサイクル管理
S3はライフサイクル機能(30日間など一定の期間が経つと、自動的にストレージクラスが変わる機能)を持っています。

### トランザクションアクション
別のストレージクラスにオブジェクトを移行するタイミングを定義するものです。ライフサイクル移行リクエストにはコストが発生します。

### 有効期限切れアクション
オブジェクトの有効期限を定義するものです。ライフサイクル有効期限切れコストは、オブジェクトの有効期限が切れるタイミングに応じて異なります。

ライフサイクル管理の「NonCurrentVersion」有効期限ポリシーと「ExpiredObjectDeleteMarker」ポリシーを有効にして、以前のバージョンのオブジェクトを期限切れにできます。


# 11.バージョン管理

S3のバージョン管理を有効にし、MFA Deleteを有効にすることでファイルの誤削除を防げます。

# 12.S3オブジェクトロック

S3バケット作成時に有効化する必要があり、<font color="red">**バケット作成後には適用できません。**</font>

オブジェクトロックはデータの不変性を確保し、削除や変更を防止するために使用され、バージョニングはデータの変更履歴を保持し、復元や管理を容易にするために使用されます。

オブジェクトロックには、保持期間が無期限の「リーガルホールド」と、期限付きの「リテンションモード」の2種類があります。
以下の２つのリテンションモードが提供されています。
- ガバナンスモード
- コンプライアンスモード

# 13.クロスリージョンレプリケーション(CRR)
VPCエンドポイントを利用してS３バケット内のコンテンツをシェアします。
S3クロスリージョンレプリケーションを設定すると、**バケットにオブジェクトが作成・更新・削除された際のイベントをトリガーとして**レプリ ケーションが実行されます。



# 14.マルチパートアップロード

 1回の PUT オペレーションで、最大 5 GB のサイズの 1 つのオブジェクトをアップロードできる。マルチパートアップロードを使用すると、より大きなファイルをアップロードできる。

# 15.クロスアカウントアクセス
異なる AWS アカウントに対してIAMポリシーによって許可を与えるには、 IAM ロールを使用します。








# 16.ストレージ以外でのS3の用途


## 16.1.Webサイトホスティング

S3のWebサイトホスティング機能を有効にすると、オブジェクトがWebコンテンツとして公開されます。そのときのURLは

```
http://バケット名.s3-website-リージョン名.amazon.com
```

となります。(バリアと覚えています。)

静的なWebサイトの公開は出来ますが、プログラムの実行はできないため、ショッピングサイトやお問い合わせフォームの運用はできません。こういったシステムを作るためにはEC2を組み合わせる必要があります。

## 16.2.署名付きURL
Amazon S3は事前署名付きURLによって特定の画像を一時的に共有するための特別なURLを発行することができます。
- S3バケットにドメイン名でアクセスするためには、バケット名とドメイン名を一致させます。
- 事前署名付きURLによって特定の画像を一時的に共有するための特別なURLを発行することができます。**署名付きURLの機能はCloudFrontにもあります。**


AWSユーザーではないセミナーの参加者が、セミナーの資料をダウンロードできるようにする時などに使います。
URLからS3バケットにアップロードすることも可能です。


# 17.リクエスタ支払い

リクエスタ支払いバケットの場合、リクエストおよびバケットからのデータのダウンロードにかかる転送コストは、所有者でなくリクエストを実行した利用者が支払います。ただし、データの保管にかかるコストは常にバケット所有者が支払います。

# 18.イベント通知
S3イベント通知(Event Notification)により、S3バケットでの特定のイベントが発生したときに、通知を受け取ることが出来ます。

# 19.S3バッチオペレーション

S3バッチオペレーションを使用すると、数十個から数十億個のオブジェクトを管理可能になります。