[アップデート]AWS Lambda 関数URLの認証モデルが変更になります

[アップデート]AWS Lambda 関数URLの認証モデルが変更になります

2025.10.29

はじめに

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:InvokeFunctionUrllambda:InvokeFunction の両方が必要になるようです。

メールの本文に記載されていましたが、既存の関数URLの破壊的変更を回避するため、2026年11月1日までは一時的な例外として、従来までの設定でも動作するようでした。

逆に言うと、2026年11月1日までには対応が求められる形かなと思います。

※AWS Health Dashboardでも影響を受けるリソースが確認ができます。

20251029_lambdaurl_04

対応について

前提として、関数URLには以下の2つの認証タイプがあります。

  • AWS_IAM
  • NONE

AWS_IAM 認証を利用している場合、関数URLを呼び出す側の権限として冒頭で示した通り lambda:InvokeFunctionUrllambda:InvokeFunction が必要となります。

AWS外のリソースから関数URLを利用しているケースでは認証タイプを NONE としているかと思いますが、それであってもLambdaのリソースベースポリシーlambda:InvokeFunctionUrllambda:InvokeFunction の両方のアクセス許可を行う必要があります。

確認してみた

AWS SAMを利用するケースについては、認証タイプを NONE に設定した関数URLを設定する場合、これまでは自動でLambdaのリソースベースポリシーが作成されていました。

ドキュメントによるとAWS SAMはこの変更に追従しているようなので、実際に確認してみます。

リソースの作成

ディレクトリ構成は以下の通りです。

.
├── handler
│   └── lambda_functions_url.py
├── samconfig.toml
└── template.yaml

samconfig.toml は以下の通りです。

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 は以下の通りです。

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 は以下の通りです。

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:InvokeFunctionUrllambda:InvokeFunction の両方が許可されています。

20251029_lambdaurl_01

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

20251029_lambdaurl_02

期待通りレスポンスが返って来ました。

試しに lambda:InvokeFunction のリソースベースポリシーを削除して再度アクセスしてみましたが、(新規で作成するリソースであっても)冒頭の通り本日(2025/10/29)時点では結果が返ってくるようでした。

まとめ

Lambda 関数URLの認証モデルが変更となり、以前までの lambda:InvokeFunctionUrl の権限に加え、 lambda:InvokeFunction の権限も必要になります。

2026年11月1日までに対応頂ければと思います。

参考になりましたら幸いです。

参考文献

この記事をシェアする

FacebookHatena blogX

関連記事