[アップデート]AWS Lambda 関数URLの認証モデルが変更になります
はじめに
AWSより、以下の件名のメールが届いておりました。
[アクションが必要] AWS アカウントにある Lambda 関数 URL に必要な変更 | [Action Required] Changes required to the Lambda function URLs in your AWS account [AWS Account: <アカウントID>] [AP-NORTHEAST-1]
変更内容を確認すると、これまでは関数URLを利用するためには lambda:InvokeFunctionUrl の権限のみで良かったのですが、2025年10月より lambda:InvokeFunctionUrl と lambda:InvokeFunction の両方が必要になるようです。
メールの本文に記載されていましたが、既存の関数URLの破壊的変更を回避するため、2026年11月1日までは一時的な例外として、従来までの設定でも動作するようでした。
逆に言うと、2026年11月1日までには対応が求められる形かなと思います。
※AWS Health Dashboardでも影響を受けるリソースが確認ができます。

対応について
前提として、関数URLには以下の2つの認証タイプがあります。
- AWS_IAM
- NONE
AWS_IAM 認証を利用している場合、関数URLを呼び出す側の権限として冒頭で示した通り lambda:InvokeFunctionUrl と lambda:InvokeFunction が必要となります。
AWS外のリソースから関数URLを利用しているケースでは認証タイプを NONE としているかと思いますが、それであってもLambdaのリソースベースポリシーで lambda:InvokeFunctionUrl と lambda:InvokeFunction の両方のアクセス許可を行う必要があります。
確認してみた
AWS SAMを利用するケースについては、認証タイプを NONE に設定した関数URLを設定する場合、これまでは自動でLambdaのリソースベースポリシーが作成されていました。
ドキュメントによるとAWS SAMはこの変更に追従しているようなので、実際に確認してみます。
リソースの作成
ディレクトリ構成は以下の通りです。
.
├── handler
│ └── lambda_functions_url.py
├── samconfig.toml
└── template.yaml
samconfig.toml は以下の通りです。
version = 0.1
[default]
region = "ap-northeast-1"
[default.build.parameters]
debug = true
[default.deploy.parameters]
stack_name = "uehara-functions-url-sample"
s3_bucket = "cm-da-uehara"
s3_prefix = "sam-deploy"
capabilities = "CAPABILITY_NAMED_IAM"
confirm_changeset = true
バケット名やスタック名などは任意なので、お手元で確認する際は適宜変更ください。
template.yaml は以下の通りです。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: "Test Application"
Globals:
Function:
Timeout: 180
MemorySize: 128
Resources:
# Lambda
MyLambdaFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: "uehara-functions-url-sample"
Role: !GetAtt MyLambdaFunctionRole.Arn
CodeUri: handler/
Handler: lambda_functions_url.lambda_handler
Runtime: python3.11
ReservedConcurrentExecutions: 5
Architectures:
- x86_64
FunctionUrlConfig:
AuthType: NONE
Cors:
AllowCredentials: false
AllowMethods:
- GET
AllowOrigins:
- "*"
AllowHeaders:
- "*"
MaxAge: 86400
# Lambda Role
MyLambdaFunctionRole:
Type: AWS::IAM::Role
Properties:
RoleName: "uehara-functions-url-sample-lambda-role"
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action: sts:AssumeRole
Principal:
Service:
- lambda.amazonaws.com
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
認証タイプを設定せず、GETリクエストを受け付けるLambdaの関数URLとしています。
Lambdaのスクリプトである handler/lambda_functions_url.py は以下の通りです。
import json
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info(f"Event: {json.dumps(event)}")
return {"statusCode": 200, "body": "OK"}
受けたGETリクエストに対し200 OKを返すだけの単純なものです。
ファイルの用意ができたら、以下コマンドでデプロイを行います。
以下コマンドでデプロイします。
$ sam deploy
作成されたリソースの確認
作成されたLambda関数のリソースベースポリシーを確認すると、確かに lambda:InvokeFunctionUrl と lambda:InvokeFunction の両方が許可されています。

実際に curl コマンドを利用し、作成した関数URLにアクセスしてみます。

期待通りレスポンスが返って来ました。
試しに lambda:InvokeFunction のリソースベースポリシーを削除して再度アクセスしてみましたが、(新規で作成するリソースであっても)冒頭の通り本日(2025/10/29)時点では結果が返ってくるようでした。
まとめ
Lambda 関数URLの認証モデルが変更となり、以前までの lambda:InvokeFunctionUrl の権限に加え、 lambda:InvokeFunction の権限も必要になります。
2026年11月1日までに対応頂ければと思います。
参考になりましたら幸いです。







