目次
- 
1. はじめにS3のセキュリティの落とし穴について説明するまえに、S3とは何なのかを簡単に記載します。 - 
a) S3とはS3(Simple Strage Service)とは、AWSのストレージサービスです。用途はログなどのデータ格納先としてはもちろん、動画データなどを配信する場合はコンテンツ配信元としても利用が可能で、様々な用途に利用できます。以下の4点がおおきな特徴です。 ・高い堅牢性 
 S3にデータを保存すると、同時に3か所のデータセンターにデータがコピーされ、データが紛失しないようなっています。データの耐久性は99.999999999%と設定されています(別名:イレブンナイン)。したがって、S3に格納したデータはよほどのことがない限り壊れることがありません。なお、可用性は99.99%となっており、こちらも非常に高くなっています。
 
 ・容量無制限
 S3に配置するデータ量、ファイル数の制限はありません。つまり、利用料さえ支払うことができれば、無限にデータをS3上に配置することが可能です。なお、1ファイル当たりの容量に制限があり、1ファイル5TBまでとなっています。・安い 
 1GBあたり約3円(0.025USD/GB。2019年11月 東京リージョンでの料金)のコストで、高い堅牢性と、無制限の容量を持つデータストレージを利用することができます。また、S3に配置する際のデータ転送量は無料です。・豊富なオプション 
 長期データ保管を行う目的で、Glacier/Glacier Deep Archiveというオプションが利用できます。また重要ではないデータを配置する目的で、低冗長化S3なども選択できるなど、保管するデータに合わせて、ストレージの種類を選択することができます。
 
- 
- 
2. S3のセキュリティの基本S3のセキュリティについて記載をしていきます。先ほど記載したように、完全性と可用性については、一見、S3は十分すぎるほどの性能を持ったストレージであると言えます。これらに加えて、S3の機能として用意されている暗号化機能やアクセス制御方式を利用し、強固なセキュリティを実現することができます。 - 
a) アクセス制御方式S3のアクセス制御方法は以下の3点です。 
 ・IAM
 ・パケットポリシー
 ・バケットACL
 それぞれ以下のような特徴があります。
 IAM S3サービス全体に対するアクセス制御が可能です。例えば、バケットの作成、削除といった権限も付与することが可能です。JSONファイルで細かなアクセス制御をかけることが可能です。 パケットポリシー IAMユーザーやAWSアカウントに対するアクセス制御を設定することができます。JSONファイルで細かなアクセス制御をかけることが可能です。 バケットACL AWSアカウントに対し、バケットに対するアクセス制御を設定可能です。GUIで簡易な設定になります。インターネット上にS3のコンテンツを公開するか否かも設定可能です。 
 円
 権限の強さとしては、IAM > バケットポリシー > バケットACLとなります。
 たとえば、バケットポリシーで許可されている操作でも、IAMで禁止されていた場合は不可能です。
- 
b) 暗号化方式S3に配置したデータの暗号化方式について記載します。暗号化方式は4つです 
 ・SSE-S3
 ・SSE-KMS
 ・SSE-C
 ・CSE
 「SSE」とは、「Server Side Encryption」の略で、「サーバ側で暗号化を行う」という意味になります。「CSE」は「Client Side Encryption」の略で、「クライアントが暗号化を行う」という意味です。それぞれ暗号化鍵の管理者が異なります。特徴を見てきましょう。
 方式名 暗号化する場所 鍵管理のサービス 特徴 SSE-S3 サーバ側 S3 無料で導入できる。鍵の管理はAWSであるため運用も楽。 SSE-KMS サーバ側 KMS KMSの追加料金がかかるが、KMSのAPIを用いて暗号・複合化をおこなうためログに残りやすい。 SSE-C サーバ側 ユーザ+S3 ユーザ側がS3に鍵をアップロードする方式。S3が暗号化を行うが、S3に鍵自体が保管されるわけではないためユーザ側でも鍵の管理を行う必要あり。 CSE クライアント側 ユーザ ユーザ側で暗号化したファイルを配置する形式。 
 
- 
- 
3. ユースケースから考えるS3のセキュリティの落とし穴S3は主に、ファイル共有先、ログ、ソースコード、バックアップなどのデータ格納先、コンテンツ配信先としての利用があります。基本的なS3へのアクセス制御方法についての解説と、データ格納先、コンテンツ配信先として利用する場合のセキュリティの落とし穴について見ていきます。 - 
a) ファイル共有先としてアプリケーションなどで使用するファイルを配置する際の、S3のセキュリティの落とし穴について説明します。 ファイル共有先として利用する場合、共有先のアプリケーションやAWSアカウントに対し、きめ細やかな権限設定や、アクセス方法を考慮する必要があります。 たとえば、共有先に対してIAMユーザを払い出し、IAMユーザのアクセスキー・シークレットキーを使ってアクセスを行うような設計を行うと、アクセスキーが外部に漏洩した際に不正アクセスを受ける可能性が生じます。 
- 
b) データ格納先としてデータ格納先として利用する場合の、S3のセキュリティの落とし穴について説明します。 データ格納先として保管するデータが、いつでも取り出せるようにしておくべきなのか、そうでないかの要件を整理し、要件にあったS3のオプションを選択する必要があります。 例えば、S3 Glacierはデータの取り出しに時間がかかります。災害対策用のバックアップ等にS3 Glacierを利用してしまうと、データ復旧が遅れ、システムの可用性が大きく損なわれることになります。 また、重要なデータなのに低冗長ストレージのオプションを利用してしまうと、万が一の場合はデータの完全性が損なわれることになります。 
- 
c) コンテンツ配信元としてS3をWebサーバのように、コンテンツ配信元として利用する場合のセキュリティの落とし穴をご説明します。 コンテンツ配信元として利用する場合は、十分なモニタリングを行い、コンテンツが正しく配信されているかを監視しましょう。 S3は、1秒当たりのリクエスト数に上限があります。したがって、DDos攻撃などで1秒に5500以上のリスクエストが行われた場合、制限の上限に達し、コンテンツの配信元としての可用性が損なわれてしまいます。 そのため、リクエスト数を監視し、場合によってはCloudFrontを利用して、リクエストの上限に達することのないようにしましょう。 また、S3のコンテンツを暗号化するために、SSE-KMSを利用している場合はさらに注意が必要です。KMSの暗号化・複合化鍵にも1秒当たりのリクエスト数の上限があります。 S3のモニタリング方式としては、CloudWatchやCloudTrailを利用することができます。 
 
- 
- 
4. まとめS3のオプション、アクセス権限、使用する目的をはっきりとさせ、細やかなセキュリティ対策を行う必要があります。でなければ、セキュリティの基本である、「機密性、完全性、可用性」が損なわれる場合があります。設定後はCloudTrailやCloudWatchでモニタリングを行うことも重要です。 


