Lambda 関数ポリシー削除方法ついて

はじめに

オペレーチョンチームの高橋です。
Lambda 関数ポリシー削除方法についてのご紹介です。

Lambda 関数ポリシー

Lambda 関数ポリシーはLambda 関数の呼び出し権限を管理するために使用されます。
例えばS3にLambda 関数を呼び出す権限を付与する場合です。

今回マネジメントコンソールにてLambda をS3イベントにて動かそうと設定していたところ、
バケットを間違えて設定していました。
トリガーを削除して再度設定をしたのですが、関数ポリシーからは削除されていませんでした。

関数ポリシー

関数ポリシーの内容

{
    "Version": "2012-10-17",
    "Id": "default",
    "Statement": [
        {
            "Sid": "lc-aaaaaaaa-****-****-****-***********",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-west-2:***********:function:関数名",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceAccount": "***********"
                },
                "ArnLike": {
                    "AWS:SourceArn": "arn:aws:s3:::バケット名A" →間違えたバケット名で設定
                }
            }
        },
        {
            "Sid": "lc-bbbbbbbb-****-****-****-***********",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-west-2:***********:function:関数名",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceAccount": "***********"
                },
                "ArnLike": {
                    "AWS:SourceArn": "arn:aws:s3:::バケット名B" →正しいバケット名で設定
                }
            }
        }
    ]
}

このままでも修正後のポリシーがあるので動くのですが、
正しい状態にしておきたいので間違えて設定したポリシーを削除します。

対応方法

ドキュメントを見たところAWS CLIを使用して削除するようです。

AWS Lambda でリソースベースのポリシーを使用する (Lambda 関数ポリシー)

例 5: Lambda 関数ポリシーからアクセス権限を削除する Lambda 関数ポリシーからアクセス権限を削除するには、remove-permission コマンドを使用して、関数名とステートメント ID を指定します。

今回はSID[lc-aaaaaaaa-****-****-****-***********]を削除します。

functionname=関数名
statementid=lc-aaaaaaaa-****-****-****-***********
regionname=us-west-2
profilename=プロファイル名

$ aws lambda remove-permission \
> --function-name ${functionname} \
> --statement-id ${statementid} \
> --region ${regionname} \
> --profile ${profilename}

確認

  • AWS CLIで確認
$ aws lambda get-policy \
> --function-name ${functionname} \
> --region ${regionname} \
> --profile ${profilename}
{
    "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"default\",\"Statement\":[{\"Sid\":\"lc-bbbbbbbb-****-****-****-****************\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"s3.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-west-2:****************:function:関数名\",\"Condition\":{\"StringEquals\":{\"AWS:SourceAccount\":\"****************\"},\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:s3:::バケットB\"}}}]}"
}
  • マネジメントコンソールで確認

関数ポリシー2

無事、Lamdba 関数ポリシーを正しい状態に戻すことができました。

まとめ

Lambda 関数ポリシーは現時点ではマネジメントコンソールで編集できないようです。
ドキュメントに詳しく書いてありますが本ブログも参考にしていただけると幸いです。

参考URL

AWS Lambda でリソースベースのポリシーを使用する (Lambda 関数ポリシー)

ではまた。