これはなに?
全Lambdaからコードをzipダウンロードしてきて、zipのまま検索しました。
- ① 全Lambdaからコードをダウンロード
- ② zipのまま検索(zipgrep使用)
の2つの手順で行います。
利用ケース
リポジトリ管理していない直書Lambdaなどが大量に存在するカオスな検証アカウントで特定キーワードを含むLambdaがないか調査するときに使用。
カオスなアカウントが出来上がらないようにするのがいいとは思うのですが、古の闇に手を突っ込む機会に恵まれました。
① 全Lambdaからコードをダウンロード
nemani/download_all_lambda_functions.sh
https://gist.github.com/nemani/defdde356b6678352bcd4af69b7fe529
これを使います。
前提条件
・wgetが必要
・cliのアウトプットをtextにしておく
・bashつかわないとだめかも
・中でaws clilつかっているのでプロファイルなどは設定しておく
使用中
・”Completed Downloading all the Lamdba Functions!”って出るけどバックグラウンドにタスク投げただけなので、全く終わってない
・数分またないとダウンロードが始まらないので数分待つ
・全てのバックグラウンドタスク終わったという合図がないのでダウンロードタスクが止まってzipの数が関数の数と一致したら完了と見做しました。
使用例
# この辺はデフォルトプロファイルなど常に設定しているなら不要 export AWS_DEFAULT_PROFILE=xxxxx export AWS_DEFAULT_REGION=ap-northeast-1 export AWS_DEFAULT_OUTPUT=text # 実行 bash download_all_lambda_functions.sh
出力結果
lambda_functions/* に関数ごとにzipが保存される
備考
リージョンごとにとってくるので、ちょっとめんどい。
他のリージョン指定でとってくるときフォルダは分けたほうがいいかも。
for region in `aws ec2 describe-regions --query 'Regions[].RegionName' --region us-west-1 --output text` do 〜 done
で全リージョンをグルグル回してやっても良かったかも
② zipのまま検索(zipgrep使用)
使用例(HOGEHOGEを検索)
cd lambda_functions for file in *.zip; do res=`zipgrep -n HOGEHOGE $file` if [ -n "$res" ]; then echo "x:$file"; echo "$res"; else echo "o:$file"; fi done
ボツ
最初は
find ./lambda_functions -name '*.zip' | xargs -I file zipgrep HOGEHOGE file
とかでやってたんですが、これだと、どのzipで検出したかわからなかったので前述のを流して確認しています。
出力結果例
キーワードに引っかかったlambdaを x:〜
引っかからなかったlambdaを o:〜
で出力しています。
x:aaaa-checker.zip lambda_function.py:30: target = "HOGEHOGE", o:bbbb-deleter.zip o:cccc-notifier.zip x:dddd-test.zip lambda_function.py:21: print("HOGEHOGE")", ...
備考
Lambda にライブラリや.env環境が同梱されているとgrepはけっこう時間がかかる。