AWSメモ 〜S3


用途

データの保存を行う。大きいデータ(最大5TB)の保存が可能。耐久性(データがなくならない可能性)はイレブンナイン(99.999999999%)。部分的な更新ができない(1バイトの修正も全データをアップロードしなければならない)ため、更新頻度の高いデータ(リアルタイムログなど)の保存には不向き。一方、過去ログなどのバックアップには向いている。設定によっては保存したデータをインターネット上に公開可能。そのため、静的なhtmlファイルや画像の保存・公開先としても利用される。

範囲

リージョン
ただしクロスリージョンレプリケーションを使うことにより、他リージョンに自動的に複製を持つことができる

使い方

  1. バケットを作成する。バケットはオブジェクトのコンテナ。1アカウントあたり100個まで作成可能。AWSで一意となる名前をつける必要あり。

  2. オブジェクトを格納する。バケットに、キーを指定してオブジェクトをバケットに格納する。登録時のキーはプレフィックスとオブジェクト名から構成される。オブジェクトはデータ本体とメタデータから構成される。

  3. オブジェクトを取得する。バケット、キー、バージョニングを有効にしている場合はバージョンIDを指定してオブジェクトを指定して、取得する。

ストレージクラス

  • S3 標準:まずはこれを選ぶ
    可用性は99.99%

  • S3 標準 低頻度アクセス(Infrequent Access):アクセス頻度が少ない場合はこれを選ぶ
    可用性は99.9%と標準よりかは低いがその分コストが低い

  • S3 Iゾーン:アクセス頻度が少ない場合、かつ再生成可能などデータがなくなっても良い場合はこれを選ぶ
    一つのAZに保存。可用性は99.5%と他のストレージクラスに比べ低い。

  • S3 Intelligent-Tiering:アクセス頻度を分析して自動でS3標準とS3標準低頻度のストレージクラスを移動してくれる
    少額のデータ分析コストがかかる

  • Glacier:長期保存目的で緊急のアクセスが不要な場合はこれを選ぶ
    データ保存コストは低いが、取り出しコストがかかり、かつ取り出す際に時間がかかる。取り出しコストはどれだけ急いでいるかにより変化する(迅速:1分から5分、標準:3から5時間、大容量:5から12時間)最低保存期間は90日

  • Glacier Deep Archive:Glacierよりさらに緊急のアクセスが不要な場合はこれを選ぶ。
    データ保存コストは低いが、取り出しコストがかかり、かつ取り出す際に時間がかかる。取り出しコストはどれだけ急いでいるかにより変化する(標準:12時間、大容量:48時間)最低保存期間は180日

セキュリティ

  • 暗号化

    • SSE-S3:S3専用の鍵で暗号化を行う

    • SSE-KMS:KMSで管理されている鍵を指定して暗号化を行う

    • SSE-C:クライアントが指定する鍵で暗号化を行う

    • CSE:クライアントにて暗号化を行う S3では暗号化を行わない

  • アクセス管理
    ユーザーベース、リソースベースの両方が設定されている場合、両方のアクセス権がないとアクセスできない。

    • ユーザーベース
      IAMポリシーでアクセス権を記述可能

    • リソースベース

      • バケットポリシー :バケット単位のアクセス権、jsonで記述される

      • オブジェクトACL:オブジェクト単位のアクセス権

      • バケットACL:一般的ではない

    • 署名付きURL
      URLを知っていればAWSのアカウントを持っていなくてもアクセス可能となる期限付きURL、CLIもしくはSDKで生成する

  • アクセスポイント:バケットに対し、複数のアクセスポイントを設定することができる。アクセスポイントにもアクセス権を設定できるので、アクセス元毎にアクセスポイントを用意してアクセス権を管理可能。

    • マルチリージョンアクセスポイント:複数のリージョンにあるS3へ1つのアクセルポイントからアクセス可能にする

    • Object Lambdaアクセスポイント:オブジェクトに対しLambaで加工した結果を返すことができるアクセスポイント

  • MFA Delete
    誤って削除しないよう削除およびバージョニングの無効化を行う際には多要素認証を要求するようにすることができる

  • オブジェクトロック
    オブジェクトを削除できないようロックする。削除するためにはロックを外してから削除する必要がある。

    • 保存期間:ロックされる期間を指定する

    • リーガルホールド:無期限に削除できない。削除するにはリーガルホールドを削除する必要がある

    • リテンションモード;保護のレベルを指定する

      • ガバナンスモード:特別な権限を持っている場合のみ保護を解除できる

      • コンプライアンスモード:保存期間を過ぎるまで削除できない

キーワード

  • バージョニング:誤ってオブジェクトを削除したり変更したりした場合に復旧できるようオブジェクトが複数のバージョンを持つようにすること。セキュリティや信頼性の観点から強く推奨される。

  • アクセスログ:S3に対して行われたアクセスのログを別のバケットに格納する。ログを格納するバケットをアクセスログの対象にしないこと(無限にデータ量が増えてしまう)

  • レプリケーション:特定のバケットに登録されたオブジェクトを別のバケットに非同期でコピーする。別のリージョン、別のアカウントにコピー可能。データロスの観点からは不要。ログを集約させたり、海外からのアクセスを高速にするために別リージョンにコンテンツを配置させるために利用される。

  • ライフサイクルルール:ライフサイクルルールを設定することで、標準から1ヶ月経つと標準IAへ、6ヶ月経つとGlacierに、3年経つと削除といったルールを作成することができる。不完全なマルチアップロードの削除にも使える。

  • アナリティクス:標準から標準IAへ移行するタイミングを分析してくれる。ライフサイクルの設計をするための情報として使える。

  • イベント通知:S3への操作に対しイベント通知を行うことができる。イベント通知を別のアクションに紐づけることにより、オブジェクトが登録されたらその内容をDBに登録するなどの操作を自動化することが可能。

  • S3 Select / Glacier Select:オブジェクトがCSVやjson形式の場合、簡易的なselect分で、データ内部の検索が可能。

  • Athena:Selectより大規模かつ複雑な検索が可能。

  • マルチパートアップロード:大きいオブジェクトの登録(put)の性能を上げるためにはマルチパートアップロードが有効。複数セッションを利用して一つのオブジェクトを登録することができる。

  • S3 Transfer Acceleration:別のリージョンからオブジェクトを取得(get)するときは、S3 Transfer Accelerationが有効。リージョン間はAWSの閉域網を利用し、エッジロケーションからインターネットを経由してダウンロードする。

  • バイトレンジフェッチ:S3に格納されているオブジェクトの必要な部分のみ取得可能:オブジェクトを分割して並列で複数セッションで取得することで全体の取得のスピードを上げたり、必要な部分のみを取得することで全体の効率を上げることができる。

  • 同一オリジンポリシー:Webブラウザに導入されているセキュリティポリシーで、Javascript等で動的にHTMLを生成する際、元のサイトとは別のサイトからコンテンツを取得したりデータを送信することを制限する仕組み。例えばamazonにログインした状態で、別のサイトにアクセスした際に、別のサイトに埋め込まれたjavascriptにより注文がされることを防ぐことができる(このポリシー自体はS3とは無関係)。

  • CORS (Cross-Origin Resource Sharing):同一オリジンポリシーにより、S3に保存されているデータを別のサイトからjavascriptを使って取得しようとすると、この制限に引っかかって取得できなくなる。この制限を回避するためにCORSの仕組みがS3に用意されている。マネジメントコンソールのS3のメニューよりアクセス管理>CORSにて、元となるサイトを登録することで、ブラウザがjavascriptでS3上のコンテンツを取得できるようになる。

AWSメモ目次


この記事が気に入ったらサポートをしてみませんか?