

# Lambda 関数 URL へのアクセスの制御
<a name="urls-auth"></a>

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

特定の関数にアタッチされた[リソースベースのポリシー](access-control-resource-based.md)に、[AuthType](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html#lambda-CreateFunctionUrlConfig-request-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 を使用する](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html)」を参照してください。

このページでは、両方の認証タイプによるリソースベースのポリシーの例と、これらのポリシーの作成に、[AddPermission](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html) API オペレーションまたは Lambda コンソールを使用する方法について説明します。アクセス許可の設定後に関数 URL を呼び出す方法については、「[Lambda 関数 URL の呼び出し](urls-invocation.md)」を参照してください。

**Topics**
+ [`AWS_IAM` 認証タイプの使用](#urls-auth-iam)
+ [`NONE` 認証タイプの使用](#urls-auth-none)
+ [ガバナンスとアクセスコントロール](#urls-governance)

## `AWS_IAM` 認証タイプの使用
<a name="urls-auth-iam"></a>

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

リクエストを実行するプリンシパルが関数 URL と同じ AWS アカウント 内にある場合、このプリンシパルには、[アイデンティティベース](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)のポリシー内に `lambda:InvokeFunctionUrl` および `lambda:InvokeFunction` のアクセス許可があるか、**または**、関数のリソースベースのポリシー内でアクセス許可が付与されているか、その**どちらか**が必要です。つまり、既にユーザーがアイデンティティベースのポリシー内に `lambda:InvokeFunctionUrl` および `lambda:InvokeFunction` のアクセス許可を持っている場合は、リソースベースのポリシーはオプションです。ポリシー評価は、[ポリシー評価ロジック](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)で説明されているルールに沿って行われます。

リクエストを行うプリンシパルが別のアカウントにある場合、そのプリンシパルには、`lambda:InvokeFunctionUrl` と `lambda:InvokeFunction` のアクセス許可を付与する ID ベースのポリシーがあること、**および**、呼び出そうとしている関数のためのリソースベースのポリシー内でアクセス許可が付与されていること、その**両方**が必要となります。ポリシー評価は、「[クロスアカウントリクエストが許可されているかどうかを確認](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html#policy-eval-cross-account)」で説明されているルールに従います。

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

**Example — クロスアカウントリソースベースのポリシー**    
****  

```
{
  "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 コンソールの[関数ページ](https://console.aws.amazon.com/lambda/home#/functions)を開きます。

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

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

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

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

1. **[Auth Type]** (認証タイプ) で **[AWS\$1IAM]** を選択します。

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

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

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

または、次の [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) AWS Command Line Interface (AWS CLI) コマンド 使用して、このポリシーを作成することもできます。AWS CLI を使用する場合は、`lambda:InvokeFunctionUrl` と `lambda: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` 認証タイプの使用
<a name="urls-auth-none"></a>

**重要**  
関数 URL の認証タイプが `NONE` で、[リソースベースのポリシー](access-control-resource-based.md)でパブリックアクセスを許可している場合には、認証されていないすべてのユーザーが、関数 URL を使用して関数を呼び出すことができます。

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

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

`NONE` 認証タイプを使用する場合は、リソースベースのポリシーに [lambda:InvokedViaFunctionUrl](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html#lambda-AddPermission-request-InvokedViaFunctionUrl) コンテキストキーを含めることをお勧めします。このコンテキストキーは、関数 URL を介してのみ、関数を呼び出すことができるようにします。他の呼び出し方法を介して呼び出すことはできません。

このポリシーに関する以下の情報に注意してください。
+ すべてのエンティティは `lambda:InvokeFunctionUrl` と `lambda:InvokeFunction` を呼び出すことができます。つまり、関数 URL を持つすべてのユーザーが関数を呼び出すことができます。
+ `lambda:FunctionUrlAuthType` 条件キーの値は `NONE` です。これは、このポリシーステートメントが、関数 URL の認証タイプも `NONE` である場合にのみアクセスを許可することを意味します。
+ `lambda:InvokedViaFunctionUrl` 条件は、関数 URL を介してのみ、関数を呼び出すことができるようにします。他の呼び出し方法を介して呼び出すことはできません。

**Example — NONE 認証タイプのデフォルトのリソースベースのポリシー**    
****  

```
{
  "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:InvokeFunctionUrl` と `lambda: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:invokeFunctionUrl` と `lambda:InvokeFunction` のアクセス許可を付与していない場合、ユーザーが関数 URL の呼び出しを試みたときに、「403 Forbidden」エラーコードが表示されます。これは、関数 URL が `NONE` 認証タイプを使用している場合でも発生します。

## ガバナンスとアクセスコントロール
<a name="urls-governance"></a>

関数 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 を更新するためのアクセス許可を付与しています

**Example クロスアカウント関数 URL のポリシー**    
****  

```
{
    "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"
        }
    ]
}
```

### 条件キー
<a name="urls-condition-keys"></a>

関数 URL に対しきめ細かなアクセス制御を行うには、条件コンテキストキーを使用します。Lambda では、関数 URL 用として、以下のコンテキストをサポートしています。
+ `lambda:FunctionUrlAuthType` - 関数 URL が使用する認証タイプを記述するための列挙値を定義します。この値は `AWS_IAM` または `NONE` となります。
+ `lambda:InvokedViaFunctionUrl` – 関数 URL を介して行われた呼び出しに `lambda:InvokeFunction` アクションを制限します。これにより、関数 URL を介してのみ、関数を呼び出すことができるようにします。他の呼び出し方法を介して呼び出すことはできません。`lambda:InvokedViaFunctionUrl` コンテキストキーを使用するリソースベースのポリシーの例については、「[`AWS_IAM` 認証タイプの使用](#urls-auth-iam)」および「[`NONE` 認証タイプの使用](#urls-auth-none)」の例を参照してください。

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

**Example 明示的な拒否を行う関数 URL ポリシー**    
****  

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

**Example 明示的な許可を行う関数 URL ポリシー**    
****  

```
{
    "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"
                }
            }
        }
    ]
}
```

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

**Example 明示的な拒否を行う関数 URL SCP**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action":[
                "lambda:CreateFunctionUrlConfig",
                "lambda:UpdateFunctionUrlConfig"
            ],
            "Resource": "arn:aws:lambda:*:123456789012:function:*",
            "Condition": {
                "StringNotEquals": {
                    "lambda:FunctionUrlAuthType": "AWS_IAM"
                }
            }
        }
    ]
}
```