Lambda 関数 URL へのアクセスの制御 - AWS Lambda

Lambda 関数 URL へのアクセスの制御

注記

2025 年 10 月以降、新しい関数 URL には lambda:InvokeFunctionUrllambda:InvokeFunction の両方のアクセス許可が必要です。

特定の関数にアタッチされたリソースベースのポリシーに、AuthType パラメータを組み合わせて使用することで、Lambda 関数 URL へのアクセスを制御できます。これら 2 つのコンポーネントの設定によって、関数 URL のために他の管理アクションを呼び出したり実行できるユーザーを指定します。

AuthType パラメーターは、関数 URL へのリクエストを Lambda が認証または承認する方法を決定します。関数 URL を設定する場合は、以下の AuthType オプションのいずれかを指定する必要があります。

  • AWS_IAM– Lambda では、AWS Identity and Access Management (IAM) を使用して、IAM プリンシパルの ID ポリシーと関数のリソースベースのポリシーに基づいて、リクエストを認証および認可します。関数 URL を使用する関数呼び出しを、認証済みユーザーとロールのみに制限する場合は、このオプションを選択します。

  • NONE – Lambda では、関数を呼び出す前の認証を実行しません。ただし、関数のリソースベースのポリシーは常に有効であり、関数 URL がリクエストを受信できるようにするには、パブリックアクセスを許可する必要があります。関数 URL への、未認証でパブリックなアクセスを許可するには、このオプションを選択します。

セキュリティに関するさらなるインサイトを得るには、AWS Identity and Access Management Access Analyzer 使用して、関数 URL への外部アクセスの包括的な分析を取得します。IAM Access Analyzer は、Lambda 関数における新規または更新済みのアクセス許可を監視し、パブリックおよびクロスアカウントのアクセスのために付与する許可を特定するのに役立ちます。IAM Access Analyzer は無料で使用できます。IAM Access Analyzer の使用開始方法については、「AWS IAM Access Analyzer を使用する」を参照してください。

このページでは、両方の認証タイプによるリソースベースのポリシーの例と、これらのポリシーの作成に、AddPermission API オペレーションまたは Lambda コンソールを使用する方法について説明します。アクセス許可の設定後に関数 URL を呼び出す方法については、「Lambda 関数 URL の呼び出し」を参照してください。

AWS_IAM 認証タイプの使用

AWS_IAM 認証タイプが選択されている場合は、Lambda 関数 URL を呼び出す必要のあるユーザーには、lambda:InvokeFunctionUrllambda:InvokeFunction のアクセス許可が付与されている必要があります。呼び出しリクエストを実行するユーザーによっては、このアクセス許可を付与するために、リソースベースのポリシーを使用することが必要になる場合があります。

リクエストを実行するプリンシパルが関数 URL と同じ AWS アカウント 内にある場合、このプリンシパルには、アイデンティティベースのポリシー内に lambda:InvokeFunctionUrl および lambda:InvokeFunction のアクセス許可があるか、または、関数のリソースベースのポリシー内でアクセス許可が付与されているか、そのどちらかが必要です。つまり、既にユーザーがアイデンティティベースのポリシー内に lambda:InvokeFunctionUrl および lambda:InvokeFunction のアクセス許可を持っている場合は、リソースベースのポリシーはオプションです。ポリシー評価は、ポリシー評価ロジックで説明されているルールに沿って行われます。

リクエストを行うプリンシパルが別のアカウントにある場合、そのプリンシパルには、lambda:InvokeFunctionUrllambda:InvokeFunction のアクセス許可を付与する ID ベースのポリシーがあること、および、呼び出そうとしている関数のためのリソースベースのポリシー内でアクセス許可が付与されていること、その両方が必要となります。ポリシー評価は、「クロスアカウントリクエストが許可されているかどうかを確認」で説明されているルールに従います。

次に示す、リソースベースのポリシー例では、AWS アカウント 444455556666 内で、example ロールに対し関数 my-function に関連付けられた関数 URL を呼び出すことを許可しています。lambda:InvokedViaFunctionUrl コンテキストキーは、 lambda:InvokeFunction アクションを関数 URL 呼び出しに制限します。つまり、プリンシパルは関数 URL を使用して関数を呼び出す必要があります。lambda:InvokedViaFunctionUrl を含めない場合、プリンシパルは関数 URL に加えて、他の呼び出し方法を通じて関数を呼び出すことができます。

例 — クロスアカウントリソースベースのポリシー
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Condition": { "Bool": { "lambda:InvokedViaFunctionUrl": "true" } } } ] }

このリソースベースのポリシーは、以下の手順に従いコンソールから作成できます。

別のアカウントに URL の呼び出し許可を付与するには (コンソール)
  1. Lambda コンソールの関数ページを開きます。

  2. URL での呼び出し許可を付与する関数の名前を選択します。

  3. [Configuration] (設定) タブを開き、次に [Permissions] (アクセス許可) をクリックします。

  4. [Resource-based policy] (リソースベースのポリシー) で、[Add permissions] (アクセス許可を追加) をクリックします。

  5. [Function URL] (関数 URL) をクリックします。

  6. [Auth Type] (認証タイプ) で [AWS_IAM] を選択します。

  7. ポリシーステートメントのステートメント ID を入力します。

  8. [プリンシパル] には、アカウント ID または許可の付与先となるユーザーまたはロールの Amazon リソースネーム (ARN) を入力します。例: 444455556666

  9. [保存] を選択します。

または、次の add-permission AWS Command Line Interface (AWS CLI) コマンド 使用して、このポリシーを作成することもできます。AWS CLI を使用する場合は、lambda:InvokeFunctionUrllambda:InvokeFunction のステートメントを個別に追加する必要があります。例:

aws lambda add-permission --function-name my-function \ --statement-id UrlPolicyInvokeURL \ --action lambda:InvokeFunctionUrl \ --principal 444455556666 \ --function-url-auth-type AWS_IAM
aws lambda add-permission --function-name my-function \ --statement-id UrlPolicyInvokeFunction \ --action lambda:InvokeFunction \ --principal 444455556666 \ --invoked-via-function-url

NONE 認証タイプの使用

重要

関数 URL の認証タイプが NONE で、リソースベースのポリシーでパブリックアクセスを許可している場合には、認証されていないすべてのユーザーが、関数 URL を使用して関数を呼び出すことができます。

一部のケースでは、関数 URL の公開が必要な場合もあります。例えば、ウェブブラウザから直接行われたリクエストを処理する場合などです。関数 URL へのパブリックアクセスを許可するには、認証タイプに NONE を選択します

NONE の認証タイプを選択すると、Lambda は関数 URL へのリクエストに対して IAM による認証を行いません。ただし、関数には、lambda:InvokeFunctionUrllambda:InvokeFunction を許可するリソースベースのポリシーが必要です。コンソールまたは AWS Serverless Application Model (AWS SAM) を使用し、認証タイプ NONE の関数 URL を作成すると、Lambda はリソースベースのポリシーを自動的に作成します。AWS CLI、AWS CloudFormation、または Lambda API を直接使用している場合には、ポリシーを手作業で追加する必要があります。

NONE 認証タイプを使用する場合は、リソースベースのポリシーに lambda:InvokedViaFunctionUrl コンテキストキーを含めることをお勧めします。このコンテキストキーは、関数 URL を介してのみ、関数を呼び出すことができるようにします。他の呼び出し方法を介して呼び出すことはできません。

このポリシーに関する以下の情報に注意してください。

  • すべてのエンティティは lambda:InvokeFunctionUrllambda:InvokeFunction を呼び出すことができます。つまり、関数 URL を持つすべてのユーザーが関数を呼び出すことができます。

  • lambda:FunctionUrlAuthType 条件キーの値は NONE です。これは、このポリシーステートメントが、関数 URL の認証タイプも NONE である場合にのみアクセスを許可することを意味します。

  • lambda:InvokedViaFunctionUrl 条件は、関数 URL を介してのみ、関数を呼び出すことができるようにします。他の呼び出し方法を介して呼び出すことはできません。

例 — NONE 認証タイプのデフォルトのリソースベースのポリシー
JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "FunctionURLAllowPublicAccess", "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "NONE" } } }, { "Sid": "FunctionURLInvokeAllowPublicAccess", "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "Bool": { "lambda:InvokedViaFunctionUrl": "true" } } } ] }
AWS CLI を使用してリソースベースのポリシーを作成する

コンソールまたは AWS SAM を使用して認証タイプ NONE の関数 URL を作成しない限り、リソースベースのポリシーを自分で追加する必要があります。lambda:InvokeFunctionUrllambda:InvokeFunction のアクセス許可にステートメントを作成するための次のコマンドを使用します。各ステートメントは、個別のコマンドで追加する必要があります。

aws lambda add-permission \ --function-name UrlTestFunction \ --statement-id UrlPolicyInvokeURL \ --action lambda:InvokeFunctionUrl \ --principal * \ --function-url-auth-type NONE
aws lambda add-permission \ --function-name UrlTestFunction \ --statement-id UrlPolicyInvokeFunction \ --action lambda:InvokeFunction \ --principal * \ --invoked-via-function-url
注記

認証タイプ NONE で関数 URL を削除した場合、Lambda では、関連するリソースベースのポリシーが自動的に削除されません。このポリシーを削除する場合は、手動で削除する必要があります。

関数のリソースベースのポリシーが lambda:invokeFunctionUrllambda:InvokeFunction のアクセス許可を付与していない場合、ユーザーが関数 URL の呼び出しを試みたときに、「403 Forbidden」エラーコードが表示されます。これは、関数 URL が NONE 認証タイプを使用している場合でも発生します。

ガバナンスとアクセスコントロール

関数 URL の呼び出しに関するアクセス許可に加えて、関数 URL の設定に使用するアクションによってもアクセス制御が可能です。Lambda では、関数 URL に対して次の IAM ポリシーアクションがサポートされます。

  • lambda:InvokeFunctionUrl – 関数 URL を使用して Lambda 関数を呼び出します。

  • lambda:CreateFunctionUrlConfig – 関数 URL を作成し、その を設定します。AuthType

  • lambda:UpdateFunctionUrlConfig – 関数 URL 設定とその を更新します。AuthType

  • lambda:GetFunctionUrlConfig – 関数 URL の詳細を表示します。

  • lambda:ListFunctionUrlConfigs – 関数 URL 設定内容を一覧表示します。

  • lambda:DeleteFunctionUrlConfig – 関数 URL を削除します。

他の AWS エンティティに対し、関数 URL によるアクセスを許可または拒否するには、IAM ポリシーにこれらのアクションを含めます。例えば、次のポリシーでは、AWS アカウント 444455556666 内にある example ロールに対し、アカウント 123456789012 にある関数 my-function の関数 URL を更新するためのアクセス許可を付与しています

例 クロスアカウント関数 URL のポリシー
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action": "lambda:UpdateFunctionUrlConfig", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function" } ] }

条件キー

関数 URL に対しきめ細かなアクセス制御を行うには、条件コンテキストキーを使用します。Lambda では、関数 URL 用として、以下のコンテキストをサポートしています。

  • lambda:FunctionUrlAuthType - 関数 URL が使用する認証タイプを記述するための列挙値を定義します。この値は AWS_IAM または NONE となります。

  • lambda:InvokedViaFunctionUrl – 関数 URL を介して行われた呼び出しに lambda:InvokeFunction アクションを制限します。これにより、関数 URL を介してのみ、関数を呼び出すことができるようにします。他の呼び出し方法を介して呼び出すことはできません。lambda:InvokedViaFunctionUrl コンテキストキーを使用するリソースベースのポリシーの例については、「AWS_IAM 認証タイプの使用」および「NONE 認証タイプの使用」の例を参照してください。

これらのコンテキストキーは、関数に関連付けられたポリシーの中で使用できます。例えば、関数 URL の構成を変更できるユーザーを制限したい場合があります。URL 認証タイプに NONE を使用する任意の関数に対して、すべての UpdateFunctionUrlConfig リクエストを拒否するには、次のポリシーを定義します。

例 明示的な拒否を行う関数 URL ポリシー
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action":[ "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "NONE" } } } ] }

AWS アカウント 444455556666example ロールに、URL 認証タイプ AWS_IAM を使用する関数に対して CreateFunctionUrlConfig および UpdateFunctionUrlConfig リクエストを許可するには、次のポリシーを定義できます。

例 明示的な許可を行う関数 URL ポリシー
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action":[ "lambda:CreateFunctionUrlConfig", "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } } ] }

また、この条件キーをサービスコントロールポリシー (SCP) で使用することもできます。SCP は、AWS Organizations にある組織全体でアクセス許可を管理する際に使用します。例えば、認証タイプに AWS_IAM を使用していない関数 URL を作成または更新することを、ユーザーに対し拒否するには、次のサービスコントロールポリシーを使用します。

例 明示的な拒否を行う関数 URL SCP
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action":[ "lambda:CreateFunctionUrlConfig", "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:*:123456789012:function:*", "Condition": { "StringNotEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } } ] }