AWS(S3)

#はじめに
こちらではAWS機能について書いていきたいと思います。
公式ドキュメントやAWS認定試験（ソリューションアーキテクトやDevOpsなど）の勉強教材など細かい内容をかかず、ざっくりとした内容で。
試験などに興味はないし！公式ドキュメントなど長ったらしくて読めん！
という方に向けに作っていきたいと思います。
(私の備忘録も兼ねて)

今回はネットワークな内容です。

写真はつけられればつけます。(Qiitaの制限の範囲内で)

#環境
AWS

#ドキュメント
https://docs.aws.amazon.com/index.html

##AWSストレージ
まず基本的なストレージサービス

AWSのストレージサービスは主に３つの種類に別れる
・ブロックストレージ
　　例 EBSインスタンスストア
   
・オブジェクトストレージ
　　例 S3、Glacier
 
・ファイルストレージ
　　例 EFS

##ブロックストレージ
ブロック形式でデータを保存
高速・広帯域幅

##オブジェクトストレージ
安価で高い耐久性を持つオンラインストレージ
オブジェクト形式でデータを保存
デフォルトで複数のAZの冗長化されている

##ファイルストレージ
複数のEC2インスタンスから同時にアタッチ可能な共有ストレージサービス
ファイル形式で保存

##Simple Storage Service

###特徴
・耐久性が高い
・安価(月額1G/2.5~3円程度)
・スケーラブルで安定した性能(冗長化されて保存され容量に依存しないことが保証されている)
・転送や保存時に暗号化

###代表的な用途
大量データを長期保存したい場合
・コンテンツの保存(保存してCloudFrontで取り出す)
・ログ、バッチ(バッチを保存取り出し実行ログを保存など)
・バックアップ(バックアップをとって別リージョンへ保存するなど)
・webの静的ホスティング(シンプルなwebサイトであればホスティングすることが可能)
・データレイク(ビッグデータ関連)
など


###データ保存形式


|種別|内容|
|:-----------|:------------|
|  バケット| オブジェクトの保存場所。名前はグローバルでユニークに |
|オブジェクト|S3に格納されるファイルでURLが付与される。バケット内のオブジェクト数は無制限|
|データサイズ|データサイズは0KBから5TBまで保存可能|

###S3オブジェクト構成

|種別|内容|
|:-----------|:------------|
|Key|オブジェクトの名前|
|Value|データそのもの|
|バージョンID|バージョン管理に用いるID|
|メタデータ|オブジェクトに付随する属性情報|
|サブリソース|バケット構成情報を保存及び管理するためのサポートを提供|

###AWSストレージサービス比較
基本的に耐久は99.999999999(イレブンナイン)
RRSだけ99.99

|タイプ|特徴|性能|
|:-----------|:------------|:------------|
|STANDARD|・複数箇所にデータを複製するため耐久性が高い|可用性 99.99%|
|STANDARD-IA|・スタンダードに比べて安価<br>・読み出し容量に応じた課金|可用性 99.9|
|One Zone-IA|・アクセス頻度は低いが必要に応じてすぐに取り出すデータ向け|可用性 99.99|
|RRS(非推奨)|・Reduced Redundancy Storage |可用性 99.99|
|Amazon Glacier|・最安のアーカイブストレージ<br>・データ抽出にコストと時間が必要<br>・ライフマネジメントで指定<br>・ボールロック機能でデータを保持|可用性 N/A|

##S3 Intelligent-Tiering
低頻度アクセスのオブジェクトを自動的に低頻度アクセスそうに移動することでコストを削減する
(30日間アクセスがなければ低頻度アクセス層にいってアクセスがあると高頻度アクセス層に移動する)

##S3(標準)値段
度々変わるようで
・容量
・取り出しリクエスト
・データ転送料金
によって変わる

##S3の整合性モデル

|データ処理|整合性モデル|
|:-----------|:------------|
|新規登録|Consistency Read 登録後即時にデータが反映される|
|更新|Eventual Consistency Read 更新直後はデータ反映に時間がかかる|
|削除|Eventual Consistency Read 削除直後はデータ反映に時間がかかる|

##S3のアクセス管理
|管理方式|特徴|
|:-----------|:------------|
|IAMユーザポリシー|・IAMユーザに対してS3サービスへのアクセス権限を設定することができる<br>・一元的にユーザ権限を管理|
|バケットポリシー|・バケットへのアクセス権をJSONで設定。他アカウントへの許可も可能<br>・バケット単位の高度なアクセス管理向け|
|ACL|・バケットと個々のオブジェクトへのアクセス権限をXMLで設定する<br>・他アカウントへの許可も可能<br>・簡易的にアクセス管理向け|
|署名付きURL|・AWS　SDKで生成した署名付きURLでS3のオブジェクトへの一定時間アクセスを許可|

#####S3アクセス管理
インターネットからパブリックアクセス設定が可能(ブロックパブリックアクセス権限)

###S3暗号化
|暗号化方式|特徴|
|:-----------|:------------|
|SSE-S3|・S3の標準暗号化方式で簡易に利用可能<br>・暗号化キーの作成・管理をS3側で自動で実施<br>・ブロック暗号の１つである254ビットのAdvanced Encrypton Standard (AES-256)を使用してデータを暗号化|
|SSE-KMS|・AWS KMSに設定した暗号化キーを利用した暗号化を実施<br>・ユーザ側でAWS KMSを使用し暗号化キーを作成・管理をすることが可能<br>クライアント独自の暗号キーを利用可能|
|SSE-C(あまり使われないとか)|・ユーザが指定したキーによるサーバ側の暗号化(SSE-C)を使用することが可能<br>・利用設定や管理が煩雑になるのがデメリット|
|クライアントサイド暗号化(CSE)| ・クライアント側の暗号化ではAmazon S3に送信する前にデータを暗号化する方式<br>・AWS KMS　などを利用して暗号化キーを作成・実施<br>・アプリケーション内に保存したマスターキーを使用|

##S3アクセスポイント
ざっくり手順
アクセスポイントを作成
↓
アクセス制限設定
↓
VPCアクセス制限設定
↓
アクセス管理の実行

##S3アクセスアナライザー
アクセスポリシーに沿っているかを確認し、不正なアクセスがないか監視する
・IAM　アクセスアナライザーに連動したS3向けの機能
・バケットポリシー/ACLモニタリング
・バケットポリシー、バケットACL、またその両方。バケットアクセスのソースを検索して確認する場合は、この列の情報をまず使用して、迅速で正確な是正措置をする
・全てのパブリックバケットと共有バケットおん結果を表示する
・バケットの実際のアクセス状況を確認する

##ライフサイクル管理
バケット内のオブジェクト単位でストレージクラスの変更や削除時期などを設定することができる
一定期間でアーカイブに移動したり、安価な保存場所に入れたり削除したりなど

ざっくり設定方法(バケット全体やPrefuxに設定)
オブジェクト更新日を基準にして日単位で指定し、毎日0:00UTCにキューを実行
・最大1000ルール
・IAに移動できるのは128KB以上のオブジェクト
・MFA Deleteが有効だと設定孵化

#レプリケーション
リージョン間を跨ぐクロスリージョンレプリケーションにより障害体制を高める

|種別|内容|
|:-----------|:------------|
|レプリケーションのトリガー|・バケットに対するオブジェクト作成・更新・削除をトリガーにレプリケーション実行する|
|設定|・バージョニング機能を有効にるする<br>・バケットは格別リージョンを指定<br>・双方向レプリケーションも可能<br>・データ転送費用が発生|


##バックアップ
Glacierを利用してバックアップと復元が実施可能

|種別|内容|
|:-----------|:------------|
|アーカイブ|・複数リージョンでレプリケーションすることが可能<br>・S3オブジェクトデータをライフサイクル設定によりGlacierに移動|
|リストア|・バージョン管理機能によって削除されたデータを復元するのが基本|

##利用状況の確認
|種別|内容|
|:-----------|:------------|
|S3の分析|・データのアクセスパターンの簡易可視化<br>・CSV形式での出力<br>・バケット内の分析を実施<br>・アクセス頻度の低いデータや保存期間を確認して、ライフサイクルポリシー設定に活かしていく|
|S3のイベント通知|・バケット内のイベント発生をトリガーにして、SNS/SQS/Lamdaに通知設定が可能<br>・シームレスなシステム連携処理を実現|

##CORS
クロスオリジンリソースシェアリング(CORS)により、特定のドメインにロードされたアプリケーションが異なるドメイン内のリソースと通信する方法

##マルチパートアップロード
大容量オブジェクトをいくつかに分けてアップロードする機能
アップロードを中止するとパートデータがが残るためライフサイクル管理でクリーンアップの設定が必要

##バッチオペレーション
|種別|内容|
|:-----------|:------------|
|ジョブ|・ジョブはS3バッチオペレーションの機能の基本単位で、ジョブを作成することでバッチオペレーションを作成<br>・ジョブにはオブジェクトのリストに対して指定された操作を実機うするために必要な全ての情報を登録<br>・S3バッチオペレーションのオブジェクトのリストを渡し、それらのオブジェクトに対して実行するアクションを指定|
|マニュフェスト|・マニュフェストとはS3が作用するオブジェクトキーをリストするS3オブジェクト<br>・マニュフェストオブジェクトキー、ETag、及びオプションでバージョンIDを指定<br>・S3インベントリレポート/CSVファイルのふたつの形式で設定|

##S3外部接続
AWS Strage Gateway　
標準的なストレージプロトコルを利用して外部システム環境とAWSのストレージサービスを接続するサービス

####特徴
・標準的なストレージプロトコルを活用したシームレスな統合
・キャッシュを活用した低レイテンシなアクセスが可能
・AWSストレージサービスの堅牢性、低コスト、拡張性
・効率的なデータ転送
・AWSモニタリング、管理、セキュリティとの統合

####用途
・ビックデータ処理/クラウドバースティング/システム行こうのためのデータをAWSに移動させたいケース
・バックアップ、アーカイブ、災害対策
・オンプレにて容易にAWSストレージを活用

###Strage Gateway
|種類|内容|
|:-----------|:------------|
|ファイルゲートウェイ|S3オブジェクトにStrage Gatewayを経由してファイルデータを保存|
|ボリュームゲートウェイ|S3及びEBS snapshotsをバックエンドとしたブロックストレージ|
|テープゲートウェイ|S3とGlacierにデータを保管する仮想テープストレージとVTL管理|

####ファイルゲートウェイ
オンプレミスのファイルデータをAWS Storage Gateway経由でS3上のオブジェクトとして格納
・仮想アプライアンスでNFS v3/V4.1のインターフェースを提供
・更新データは非同期でAWSに転送
・ファイルとオブジェクトのマッピングは1対1
・S3のライフサイクルポリシー/バージョニング/クロスリージョンレプリケーションなどが利用可能


####ボリュームゲートウェイ
オンプレミスのディスクデータをAWS Storage Gateway経由でSnapShotとしてAmazon S3に保存しDisaster Recoverを行う

・iSCSIでブロックストレージとしてインターフェースを提供
・オンプレミスのローカルディスクのバックアップを自動的にAWS側で実施
・更新データは非同期でAWSに転送
・オンプレミス側のStrage Gatewayへリストア
・AWS上でEBSディスクへのリストアも可能

####テープゲートウェイ
・VLT対応バックアップウェアを利用し、Strage Gatewayを経由して、バックアップデータS3及びGlacierに格納
・オンプレ及びAWSのEC2環境で利用可能
・バックアップソフトウェアによりテープ取り出しオペレーションを行うことで、安価なアーカイブストレージ(S3/Glacier)を利用
・主要なバックアップソフトウェアをサポート

##S3Transfer Acceleration
クライアントとS3バケットの間でデータを転送を高速、簡単、安全に実行
(中央バケットに対して世界中のお客様からアップロードされる場合など)

##Snowball
物理ストレージを使いインターネットを迂回して大容量データを転送する

##S3Glacier
特徴
・耐久性がS3と同様で高い
・データ取得に迅速性がない
・データはアーカイブに保存される
・1つのアーカイブの最大サイズは40TB
・保存可能なアーカイブ数とデータ量に制限がない
・各アーカイブには作成時に一意のアーカイブIDが割り当てられ、作成後はアーカイブを更新できない
・アーカイブを保存するためのコンテナとして「ボールド」を使用(一つのAWSアカウントでは最大1000個のボールドを使用)
・Amazon S3のライフサイクルルールと連携させることによりAmazonS3データのアーカイブを自動化し、全体的なストレージコストを削減
・Advanced Encryption Standard(AES)256ビット対象称鍵を使用してデフォルトで自動的に暗号化
・S3と違って直接データをアップロード・取得と言う処理ができないため、S3ライフサイクル管理から、プログラム処理によるアップロード/ダウンロードが必要
・Glacierの最低保持期間は90日

###Glacierの仕組み
S3とは異なり、ボールドとアーカイブと言う単位でデータを保存

|管理方式|特徴|
|:-----------|:------------|
|ボールド|・ボールトはアーカイブを格納するコンテナ<br>・ボールドはリージョンに作成|
|アーカイブ|・アーカイブは写真などの任意のデータで、S3 Glacierでのストレージ基本単位<br>・各アーカイブは一意のアドレスを持ちます|
|ジョブ|アーカイブにSELECTクエリを実行したりアーカイブを取得したり、ボールトのインベントリを取得したりする実行単位|
|通知設定|ジョブの完了には時間がかかるためジョブの完了時にSNSと連携した通知設定が可能|

###Glacierのデータ取り出しタイプ
|タイプ|特徴|
|:-----------|:------------|
|迅速|アーカイブのサブセットが素早くアクセスできるモード(1~5分程度で使用可能)|
|プロビジョニングキャパシティ|迅速取り出しの取得容量を必要なときに利用できる仕組み|
|標準|標準取り出しでは数時間以内にアクセスできる(3~5時間程度)|
|大容量|もっとも安価な取り出しオプションだが時間がかかる(5~12時間)|

###アクセス管理
|管理方式|特徴|
|:-----------|:------------|
|IAMポリシー|・IAMユーザやリソースに対して権限を設定<br>・一元的にアクセル権限を管理|
|ボールトポリシー|・ボールトで直接アクセスポリシーを定義、組織内のユーザなどにも権限が付与できる|
|データ取り出しポリシー|・データ取り出しに関する制限(無料枠のみ瀬限)・取り出しコスト上限設定が可能|
|ボールドロックポリシー|ロックによって変更を禁止できる|
|署名|認証保護のため全リクエストに署名が必要|

###Glacier Deep Archive 
Glacierよりも安くデータに取得に時間がかかる(48時間程度)

##終わりに
S3一つでも内容が多いですね....