【小ネタ】S3のデフォルト暗号化にAWS-KMSを利用する際の注意事項

S3のデフォルト暗号化の際の、特にCLI利用時に困ったちょっとした注意事項をアウトプットします。ドキュメントにある仕様だけだとわからないことはいっぱいあるので、気をつけないといけないですね。
2018.08.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、臼田です。

皆さん暗号化していますか?

今回はS3のデフォルト暗号化をAWS-KMSで利用している際、特にCLIで利用している際に困ったことがあったので注意事項としてまとめました。

KMSでデフォルト暗号化設定するとどうなるのか

マネジメントコンソールからS3のデフォルト暗号化設定をAWS-KMSで行う際、プロパティからデフォルト暗号化 -> AWS-KMSを選択したあとCMKを選びます。

設定後、CMKのエイリアスが表示されるのですが、画面をリロードするとエイリアスではなくカスタムKMS ARNとして扱われARNが表示されます。この状態ではどのCMKを利用しているか分かりづらいです。また、この状態はただのテキストとして扱われており、適切なARNであるかは確認されません。

マネジメントコンソールから設定する場合には選択時にエイリアスを選択するのでまだわかりやすいですが、awscli等から設定する場合にはput-bucket-encryption apiを利用しますがこちらでCMKのARNを流し込んだ際に正しいARNであるかチェックされません。間違っていても設定自体は正常に処理されます。

そして、ファイルをアップロードする段階になってエラーが発生し初めて気づきます。

マネジメントコンソールから確認しても正常であるかを判断することができない(ARNの文字列なので突合させればいいですが、目視では現実的ではない)ので気をつける必要があります。

どうすればいいのか

下記のような方法が考えられます。

  • 設定前・設定時
    • マネジメントコンソールから設定する
    • CLIやSDKからCMKのARNが正しいことをAPIで確認した後利用する
  • 設定後
    • テストファイルをアップロードする処理を入れる
    • API等で取得したARNが適切であることを確認する

API的な話をすると、get-bucket-encryptionして取得したARNをdescribe-key等で確認すれば問題ありません。

一度にたくさんのS3を処理する場合には、特にAPIで確認すると楽だと思います。

まとめ

S3でデフォルト暗号化としてAWS-KMSを使う際の注意事項をあげました。

特にCLIから設定する場合には、設定時は値が間違ってても正常に処理されてしまうので、信頼できる値を利用するか、設定後の確認を徹底するようにしましょう。