AWS KMSを利用して、S3に暗号化オブジェクトを保存する
AWSでシークレットを安全に管理・配備する方法として、AWS KMSについて調査したので、そのメモを残しておきます。
AWS KMS
データの暗号化に使用される暗号化キーの作成と管理を容易にするマネージド型サービスで、S3をはじめ様々なAWSサービスと統合されています。 最初の取っ掛かりとして、この記事が分かりやすいです。
AWS KMS + S3
Amazon Simple Storage Service (Amazon S3) で AWS KMS を使用する方法 に記載の通り、S3で AWS KMS を使用する方法は、「サーバー側の暗号化: SSE-KMS の使用」「Amazon S3 暗号化クライアントの使用」の2通りあります。それぞれ具体的な方法を見ていきたいと思います。
サーバー側の暗号化: SSE-KMS の使用
AWS SDK, AWS-CLI, S3コンソールなどを利用することで、サーバー側で暗号化を行えます。 最もカンタンな例として、AWS-CLIでの暗号化・復号化をしてみました。
暗号化
aws s3 cp plain.txt s3://${YOUR_S3_BUCKET} \ --sse-kms-key-id ${YOUR_AWS_KMS_KEY_ID} \ --sse aws:kms
復号化
aws s3 cp s3://${YOUR_S3_BUCKET} plain.txt \ --sse-kms-key-id ${YOUR_AWS_KMS_KEY_ID} \ --sse aws:kms
cp — AWS CLI 1.14.58 Command Reference
Amazon S3 暗号化クライアントの使用
Amazon KMS で保管されるカスタマーマスターキーを利用し、エンベロープ暗号化 を用いてオブジェクトをS3に保管する方法です。
AWS SDK for Rubyも対応しているので、Rubyで扱うことも可能です。
技術的な詳細
エンベロープ暗号化については、下記ドキュメントを読むと良いです。
- https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/concepts.html#enveloping
- https://d0.awsstatic.com/whitepapers/KMS-Cryptographic-Details.pdf
出典: AWS Key Management Service の概念