2017-08-24 AWS Lambda の Resource-Based Policies の仕様変更
AWS Lambda の Resource-Based Policies に仕様変更があったようだ。
http://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html
{
"Statement": "{\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:apigateway:us-east-1::my-api-id:/test/petstorewalkthrough/pets\"}},
\"Action\":[\"lambda:InvokeFunction\"],
\"Resource\":\"arn:aws:lambda:us-west-2:account-id:function:helloworld\",
\"Effect\":\"Allow\",
\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},
\"Sid\":\"5\"}"
}
これは上記の公式ドキュメントからの引用だけど、ぼくも Resource 単位で lambda:InvokeFunction
の対象を絞って許可していた。
ところが、この形での Resource 指定が今朝 (?) から許可されなくなった。どうも関数名だけでなく、その後ろに qualifier をつけないと動かなくなったらしい。
どっかのタイミングでAws::Lambda::Clientがinvokeした時にfunction_nameのarnに指定した値に、勝手に:currentが付いたリソース名を要求する様になったらしい。それでversion指定のないIAMの権限だと実行できなくて弾かれている。
— イキリーマン (@joker1007) 2017年8月23日
なぜか権限エラーが出ていたのだけど、このツイートで原因に気づいた。とりあえず Resource に qualifier つきのものを追加して対応した。
互換性を壊す変更を予告なく入れるのはやめてほしい。ぼくが気づいていないだけかもしれないが、今回のはおそらく予告がなかった。……というより、ドキュメントのものだとエラーになるような……。