

# Controlar o acesso aos URLs de função do Lambda
<a name="urls-auth"></a>

**nota**  
A partir de outubro de 2025, os novos URLs da função exigirão as permissões `lambda:InvokeFunctionUrl` e `lambda:InvokeFunction`.

É possível controlar o acesso aos URLs da função do Lambda usando o parâmetro [AuthType](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html#lambda-CreateFunctionUrlConfig-request-AuthType) combino com as [políticas baseadas em recursos](access-control-resource-based.md) anexadas a sua função específica. A configuração desses dois componentes determina quem pode invocar ou executar outras ações administrativas no URL de função.

O parâmetro `AuthType` determina como o Lambda autentica ou autoriza solicitações ao URL de função. Ao configurar o URL de função, você deve especificar uma das seguintes opções de `AuthType`:
+ `AWS_IAM`: o Lambda usa o AWS Identity and Access Management (IAM) para autenticar e autorizar solicitações com base na política de identidade da entidade principal do IAM e na política baseada em recursos da função. Escolha essa opção se quiser que apenas usuários e perfis autenticados para invocar a função usando o URL da função.
+ `NONE`: o Lambda não realiza nenhuma autenticação antes de invocar a função. Porém, a política baseada em recursos da função está sempre em vigor e deve conceder acesso público antes que o URL de função possa receber solicitações. Escolha essa opção para permitir acesso público e não autenticado ao URL de função.

Para obter informações adicionais sobre segurança, você pode usar AWS Identity and Access Management Access Analyzer para obter uma análise abrangente do acesso externo ao URL de função. O IAM Access Analyzer também monitora permissões novas ou atualizadas nas funções do Lambda para ajudá-lo a identificar as permissões que concedem acesso público e acesso entre contas. Você pode usar o analisador de acesso do IAM sem custo. Para começar a usar o IAM Access Analyzer, consulte [Usando o AWS IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html).

Esta página contém exemplos de políticas baseadas em recursos para ambos os tipos de autenticação e como criar essas políticas usando a operação da API [AddPermission](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html) ou o console do Lambda. Para obter informações sobre como invocar o URL da função depois de configurar as permissões, consulte [Invocar URLs de função do Lambda](urls-invocation.md).

**Topics**
+ [Usar o tipo de autenticação `AWS_IAM`](#urls-auth-iam)
+ [Usar o tipo de autenticação `NONE`](#urls-auth-none)
+ [Governança e controle de acesso](#urls-governance)

## Usar o tipo de autenticação `AWS_IAM`
<a name="urls-auth-iam"></a>

Se você escolher o tipo de autenticação `AWS_IAM`, os usuários que precisarem invocar o URL da função do Lambda deverão ter as permissões `lambda:InvokeFunctionUrl` e `lambda:InvokeFunction`. Dependendo de quem faz a solicitação de invocação, pode ser necessário conceder essa permissão usando uma [política baseada em recursos](access-control-resource-based.md).

Se a entidade principal fazendo a solicitação estiver na mesma Conta da AWS que o URL da função, a entidade principal deve **ou** ter permissões `lambda:InvokeFunctionUrl` na `lambda:InvokeFunction` [política baseada em identidade](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html), **ou** ter permissões concedidas na política baseada em recursos da função. Em outras palavras, uma política baseada em recursos será opcional se o usuário já tiver permissões `lambda:InvokeFunctionUrl` e `lambda:InvokeFunction` em sua política baseada em identidade. A avaliação de políticas segue as regras descritas na [Lógica de avaliação de políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html).

Se a entidade principal fazendo a solicitação estiver em uma conta diferente, a entidade principal deverá ter **ambas**, uma política baseada em identidade que forneça a ela as permissões `lambda:InvokeFunctionUrl` e `lambda:InvokeFunction` **e** permissões concedidas em uma política baseada em recursos para a função que ela está tentando invocar. A avaliação da política segue as regras descritas em [Determinar se uma solicitação entre contas é permitida](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html#policy-eval-cross-account).

A política baseada em recursos a seguir permite que a função `example` na Conta da AWS `444455556666` invoque o URL da função associado à função `my-function`. A chave de contexto [lambda:invokedViaFunctionUrl](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html#lambda-AddPermission-request-InvokedViaFunctionUrl) restringe a ação `lambda:InvokeFunction` para as chamadas do URL da função. Isso significa que a entidade principal deve usar o URL da função para invocar a função. Se você não incluir `lambda:InvokedViaFunctionUrl`, a entidade principal poderá invocar sua função por meio de outros métodos de invocação, além do URL da função.

**Example — Política baseada em recursos entre contas**    
****  

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

Você pode criar essa política baseada em recursos por meio do console, seguindo as seguintes etapas:

**Como conceder permissões de invocação de URL a outra conta (console)**

1. Abra a [página Funções](https://console.aws.amazon.com/lambda/home#/functions) do console do Lambda.

1. Escolha o nome da função para a qual deseja conceder permissões de invocação de URL.

1. Escolha a guia **Configuration** (Configuração) e, depois, **Permissions** (Permissões).

1. Em **Resource-based policy** (Política baseada em recursos), escolha **Add permissions** (Adicionar permissões).

1. Escolha **Function URL** (URL de função).

1. Para **Auth type** (Tipo de autenticação), escolha **AWS\$1IAM**.

1. Insira um **ID de declaração** para sua declaração de política.

1. Em **Entidade principal**, insira o ID da conta ou o nome do recurso da Amazon (ARN) do usuário ou da função para a qual você deseja conceder permissões. Por exemplo: **444455556666**.

1. Escolha **Salvar**.

Como alternativa, você pode criar essa política usando os seguintes comandos [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) do AWS Command Line Interface (AWS CLI). Ao usar a AWS CLI, você deve adicionar as declarações `lambda:InvokeFunctionUrl` e `lambda:InvokeFunction` separadamente. Por exemplo:

```
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
```

## Usar o tipo de autenticação `NONE`
<a name="urls-auth-none"></a>

**Importante**  
Quando o tipo de autenticação do URL dA função for `NONE` e você tiver uma [política baseada em recursos](access-control-resource-based.md) que concede acesso público, qualquer usuário não autenticado com o URL da função poderá invocar a função.

Em alguns casos, você pode querer que o URL da função seja público. Por exemplo, você pode querer atender a solicitações feitas diretamente de um navegador da Web. Para permitir acesso público ao URL de função, escolha o tipo de autenticação `NONE`.

Se você escolher o tipo de autenticação `NONE`, o Lambda não usará o IAM para autenticar solicitações ao URL de função. No entanto, sua função deve ter uma política baseada em recursos que permita `lambda:InvokeFunctionUrl` e `lambda:InvokeFunction`. Quando você cria um URL da função com o tipo de autenticação `NONE` usando o console ou o AWS Serverless Application Model (AWS SAM), o Lambda cria automaticamente a política baseada em recursos para você. Se estiver usando a AWS CLI, o AWS CloudFormation ou a API do Lambda diretamente, deverá [adicionar as políticas](#policy-cli) você mesmo.

Recomendamos que você inclua a chave de contexto [lambda:InvokedViaFunctionUrl](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html#lambda-AddPermission-request-InvokedViaFunctionUrl) em suas políticas baseadas em recursos ao usar o tipo de autenticação `NONE`. Essa chave de contexto garante que a função só possa ser invocada por meio do URL da função e não por meio de outros métodos de invocação.

Observe o seguinte sobre essa política:
+ Todas as entidades podem chamar `lambda:InvokeFunctionUrl` e `lambda:InvokeFunction`. Isso significa que qualquer pessoa que tenha o URL da sua função pode invocá-la.
+ O valor da chave de condição `lambda:FunctionUrlAuthType` é `NONE`. Isso significa que a instrução da política só permite acesso quando o tipo de autenticação do URL da função também é `NONE`.
+ A condição `lambda:InvokedViaFunctionUrl` garante que a função só possa ser invocada por meio do URL da função e não por meio de outros métodos de invocação.

**Example — Política baseada em recursos padrão para o tipo de autenticação 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"
        }
      }
    }
  ]
}
```

**Crie a política baseada em recursos usando o AWS CLI**  
A menos que você use o console ou AWS SAM crie um URL da função com tipo de autenticação `NONE`, você mesmo deve adicionar a política baseada em recursos. Use os seguintes comandos para criar instruções com as permissões `lambda:InvokeFunctionUrl` e `lambda:InvokeFunction`. Cada instrução deve ser adicionada em um comando separado.

```
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
```

**nota**  
Se você excluir um URL da função com o tipo de autenticação `NONE`, o Lambda não excluirá a política baseada em recursos associada a ela. Se quiser excluir essa política, deverá excluí-la manualmente.

Se a política baseada em recursos para uma função não conceder as permissões `lambda:invokeFunctionUrl` e `lambda:InvokeFunction`, os usuários receberão um código de erro 403 Forbidden (Proibido) quando tentarem invocar o URL da função. Isso ocorrerá mesmo se o URL da função usar o tipo de autenticação `NONE`.

## Governança e controle de acesso
<a name="urls-governance"></a>

Além das permissões de invocação de URL de função, você também pode controlar o acesso nas ações usadas para configurar URLs de função. O Lambda é compatível com as seguintes ações da política do IAM para URLs de função:
+ `lambda:InvokeFunctionUrl`: chamar uma função do Lambda usando o URL de função.
+ `lambda:CreateFunctionUrlConfig` – criar um URL de função e definir seu `AuthType`.
+ `lambda:UpdateFunctionUrlConfig` – atualizar a configuração de um URL de função e seu `AuthType`.
+ `lambda:GetFunctionUrlConfig`: visualizar os detalhes de um URL de função.
+ `lambda:ListFunctionUrlConfigs`: listar as configurações de URL de função.
+ `lambda:DeleteFunctionUrlConfig`: excluir um URL de função.

Para permitir ou negar acesso a URLs de função a outras entidades da AWS, inclua essas ações nas políticas do IAM. Por exemplo, a política a seguir concede à função `example` na Conta da AWS `444455556666` permissões para atualizar o URL de função para a função **my-function** na conta `123456789012`.

**Example política de URL de função entre contas**    
****  

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

### Chaves de condição
<a name="urls-condition-keys"></a>

Para ter um controle de acesso refinado sobre os URLs da função, use chaves de contexto de condição. O Lambda é compatível com as seguintes chaves de condição para URLs da função:
+ `lambda:FunctionUrlAuthType`: define um valor de enumerador descrevendo o tipo de autenticação que o URL da função usa. O valor pode ser `AWS_IAM` ou `NONE`.
+ `lambda:InvokedViaFunctionUrl`: restringe a ação `lambda:InvokeFunction` às chamadas feitas por meio do URL da função. Isso garante que a função só possa ser invocada por meio do URL da função e não por meio de outros métodos de invocação. Para exemplos de políticas baseadas em recursos que usam a chave de contexto `lambda:InvokedViaFunctionUrl`, consulte os exemplos em [Usar o tipo de autenticação `AWS_IAM`](#urls-auth-iam) e [Usar o tipo de autenticação `NONE`](#urls-auth-none).

É possível usar essas chaves de contexto em políticas associadas à sua função. Por exemplo, você pode restringir quem pode fazer alterações nas configurações dos URLs de função. Para negar todas as solicitações `UpdateFunctionUrlConfig` a qualquer função com o tipo de autenticação de URL `NONE`, você pode definir a seguinte política:

**Example política de URL de função com negação explícita**    
****  

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

Para conceder à função `example` na Conta da AWS `444455556666` permissões para fazer solicitações `CreateFunctionUrlConfig` e `UpdateFunctionUrlConfig` em funções com o tipo de autenticação de URL `AWS_IAM`, você pode definir a seguinte política:

**Example política de URL de função com permissão explícita**    
****  

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

Você também pode usar essa chave de condição em uma [política de controle de serviço](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) (SCP). Use SCPs para gerenciar permissões em toda a organização em AWS Organizations. Por exemplo, para não permitir que usuários criem ou atualizem URLs de função que usem qualquer tipo de autenticação, exceto `AWS_IAM`, use a seguinte política de controle de serviço:

**Example SCP de URL de função com negação explícita**    
****  

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