AWS Lambda の関数ポリシーをチェックする Lambda を実装してみた

はじめに

みなさんは Lambda 関数にも S3 バケットポリシーのようにリソースベースのポリシーが存在していることは知っていますでしょうか?
つまり、どこそこ~からのアクセスを許可しますといったポリシーですね。
以下、公式ドキュメントの参考資料です。
AWS Lambda でリソースベースのポリシーを使用する (Lambda 関数ポリシー) - AWS Lambda
このポリシーを設定することで、別のアカウントからでも Lambda を呼び出すことができます。
クロスアカウントで Lambda を使用できますので、マイクロサービス化できてとても便利な機能となっております。

ですが、便利であるがゆえにセキュリティ面ではチェックした方がよい機能だと思います。

コンソールでの Lambda 関数ポリシーの確認方法

日本語版公式ドキュメントのやり方が以前の画面UIのままだったのでメモ書き程度にコンソールでの確認方法を載せます。
Lambda 関数の画面のDesigner画面の左上、鍵マークをクリック。
f:id:rioner2525:20181113140507p:plain
すると下画面の左側に関数のポリシーが表示されます。
f:id:rioner2525:20181113140648p:plain
この例は API Gateway の呼び先として設定された Lambda です。
"Principal": * とかになってたりすると誰でもこの Lambda を呼べるようになってしまいます。

実装した Lambda のコード

今回は許可するアカウント番号をDynamoDBに保存しました。
'account_id'の項目にアクセスを許可するアカウント番号を入力してあります。

コードの置き場所はここです。
LambdaPolicyCheck/lambda_function.py at master · rioner/LambdaPolicyCheck · GitHub
コード内では最終結果をprintしてますがメールか何かで運用者に投げる方式にしましょう。

以上です。