Controlar o acesso aos URLs de função do Lambda - AWS Lambda

Controlar o acesso aos URLs de função do Lambda

É possível controlar o acesso a URLs de função do Lambda usando o parâmetro AuthType combinado com as políticas baseadas em recursos anexadas à 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 do invoquem a função por meio do URL de 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.

Além de AuthType, você também pode usar políticas baseadas em recursos para conceder permissões a outras Contas da AWS para invocar a função. Para ter mais informações, consulte Trabalhar com políticas baseadas em recursos no Lambda.

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. O IAM Access Analyzer é gratuito para qualquer cliente da AWS. Para começar a usar o IAM Access Analyzer, consulte Usando o AWS IAM Access Analyzer.

Esta página contém exemplos de políticas baseadas em recursos para ambos os tipos de autenticação e também mostra como criar essas políticas usando a operação da API AddPermission ou o console do Lambda. Para obter informações sobre como invocar o URL de função depois de configurar as permissões, consulte Invocar URLs de função do Lambda.

Usar o tipo de autenticação AWS_IAM

Se você escolher o tipo de autenticação AWS_IAM, os usuários que precisarem invocar a URL de função do Lambda deverão ter a permissão lambda:InvokeFunctionUrl. 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.

Se a entidade principal fazendo a solicitação estiver na mesma Conta da AWS que o URL de função, a entidade principal deve ou ter permissões lambda:InvokeFunctionUrl na política baseada em identidade 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 na política baseada em identidade. A avaliação da política segue as regras descritas em Determinar se uma solicitação é permitida ou negada em uma conta.

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 permissões concedidas em uma política baseada em recursos para a função que ela está tentando invocar. Nesses casos entre contas, a avaliação da política segue as regras descritas em Determinar se uma solicitação entre contas é permitida.

Para obter um exemplo de interação entre contas, a política baseada em recursos a seguir permite que a função example na Conta da AWS 444455556666 invoque o URL de função associado à função my-function:

exemplo política de invocação entre contas de URL de função
{ "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" } } } ] }

Você pode criar essa instrução da política por meio do console seguindo estas etapas:

Como conceder permissões de invocação de URL a outra conta (console)
  1. Abra a página Funções do console do Lambda.

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

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

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

  5. Escolha Function URL (URL de função).

  6. Para Auth type (Tipo de autenticação), escolha AWS_IAM.

  7. (Opcional) Para Statement ID (ID da instrução), insira um ID de instrução para a instrução da política.

  8. 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.

  9. Escolha Salvar.

Como alternativa, você pode criar essa instrução de política usando o seguinte comando add-permission da AWS Command Line Interface (AWS CLI):

aws lambda add-permission --function-name my-function \ --statement-id example0-cross-account-statement \ --action lambda:InvokeFunctionUrl \ --principal 444455556666 \ --function-url-auth-type AWS_IAM

No exemplo anterior, a chave-valor da condição lambda:FunctionUrlAuthType é AWS_IAM. Essa política só permite acesso quando o tipo de autenticação do URL de função também for AWS_IAM.

Usar o tipo de autenticação NONE

Importante

Quando o tipo de autenticação do URL de função for NONE e você tiver uma política baseada em recursos que concede acesso público, qualquer usuário não autenticado com o URL de função poderá invocar a função.

Em alguns casos, você pode querer que o URL de 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. Porém, os usuários ainda precisam ter permissões lambda:InvokeFunctionUrl para invocar com êxito o URL de função. Você pode conceder as permissões lambda:InvokeFunctionUrl usando a seguinte política baseada em recursos:

exemplo política de invocação de URL de função para todas as entidades principais não autenticadas
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "NONE" } } } ] }
nota

Quando você cria um URL de função com o tipo de autenticação NONE por meio do console ou da AWS Serverless Application Model(AWS SAM), o Lambda cria automaticamente a declaração de política baseada em recursos anterior para você. Se a política já existir ou se o usuário ou função que está criando a aplicação não tiver as permissões apropriadas, o Lambda não a criará para você. Se estiver usando a AWS CLI, o AWS CloudFormation ou a API do Lambda diretamente, você mesmo deverá adicionar as permissões lambda:InvokeFunctionUrl. Isso torna a função pública.

Além disso, se você excluir o 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.

Nesta instrução, a chave-valor da condição lambda:FunctionUrlAuthType é NONE. Essa instrução da política só permite acesso quando o tipo de autenticação do URL de função também é NONE.

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

Governança e controle de acesso

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.

nota

O console do Lambda é compatível com a adição de permissões apenas para lambda:InvokeFunctionUrl. Para todas as outras ações, você deve adicionar permissões usando a API do Lambda ou a AWS CLI.

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.

exemplo 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

Para ter um controle de acesso refinado sobre os URLs de função, use uma chave de condição. O Lambda é compatível com uma chave de condição adicional para URLs de função:FunctionUrlAuthType. A chave FunctionUrlAuthType define um valor de enumerador descrevendo o tipo de autenticação que o URL de função usa. O valor pode ser AWS_IAM ou NONE.

É possível usar essa chave de condição em políticas associadas à 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:

exemplo 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:

exemplo 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 (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:

exemplo 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" } } } ] }