

# Proteja suas funções por tag
<a name="attribute-based-access-control-example"></a>

As etapas a seguir demonstram uma forma de configurar permissões para funçõ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.

**Topics**
+ [

## Pré-requisitos
](#abac-prerequisites)
+ [

## Etapa 1: exigir etiquetas em novas funções
](#require-tag-on-create)
+ [

## Etapa 2: permitir ações com base em etiquetas anexadas a uma função do Lambda e a uma entidade principal do IAM
](#restrict-actions-function-tags)
+ [

## Etapa 3: conceder permissões de lista
](#abac-list-permissions)
+ [

## Etapa 4: conceder permissões do IAM
](#abac-iam-permissions)
+ [

## Etapa 5: Criar o perfil do IAM
](#abac-create-role)
+ [

## Etapa 6: criar o usuário do IAM
](#abac-create-user)
+ [

## Etapa 7: Testar as permissões
](#abac-test)
+ [

## Etapa 8: limpar os recursos
](#abac-clean-up)

## Pré-requisitos
<a name="abac-prerequisites"></a>

Verifique se você tem um [perfil de execução do Lambda](lambda-intro-execution-role.md). 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
<a name="require-tag-on-create"></a>

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](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor) semelhante ao exemplo a seguir. Esta política usa as chaves de condição [aws:RequestTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag), [aws:ResourceTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) e [aws:TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-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`.

**Example – 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
<a name="restrict-actions-function-tags"></a>

Crie uma segunda política do IAM usando a chave de condição [aws:ResourceTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) 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.

**Example – 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
<a name="abac-list-permissions"></a>

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.

**Example – 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
<a name="abac-iam-permissions"></a>

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`. Não é possível 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html).

**Example – 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
<a name="abac-create-role"></a>

É uma prática recomendada [usar funções para delegar permissões](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#delegate-using-roles). [Crie um perfil do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console) 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
<a name="abac-create-user"></a>

[Crie um usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) 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](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html#FindingYourAccountIdentifiers). Essa política permite que `abac-test-user` assuma `abac-project-role`.

**Example – Permitir que o usuário do IAM assuma o perfil ABAC**  

------
#### [ JSON ]

****  

```
{
    "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
<a name="abac-test"></a>

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](https://docs.aws.amazon.com/IAM/latest/UserGuide/console.html#user-sign-in-page).

1. Alterne para a função `abac-project-role`. Para obter mais informações, consulte [Alternar para uma função (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html).

1. [Crie uma função do Lambda](configuration-tags.md#using-tags-with-the-console):
   + 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](#abac-iam-permissions).
   + 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).

1. [Testar a função](testing-functions.md).

1. 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](#require-tag-on-create) apenas permite que a entidade principal crie funções do com a etiqueta `project`.

1. 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](#require-tag-on-create) 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
<a name="abac-clean-up"></a>

**Para excluir o perfil do IAM**

1. Abra a página [Funções](https://console.aws.amazon.com/iam/home#/roles) no console do IAM.

1. Selecione o perfil criado na [etapa 5](#abac-create-role).

1. Escolha **Excluir**.

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

1. Escolha **Excluir**.

**Para excluir o usuário do IAM**

1. Abra a página [Usuários](https://console.aws.amazon.com/iam/home#/users) no console do IAM.

1. Selecione o usuário do IAM que você criou na [etapa 6](#abac-create-user).

1. Escolha **Excluir**.

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

1. Escolha **Excluir usuário**.

**Como excluir a função do Lambda**

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

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

1. Selecione **Ações**, **Excluir**.

1. Digite **confirm** no campo de entrada de texto e escolha **Delete** (Excluir).