Lambda 関数 URL の設定一覧を取得するスクリプトを作ってみた

2022.04.12

こんにちは、大前です。

先日、SCP でパブリックな Lambda 関数 URL の設定を抑止するためのポリシーを試してみました。

一方で、上記ブログ内にも記載していますが、SCP で防げるのはあくまで Lambda 関数 URL の設定・更新時 のみです。既にパブリックな Lambda 関数 URL が作成されている場合にはそれを見つけて設定を変更する必要があります。

そこで、アカウント内の Lambda 関数 URL の設定一覧を取得するためのスクリプトを作成しましたので、ブログに残したいと思います。よければご利用ください。

作成したスクリプト

作成したスクリプトは以下です。一応、引数で取得する Lambda 関数 URL のタイプ( ALL | AWS_IAM | NONE )を指定できるようにしています。用途に合わせて改修してお使いください。

if [ -z $1 ]; then
    echo "error please set url config type. ( ALL | AWS_IAM | NONE )"
    exit 1
fi

echo "start getting available regions ..."
REGIONS=`aws ec2 describe-regions | jq -r .Regions[].RegionName`

for r in ${REGIONS[*]}
do
    echo "start gegetting lambda functions in $r ..."
    LIST_RESULT=`aws lambda list-functions --region "${r}" | jq -r .Functions[].FunctionName`
    echo "start searching url configs in $r ..."
    for lr in ${LIST_RESULT[*]}
    do
        TMP_RESULT=`aws lambda list-function-url-configs --function-name "${lr}" --region "${r}"`
        TMP_RESULT_LENGTH=`echo $TMP_RESULT | jq .FunctionUrlConfigs | jq length`
        if [ $TMP_RESULT_LENGTH -gt 0 ]; then
            TMP_RESULT_TYPE=`echo $TMP_RESULT | jq -r .FunctionUrlConfigs[].AuthType`
            if [ "$1" = "ALL" ]; then
                echo $TMP_RESULT
            elif [ "$1" = "$TMP_RESULT_TYPE" ]; then
                echo $TMP_RESULT
            fi
        fi
    done
done

実行してみた

実行するとこのような形になります。今回は CloudShell 上で実行しました。

(補足) CloudShell 上での AWS CLI アップデート

本スクリプトの動作確認は CloudShell で実施していたのですが、検証時点では CloudShell でデフォルトで利用できる AWS CLI のバージョンが最新ではなかったため、Lambda 関数 URL を取得するコマンドを実行するために AWS CLI を最新化してから実行する必要がありました。

更新は以下ドキュメントを参考に実施しました。

参考 : AWS CLI の最新バージョンをインストールまたは更新します。 - AWS Command Line Interface

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install --update

おわりに

Lambda 関数 URL の一覧を取得するためのスクリプトを作成してみました。これを利用し、パブリックな Lambda 関数 URL が存在しないかなどのチェックに役立てて頂ければ幸いです。

以上、AWS 事業本部の大前でした。

参考