S3についての覚書

 

 

データの整合性
  • Amazon S3 では、すべてのリージョンで S3 バケットの新しいオブジェクトの PUTS およびDELETEの "書き込み後の読み込み" について整合性を提供している。
  • オブジェクトが作成される前にキー名に対して HEAD または GET リクエストを行い、その直後にオブジェクトを作成した場合、結果整合性のために後続の GET がオブジェクトを返さない可能性がある。
  • S3Glacierではアーカイブソリューションに用いられる。

暗号化

S3 オブジェクトには、S3 によって管理されるキーを使用する SSE-S3、AWS KMS によって管理されるキーを使用する SSE-KMS、ユーザーが管理するキーを使用する SSE-C の 3 つのサーバー側の暗号化オプションがあります。
サーバー側の暗号化を使用すると、Amazon S3 はオブジェクトをディスクに保存する前に暗号化し、オブジェクトをダウンロードするときに復号します。

新しい Amazon S3 暗号化 & セキュリティ機能 | Amazon Web Services ブログ

 

SSE-S3

暗号化や鍵管理について、自社のルールにあったオプションを選ぶ必要があります。特に制約がないのであれば、SSE-S3を利用することが一番簡単です。

知っておきたいAWSのセキュリティ機能 | S3編

CSE

一方で、セキュリティの要件が非常に厳しく、アプリケーション側でデータを暗号化する必要がある場合は、CSEを利用することになります。

知っておきたいAWSのセキュリティ機能 | S3編

 KMS

Amazon S3AWS KMS カスタマーマスターキー (CMK) を使用して Amazon S3 オブジェクトを暗号化します。AWS KMS が暗号化するのはオブジェクトデータだけです。オブジェクトメタデータは暗号化されません

Key Management Service (SSE-KMS) に保存された CMK によるサーバー側の暗号化を使ったデータの保護 - Amazon Simple Storage Service

 

「いつ」「誰が」使用したか

 

データ保護には、転送時(Amazon S3 との間でデータを送受信するとき)のデータを保護するものと、保管時(Amazon S3 データセンター内のディスクに格納されているとき)のデータを保護するものがあります。Secure Socket Layer/Transport Layer Security (SSL/TLS) またはクライアント側の暗号化を使用して、転送中のデータを保護できます。Amazon S3 で保管時のデータを保護するには、次のようなオプションがあります。

  • サーバー側の暗号化を使用する – オブジェクトをデータセンター内のディスクに保存する前に暗号化し、オブジェクトをダウンロードするときに復号するように Amazon S3 にリクエストします。

  • クライアント側の暗号化 – クライアント側でデータを暗号化し、暗号化したデータを Amazon S3 にアップロードします。この場合、暗号化プロセス、暗号化キー、関連ツールはお客様が管理してください。

暗号化を使用したデータの保護 - Amazon Simple Storage Service

 

可用性

スループットのための水平スケーリングとリクエスト並列化

転送のスループットを高めるために、Amazon S3 では複数の接続によってデータの GET や PUT を並列で行うアプリケーションを使用することをお勧めします。このような並列化は、AWS Java SDKAmazon S3 Transfer Manager でサポートされています。

 

Amazon S3 のパフォーマンスの設計パターン - Amazon Simple Storage Service

 

アプリケーションで REST API を使用して Amazon S3 にリクエストを直接発行する場合

HTTP 接続のプールを使用して、一連のリクエストで各接続を再利用することをお勧めします。

リクエストごとの接続セットアップを回避すると、各リクエストで TCP スロースタートと Secure Sockets Layer (SSL) ハンドシェイクを実行する必要がなくなります。REST API の使用については、Amazon Simple Storage Service API Reference を参照してください。

Amazon S3 のパフォーマンスの設計パターン - Amazon Simple Storage Service

 

Amazon S3 Transfer Acceleration

世界中のクライアントと Amazon S3 を使用する特定のリージョンのアプリケーションの距離によるレイテンシーを最小限に抑える、またはなくすために有効です。

次のような場合は、バケットに対して Transfer Acceleration を使用することが推奨されます。

  • 中央のバケットに対して世界中のお客様からアップロードが行われる。

  • 大陸間で定期的にギガバイトからテラバイト単位のデータを転送する。

  • Amazon S3 へのアップロード時にインターネット経由で利用可能な帯域幅を十分に活用できていない。

 

Amazon S3 Transfer Acceleration - Amazon Simple Storage Service

 

  

監視

 

CloudTrail
CloudTrail は、AWSの各サービスに対するAPIコールを追跡するサービス。

オブジェクトの取得や削除といったS3のイベントをキャプチャすることができる。

キャプチャしたイベントログはS3バケットに保存できる。 

 

  • セキュリティグループの設定やデバイスの登録などのアクティビティ(管理イベント)
  • S3バケットのデータ操作やLambda関数の実行などアクティビティ(データイベント)

 

CloudTrail の [Event history] 機能では、管理イベントのみサポートされています。すべての管理イベントがイベント履歴に表示されるわけではありません。

AWS CloudTrail とは - AWS CloudTrail

  

イベント履歴に表示されないのは、以下。

  • データイベント(S3バケットへのオブジェクトのPut・Get等)
  • 情報表示(Describe)系(管理イベントだが非表示)

 

イベント履歴だけでは不十分な場合、データイベント(証跡情報とも)を用いる。

管理イベントは90日間保存されるのに対し、データイベントではS3に保存されるため、保存期間はS3の設定に依存する。

 

CloudWatchLogs

AWSサービスに限らず、様々なサービスのログファイルを監視するサービスです。上記のCloudTrailと組合わせることで、S3に対するイベントログを監視できます。 

また、このサービスには特定のログを検知できるフィルター機能が備わっています。フィルター機能を利用することで、S3オブジェクトの取得イベントのログを検知し、さらにその検知をトリガーとして別のサービスを起動する(メール通知する等)、のようなことができます。

 

知っておきたいAWSのセキュリティ機能 | S3編

 

 

 

※S3サーバーアクセスログにはバケットに対するリクエストの詳細が記録されますが、S3オブジェクトレベルのAPIオペレーションのログは記録されない。

※CloudTrailでも同様に、S3オブジェクトレベルのAPIオペレーションのログは記録されない。