AWS
lambda

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/