Usar controle de acesso baseado em atributos no Lambda - AWS Lambda

Usar controle de acesso baseado em atributos no Lambda

Com o controle de acesso por atributo (ABAC), você pode usar etiquetas para controlar o acesso às suas funções do Lambda. Você pode anexar etiquetas a uma função do Lambda, transmiti-las em determinadas solicitações de API ou anexá-las à entidade principal do AWS Identity and Access Management (IAM) que está fazendo a solicitação. Para obter mais informações sobre como o AWS concede acesso baseado em atributos, consulte Controlar o acesso aos recursos da AWS usando etiquetas, no Guia do usuário do IAM.

Você pode usar o ABAC para conceder privilégio mínimo sem especificar um nome do recurso da Amazon (ARN) ou padrão de ARN na política do IAM. Em vez disso, você pode especificar uma etiqueta no elemento de condição de uma política do IAM para controlar o acesso. A escalabilidade é mais fácil com o ABAC, pois você não precisa atualizar suas políticas do IAM ao criar novas funções. Em vez disso, adicione etiquetas às novas funções para controlar o acesso.

No Lambda, etiquetas funcionam no nível da função. Etiquetas não têm suporte em camadas, configurações de assinatura de código ou mapeamentos de fontes de eventos. Quando você marca uma função, essas etiquetas se aplicam a todas as versões e aliases associados a ela. Para obter informações sobre como marcar funções, consulte Utilizar etiquetas em funções do Lambda.

É possível usar as seguintes chaves de condição para controlar ações de funções:

  • aws:ResourceTag/tag-key: controlar o acesso de acordo com as etiquetas anexadas a funções do Lambda.

  • aws:RequestTag/tag-key: exigir que etiquetas estejam presentes em uma solicitação, como ao criar uma nova função.

  • aws:PrincipalTag/tag-key: controle o que a entidade principal do IAM (a pessoa que está fazendo a solicitação) tem permissão para fazer com base nas etiquetas anexadas ao seu respectivo usuário ou perfil do IAM.

  • aws:TagKeys: controle se chaves de etiquetas específicas podem ser usadas em uma solicitação.

Para obter uma lista completa de ações do Lambda que oferecem suporte ao ABAC, consulte Ações de função compatíveis e verifique a coluna Condition (Condição) na tabela.

As etapas a seguir demonstram uma das maneiras de configurar permissões usando o ABAC. Neste cenário de exemplo, você criará quatro políticas de permissões do IAM. Em seguida, anexará essas políticas a um novo perfil do IAM. Por último, você criará um usuário do IAM e concederá a ele permissão para assumir a nova função.

Pré-requisitos

Verifique se você tem um perfil de execução do Lambda. Você usará esse perfil ao conceder permissões do IAM e ao criar uma função do Lambda.

Etapa 1: exigir etiquetas em novas funções

Ao usar o ABAC com o Lambda, é uma prática recomendada exigir que todas as funções tenham etiquetas. Isso ajuda a garantir que suas políticas de permissões de ABAC funcionem conforme o esperado.

Crie uma política do IAM semelhante ao exemplo a seguir. Esta política usa as chaves de condição aws:RequestTag/tag-key, aws:ResourceTag/tag-key e aws:TagKeys para exigir que novas funções e a entidade principal do IAM que cria essas funções tenham a tag project. O modificador ForAllValues garante que project seja a única etiqueta permitida. Se você não incluir o modificador ForAllValues, os usuários poderão adicionar outras etiquetas à função, desde que também transmitam project.

exemplo – Exigir etiquetas em novas funções
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:TagResource" ], "Resource": "arn:aws:lambda:*:*:function:*", "Condition": { "StringEquals": { "aws:RequestTag/project": "${aws:PrincipalTag/project}", "aws:ResourceTag/project": "${aws:PrincipalTag/project}" }, "ForAllValues:StringEquals": { "aws:TagKeys": "project" } } } }

Etapa 2: permitir ações com base em etiquetas anexadas a uma função do Lambda e a uma entidade principal do IAM

Crie uma segunda política do IAM usando a chave de condição aws:ResourceTag/tag-key para exigir que a etiqueta da entidade principal corresponda à etiqueta anexada à função. O exemplo de política a seguir permite que entidades principais com a etiqueta project invoquem funções do com a etiqueta project. Se uma função tiver outras etiquetas, a ação será negada.

exemplo – Exigir etiquetas correspondentes na função e na entidade principal do IAM
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*:*:function:*", "Condition": { "StringEquals": { "aws:ResourceTag/project": "${aws:PrincipalTag/project}" } } } ] }

Etapa 3: conceder permissões de lista

Crie uma política que permita que a entidade principal liste funções do Lambda e perfis do IAM. Isso permite que a entidade principal veja todas as funções do Lambda e perfis do IAM no console e ao chamar as ações de API.

exemplo – Conceder permissões de lista do Lambda e do IAM
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllResourcesLambdaNoTags", "Effect": "Allow", "Action": [ "lambda:GetAccountSettings", "lambda:ListFunctions", "iam:ListRoles" ], "Resource": "*" } ] }

Etapa 4: conceder permissões do IAM

Crie uma política que permita iam:PassRole. Essa permissão é necessária quando você atribui um perfil de execução a uma função. No exemplo de política a seguir, substitua o ARN de exemplo pelo ARN do seu perfil de execução do Lambda.

nota

Não use a chave de condição ResourceTag em uma política com a ação iam:PassRole. Você não pode usar a etiqueta em uma função do IAM para controlar o acesso de quem pode transmitir essa função. Para obter mais informações sobre as permissões necessárias para transmitir uma função a um serviço, consulte Conceder permissões a um usuário para transmitir uma função a um serviço da AWS.

exemplo – Conceder permissão para transmitir a função de execução
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::111122223333:role/lambda-ex" } ] }

Etapa 5: Criar o perfil do IAM

É uma prática recomendada usar funções para delegar permissões. Crie um perfil do IAM chamada abac-project-role:

  • Em Step 1: Select trusted entity (Etapa 1: selecionar entidade confiável): escolha a conta da AWS e depois This account (Esta conta).

  • Em Step 2: Add permissions (Etapa 2: adicionar permissões): anexe as quatro políticas do IAM que você criou nas etapas anteriores.

  • Em Step 3: Name, review, and create (Etapa 3: nomear, revisar e criar): escolha Add tag (Adicionar etiqueta). Em Chave, digite project. Não insira nada em Value (Valor).

Etapa 6: criar o usuário do IAM

Crie um usuário do IAM chamado abac-test-user. Na seção Set permissions (Definir permissões), escolha Attach existing policies directly (Anexar políticas existentes diretamente) e escolha Create policy (Criar política). Insira a seguinte definição de política. Substitua 111122223333 pelo ID da sua conta da AWS. Essa política permite que abac-test-user assuma abac-project-role.

exemplo – Permitir que o usuário do IAM assuma o perfil ABAC
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111122223333:role/abac-project-role" } }

Etapa 7: Testar as permissões

  1. Faça login no console do AWS como abac-test-user. Para obter mais informações, consulte Fazer login como usuário do IAM.

  2. Alterne para a função abac-project-role. Para obter mais informações, consulte Alternar para uma função (console).

  3. Crie uma função do Lambda:

    • Em Permissions (Permissões), escolha Change default execution role (Alterar a função de execução padrão) e, em Execution role (Função de execução), escolha Use an existing role (Usar uma função existente). Escolha o mesmo perfil de execução que você usou em Etapa 4: conceder permissões do IAM.

    • Em Advanced settings (Configurações avançadas), escolha Enable tags (Habilitar etiquetas) e escolha Add new tag (Adicionar nova etiqueta). Em Chave, digite project. Não insira nada em Value (Valor).

  4. Testar a função.

  5. Crie uma segunda função do Lambda e adicione uma etiqueta diferente, como environment. Essa operação deve falhar, pois a política de ABAC que você criou em Etapa 1: exigir etiquetas em novas funções apenas permite que a entidade principal crie funções do com a etiqueta project.

  6. Crie uma terceira função sem etiquetas. Essa operação deve falhar, pois a política de ABAC que você criou em Etapa 1: exigir etiquetas em novas funções não permite que a entidade principal crie funções sem etiquetas.

Essa estratégia de autorização permite controlar o acesso sem criar novas políticas para cada novo usuário. Para conceder acesso a novos usuários, basta dar a eles permissão para assumir o perfil que corresponde ao projeto atribuído.

Etapa 8: limpar os recursos

Para excluir a função do IAM
  1. Abra a página Roles (Funções) no console do IAM.

  2. Selecione o perfil criado na etapa 5.

  3. Escolha Excluir.

  4. Para confirmar a exclusão, insira o nome do perfil no campo de entrada de texto.

  5. Escolha Excluir.

Para excluir o usuário do IAM
  1. Abra a página Usuários no console do IAM.

  2. Selecione o usuário do IAM que você criou na etapa 6.

  3. Escolha Excluir.

  4. Para confirmar a exclusão, insira o nome do usuário no campo de entrada de texto.

  5. Escolha Excluir usuário.

Como excluir a função do Lambda
  1. Abra a página Functions (Funções) no console do Lambda.

  2. Selecione a função que você criou.

  3. Escolha Ações, Excluir.

  4. Digite delete no campo de entrada de texto e escolha Delete (Excluir).