Posted at

AWS Lambdaを環境変数を用いて実行する際に""次のことを実行する権限がありません: kms:Encrypt.""と表示されてしまうので解消しようと思ったらできなかった


AWS Lambdaを環境変数を用いて実行する際に""次のことを実行する権限がありません: kms:Encrypt.""と表示されてしまうので解消してみたできなかった


何を目的に、何をしたのか。(達成できてない場合は「できてません」も冒頭で)

ロールにポリシーを付与しているにもかかわらず、Lambda上で環境変数を用いて関数を作成しようとしてみると、下記のエラーメッセージが出てしまう。

image.png


結論やわかったこと

わからなかった。mustな機能ではないので今回は見送る。


実際に行った事


検証①そもそもポリシーがkms:Encryptの権限を認証するように書かれていない

まずAWS管理チームから頂いたKMSを認証するポリシーをシュミレートしたところ、単体では

kms:Encrypt

をサポートしていなかった。つまりルートユーザーで管理しているKMSにかかるポリシーではkms:Encryptへのアクセスを承認していない。

image.png

そのためインラインポリシー内にkms:Encryptを追加して、ロールをシュミレートしてみたところ実際に結果としてallowedが帰ってきた。

ポリシーのシュミレートについては下記参照。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_testing-policies.html

しかし、インラインポリシーにkms:Encryptを設定して,

シュミレータ上でallowになっていてもエラーメッセージは消えなかった。

ルートユーザーが作成したポリシー内に権限が入っているべきなのだろうか。


検証②キーポリシーに入っていないケース

 {

"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::XXXX:role/XXXX",
"arn:aws:iam::XXXX:user/XXXX"
]
},
"Action": [
"kms:Encrypt",
"XXXXXXXXXXX"
],
"Resource": "*"
},

実際にキーポリシーにはアクセス権限の付与が入っているのでここは問題ない。


結論やわかったことに対する補足

AWSで公開したくないパラメータを扱う3つの方法について

http://yebisupress.dac.co.jp/2017/02/14/aws%e3%81%aecredentials%e3%82%92%e6%b3%a8%e6%84%8f%e3%81%97%e3%81%a6%e5%8f%96%e3%82%8a%e6%89%b1%e3%81%86%e8%a9%b1/