API Gateway による Lambda 呼び出し権限の範囲の確認

API Gateway が必要なステージ・メソッド・パスからのみ関数を呼び出せるよう制限してください。

説明

Lambda 権限の source_arn が広範囲だと、API Gateway の複数のステージ・メソッド・パスが同じ関数呼び出し権限を利用できます。不要な範囲を許可すると、新しいパスや設定変更によって意図しない関数呼び出しが生じるおそれがあります。

この権限は、API Gateway サービスが Lambda を呼び出せる範囲を決めます。API 利用者の匿名呼び出しが許可されるかどうかは、API の認証・認可やリソースポリシーなどによって決まります。

想定される影響

  • 意図しない API パスが関数へ要求を転送する可能性があります。
  • 不要な実行で費用や処理負荷が増えるおそれがあります。

対処方法

API Gateway に必要な lambda:InvokeFunction 権限だけを付与し、source_arn を実際の API ID・ステージ・メソッド・パスに限定してください。関数とエイリアスの権限、API 呼び出し元の認証・認可も併せて確認してください。承認済みの呼び出しは成功し、範囲外の呼び出しは拒否されることを試験してください。

例

API Gateway サービスの Lambda 呼び出し権限を比較します。リージョン、アカウント ID、API ID、関数名、エイリアスを実際の統合に合わせて置き換えてください。Dev は Lambda エイリアス、prod は API ステージ名で、それぞれ別の設定です。

変更前

yaml
- name: Lambda 호출 권한 설정
  lambda_policy:
    state: present
    function_name: functionName
    alias: Dev
    statement_id: api-gateway-invoke
    action: lambda:InvokeFunction
    principal: apigateway.amazonaws.com
    source_arn: arn:aws:execute-api:eu-central-1:123456789012:api-id/*/*

ワイルドカードによって複数のステージと呼び出し経路を許可します。API 利用者に匿名アクセスを許可する設定ではありません。

変更後

yaml
- name: Lambda 호출 권한 설정
  lambda_policy:
    state: present
    function_name: functionName
    alias: Dev
    statement_id: api-gateway-invoke
    action: lambda:InvokeFunction
    principal: apigateway.amazonaws.com
    source_arn: arn:aws:execute-api:eu-central-1:123456789012:api-id/prod/GET/orders

prod ステージの GET /orders に呼び出しを限定します。この制限だけで API 利用者の認証や認可が追加されるわけではありません。

参考資料