blog.bouzuya.net

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 をつけないと動かなくなったらしい。

なぜか権限エラーが出ていたのだけど、このツイートで原因に気づいた。とりあえず Resource に qualifier つきのものを追加して対応した。

互換性を壊す変更を予告なく入れるのはやめてほしい。ぼくが気づいていないだけかもしれないが、今回のはおそらく予告がなかった。……というより、ドキュメントのものだとエラーになるような……。