AWS Key Management Service(KMS)を用いたS3サーバーサイド暗号化(SSE-KMS)

cloudpackエバンジェリストの吉田真吾@yoshidashingo)です。

AWS Key Management Service (KMS) とはなにか?

今までS3やRDSに提供されていたサーバーサイド暗号化は、ユーザーから鍵の管理ができないものでした。KMSを使えば、あらかじめ特定のユーザーやRoleに限定した暗号鍵を作成し、このS3のオブジェクトにはこの鍵を、このEBSディスクにはこの鍵を、と指定することができ、たとえば当該鍵が不要になった場合は明確に鍵の削除ができるなどのコントロールができるメリットがあります。

AWS News Blog

KMS鍵を作成する

1. IAM Management Consoleにアクセスし、左ペインからKMSにアクセスします。
  • 左のペインの下部に「Encryption Keys」があるので押下します

f:id:yoshidashingo:20141201225716p:plain

2. Get Started Now で開始します。
  • 「US-EAST」「鍵:なし」の状態ですね

f:id:yoshidashingo:20141201225755p:plain

3. 東京リージョンに変更します。
  • つまり「鍵の利用範囲は1リージョン内」であることがわかります

f:id:yoshidashingo:20141201230057p:plain

4. 鍵のエイリアス名(ユーザーから見た鍵名)と説明を入力します
  • エイリアス名と説明はこんな感じで入力しました。

f:id:yoshidashingo:20141201230349p:plain

5. 【鍵の管理者】のユーザーあるいはRoleを指定します

f:id:yoshidashingo:20141201230309p:plain

6. 【鍵の利用者】のユーザーあるいはRoleを指定します
  • 他のAWSアカウントも指定できるみたいですが、今回は管理者と利用者を同一にしています。

f:id:yoshidashingo:20141201230759p:plain

7. 発行される鍵のポリシーをプレビューして「Finish」を押下して完了します

f:id:yoshidashingo:20141201230830p:plain

8. 暗号鍵ができました

f:id:yoshidashingo:20141201230943p:plain

S3に暗号化(SSE-KMS)してアップロードする

9. 該当ユーザー(鍵の利用者)でS3にアップロードするときに作成した暗号鍵を指定します

f:id:yoshidashingo:20141201231048p:plain

他のユーザーで中身が見えないか確認

10. 試しに該当のオブジェクトをPublicに変更します

f:id:yoshidashingo:20141201231216p:plain

11. 匿名ユーザー(ブラウザからURLを指定してアクセス)でアクセスしてみても権限エラーになりました

f:id:yoshidashingo:20141201231418p:plain


ということで、今回はS3のサーバーサイド暗号化 with KMSを試したわけですが、その他にもEBSのボリューム暗号化やRDSのストレージ暗号化などで活用できそうです。

また、SDKを介したS3へのKMS暗号化およびKMSを用いたRedshiftへのCOPYなど、今まで「鍵のコントロールをクライアント側に持たせていた処理」も、サーバーサイドでもある程度ユーザーが管理できるということで、SSE-KMSに乗り換えようという動きが出てくるかもしれません。Ruby SDKのV2(core)だと、CSEが実装されてなかったりしますしね。これならいいかも。