helloworlds

not a noun, it's a verb

【AWS】Lambdaの環境変数の暗号化でバグ!? 

仕事が忙しく、なかなか更新できていませんでしたが、また徐々にためていた記事をアップできたらと思います!

事象

Lambda関数が、KMS(CMK)を利用し暗号化している環境変数の値を復号し、プログラムを実行する場面があった。 しかし、復号に失敗し続けている事象が発生。

確認したこと

  • CMK
  • キーのタイプ
  • キーの仕様
  • キーポリシー (ポリシーは、json形式で確認可能)
  • キーの使用("暗号化および復号化"になっているか)

  • Lambda

  • 設定した環境変数の値(そもそも)
  • 暗号化に使用したCMKは、適切なCMKで暗号化してるか(そもそも)
  • LmbdaにアタッチしているRole 

  • その他関連しそうなサービスのPolicyなど

Lambdaに関しては、環境変数に編集でKMSの使用を設定できる。

f:id:o21o21:20200820095733p:plain

転送時の暗号化に使用するヘルパーの有効化←にチェックを入れることで、環境変数値の横に暗号化のボタンが表示される。 暗号化したいデータを入力し、暗号化を押下すると、暗号化に使用するKMS(CMK)を選択できる。

それでも復号化に失敗した

上記の内容を何度も確認し、関連するツールなども確認したのに、同じエラーが出続けました。 (今回は、LambdaがJavaで実装されている。)

{
  "errorMessage": "null (Service: AWSKMS; Status Code: 400; Error Code: InvalidCiphertextException; Request ID: xxxxxxxx-1234-5678-xxxx-xxxxxxxxxxxxx)",
  "errorType": "com.amazonaws.services.kms.model.InvalidCiphertextException",

Class InvalidCiphertextException

上記に記載されていた説明によると、

From the ImportKeyMaterial operation, the request was rejected because AWS KMS could not decrypt the encrypted (wrapped) key material. (AWS KMSが暗号化されたキーマテリアルを復号化できなかったため、ImportKeyMaterialオペレーションからリクエストが拒否されました。)

やはり復号化に失敗しているよ、というエラーメッセージ。

バグ発見

AWSコンソールのLmbda関数ページで、ポチポチで環境変数の編集する際、任意のKMSを指定し暗号化し保存。 暗号化した値を復号化すると、復号化に失敗しました。

つまり、AWSコンソールのLambda関数ページで表示されている値は、正しくない値ということ。

裏取り

試しにaws cliで暗号化し、暗号化されたデータをLambdaの環境変数の値にそのまま入力。 プログラムの方で復号化が成功した。

まとめ

Lambda関数ページのUIは大分アップデートされているので、その関係でバグが発生しているようでした。(2020/07時点) たしかに、以前のUIをみてみると、環境変数の編集部分のUIも変更されているようでした。

AWSで明らかに詰まっている場合、cliを使用して裏取りや、describeなどで設定項目などを確認することは改めて必須だと思いました。

以上.