今回は、AWSのS3(ストレージサービス)を安全に使うためのポイントについてお話ししたいと思います。
前回の記事では、AWSのデータベースのサービスであるRDSに安全にデータを保存する方法についてお話ししました。S3はファイルの置き場として気軽に使えますし、AWSの中でも非常によく使われているサービスだと思います。AWSで何かデータを配置したいと考えた場合に、まだAWSを使いはじめて間もない人がまず考えるのが以下のような方法だと思います。
- S3で新しいバケットを作ってその中に入れる
- EC2インスタンスを起動してSFTPのツールを使って配置する
ただ、クレジットカード情報や個人情報など重要な情報を安全に保存するためにはもう少し注意しなければいけない点があります。
特にクレジットカード情報を保存する場合には、クレジットカード業界のセキュリティ基準であるPCI DSS(Payment Card Industry Data Security Standard)に従う必要があり、そこでもデータの暗号化など、安全にカード情報を保存するための要件が求められます。
3.6.1.a 鍵管理手順に、強力な鍵の生成方法が指定されているこ
PCIデータセキュリティ基準
とを確認する。
今回は、S3に限定して安全に使うためのポイントについてお話ししたいと思います。
- S3の暗号化を設定する
- S3へのアクセス権限を設定する
S3の暗号化を設定する

S3の暗号化方法は下記の2種類があります。
- サーバサイド暗号化
- クライアントサイド暗号化
サーバーサイド暗号化は、ファイルを配置する際にS3が自動的に暗号化してAWSのデータセンター内のディスクに書き込んでくれ、ファイルを取り出すときに複合してくれます。クライアント暗号化は暗号化、複合化を自分で行う必要があるため、そちらの方が大変です。今回はサーバサイドの暗号化について説明します。サーバサイド暗号化の方法にもさらに下記の3つがあります。
- S3管理のキーによる暗号化 (SSE-S3)
- AWS KMS管理のキーによる暗号化(SSE-KMS)
- 自分で用意した鍵で暗号化(SSE-C)
まず、SSE-Cは鍵管理を自分で行わないといけないため、これを選択するメリットはあまりない場合が多いのではないかと思います。PCI DSSでも要求されていますが暗号化に使用する鍵管理は厳重に行う必要があり、そこをAWSにお任せできるというメリットが受けられなくなるからです。
次に、SSE-S3かSSE-KMSを選ぶかですが、SSE-S3の方がお手軽に導入できます。しかし、その場合は、鍵に対するアクセス制御やPCI DSSでも求められる鍵に対するアクセスの記録の保存やレビューができないので、PCI DSS要件を満たすためには、SSE-KMSになると思います。
SSE-KMSはAWS KMS(Key Management Service)というデータの暗号化や複合化の機能を提供してくれ、他の多くのAWSサービスで連携できるサービスです。
データを暗号化する際に、非常に重要なのが、いかに安全に暗号化にしようした鍵を管理するかということです。以下に強力な暗号方式を使用しても暗号化にしようした鍵の管理がずさんであればデータ漏えいに繋がってしまうからです。
PCI DSSにおいても鍵の管理方法について多くの記載があり、これはすごく重要なことです。
AWS KMSを使用するメリットとしてはその鍵の管理をAWS上で簡単に行うことができるということです。KMSはAES256という暗号方式を使用しており、PCI DSSでも暗号方式の選定の際に参考にすべきものとして記載されているNIST SP 800-57 Part1で2030年以降も使用可能とされているものですので、現時点では安全な暗号方式で暗号してくれます。
強力な暗号化記述
本書の発行時点で業界で認められているテスト済の暗号化の標準およびアルゴリズムの例として、AES(128 ビット以上)、TDES/TDEA(3倍長キー)、RSA(2048 ビット以上)、ECC(224 ビット以上)、およびDSA/DH(2048/224 ビット以上)が挙げられます。
PCI DSS用語集
SSE-KMSを選んだ場合、下記の点を注意する必要があります。
- KMSのキー管理者、キーユーザーを必要最低限に設定する
- KMSのキーローテーションを設定する
S3のアクセス権限を設定する

いかにファイルがサーバサイドで暗号化をしたとしてもそのバケットが外部からアクセス可能になっていたら結局生のデータが取得可能になってしまいます。また、サーバサイドの暗号化をしたとしても暗号化しない状態でファイルを配置することも可能になっているので、バケットポリシーを設定して暗号化しない状態でファイルを置くことを禁止する設定を入れる必要もあります。
まず、暗号化されていないファイル配置を禁止する方法は下記に記載されています。
AWS KMS で管理されたキー (SSE-KMS) によるサーバー側の暗号化を使用してデータを保護する
S3へのアクセスをバケットポリシーを使って必要なサーバのみアクセスを許可する方法は下記のステップで行うことができます。
- IAMロールを作成し、S3へのアクセスを許可する
- EC2インスタンス作成時にInstance Profileを設定し作成したIAMロールを割り当てる
- S3バケットポリシーを設定し作成したIAMロールからのアクセスを許可する
具体的な設定方法
上記の設定を行うことでS3に安全に使用することができます。具体的な設定方法については別の記事でご紹介したいと思います。