

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Proteggere le funzioni con un tag
<a name="attribute-based-access-control-example"></a>

La seguente procedura mostra un modo per impostare le autorizzazioni per le funzioni tramite ABAC. In questo scenario di esempio, creerai quattro policy di autorizzazione IAM. Quindi, collegherai queste policy a un nuovo ruolo IAM. Infine, creerai un utente IAM e gli assegnerai l'autorizzazione per assumere il nuovo ruolo.

**Topics**
+ [Prerequisiti](#abac-prerequisites)
+ [Fase 1: richiesta di tag sulle nuove funzioni](#require-tag-on-create)
+ [Fase 2: Consentire azioni basate su tag collegati a una funzione Lambda e al principale IAM](#restrict-actions-function-tags)
+ [Fase 3: Concessione delle autorizzazioni di elenco](#abac-list-permissions)
+ [Fase 4: Concessione delle autorizzazioni IAM](#abac-iam-permissions)
+ [Fase 5: Creazione del ruolo IAM](#abac-create-role)
+ [Fase 6: Creazione dell'utente IAM](#abac-create-user)
+ [Fase 7: Test delle autorizzazioni](#abac-test)
+ [Fase 8: eliminare le risorse](#abac-clean-up)

## Prerequisiti
<a name="abac-prerequisites"></a>

Assicurati di avere un [ruolo di esecuzione Lambda](lambda-intro-execution-role.md). Userai questo ruolo quando concedi le autorizzazioni IAM e crei una funzione Lambda.

## Fase 1: richiesta di tag sulle nuove funzioni
<a name="require-tag-on-create"></a>

Quando utilizzi ABAC con Lambda, è consigliabile richiedere che tutte le funzioni abbiano i tag. Questo aiuta a garantire che le policy di autorizzazione ABAC funzionino come previsto.

[Crea una policy IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor) simile a quella del seguente esempio. Questa policy utilizza le chiavi [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) condition per richiedere che le nuove funzioni e il principale IAM che le crea abbiano entrambi il tag. `project` Il modificatore `ForAllValues` assicura che `project` sia l'unico tag consentito. Se non includi il modificatore `ForAllValues`, gli utenti potranno aggiungere altri tag alla funzione purché passino anche loro `project`.

**Example : richiesta di tag sulle nuove funzioni**    
****  

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

## Fase 2: Consentire azioni basate su tag collegati a una funzione Lambda e al principale IAM
<a name="restrict-actions-function-tags"></a>

Crea una seconda policy IAM utilizzando la chiave di condizione [aws: ResourceTag /tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) per richiedere che il tag del principale corrisponda al tag associato alla funzione. La seguente policy di esempio consente ai principali con tag `project` di richiamare le funzioni con il tag `project`. Se una funzione ha altri tag, l'azione è negata.

**Example : Richiesta di tag corrispondenti sulla funzione e sul principale 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}"
          }
        }
      }
    ]
  }
```

## Fase 3: Concessione delle autorizzazioni di elenco
<a name="abac-list-permissions"></a>

Crea una policy che consenta al principale di elencare le funzioni Lambda e i ruoli IAM. Ciò consente al principale di vedere tutte le funzioni Lambda e i ruoli IAM sulla console e quando si chiamano le operazioni API.

**Example : Concessione delle autorizzazioni di elenco per Lambda e IAM**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "AllResourcesLambdaNoTags",
        "Effect": "Allow",
        "Action": [
          "lambda:GetAccountSettings",
          "lambda:ListFunctions",
          "iam:ListRoles"
        ],
        "Resource": "*"
      }
    ]
  }
```

## Fase 4: Concessione delle autorizzazioni IAM
<a name="abac-iam-permissions"></a>

**Crea una policy che consenta iam:. PassRole** Questa autorizzazione è necessaria quando si assegna un ruolo di esecuzione a una funzione. Nella seguente policy di esempio, sostituisci l'ARN di esempio con l'ARN del tuo ruolo di esecuzione Lambda.

**Nota**  
Non utilizzare la chiave di condizione `ResourceTag` in una policy con l'operazione `iam:PassRole`. Non puoi utilizzare il tag su un ruolo IAM per controllare l'accesso a chi può passare tale ruolo. Per ulteriori informazioni sulle autorizzazioni necessarie per passare un ruolo a un servizio, vedere [Concessione a un utente delle autorizzazioni per passare un ruolo a un](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html) servizio. AWS 

**Example : Concessione dell'autorizzazione per inviare il ruolo di esecuzione**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
          "iam:PassRole"
        ],
        "Resource": "arn:aws:iam::111122223333:role/lambda-ex"
      }
    ]
  }
```

## Fase 5: Creazione del ruolo IAM
<a name="abac-create-role"></a>

Una best practice consiste nell'[utilizzare i ruoli per delegare le autorizzazioni](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#delegate-using-roles). [Crea un ruolo IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console) chiamato `abac-project-role`:
+ In **Fase 1: Selezione dell'entità attendibile**, scegli **Account AWS **, quindi **Questo account**.
+ In **Fase 2: Aggiunta delle autorizzazioni**, collega le quattro policy IAM create nei passaggi precedenti.
+ In **Fase 3: Assegnazione di un nome, revisione e creazione**, scegli **Add tag** (Aggiungi tag). In **Chiave**, inserire `project`. Non immettere un **valore**.

## Fase 6: Creazione dell'utente IAM
<a name="abac-create-user"></a>

[Crea un utente IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) chiamato `abac-test-user`. Nella sezione **Set permissions** (Imposta autorizzazioni), seleziona **Attach existing policies directly** (Collega direttamente le policy esistenti), quindi **Create policy** (Crea policy). Immetti la seguente definizione di policy. Sostituisci *111122223333* con il tuo [ID account AWS](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html#FindingYourAccountIdentifiers). Questa policy consente a `abac-test-user` di assumere il ruolo `abac-project-role`.

**Example : Consentire all'utente IAM di assumere il ruolo ABAC**  

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::111122223333:role/abac-project-role"
    }
  }
```

------

## Fase 7: Test delle autorizzazioni
<a name="abac-test"></a>

1. Accedi alla console come. AWS `abac-test-user` Per ulteriori informazioni, consulta [Accesso come utente IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/console.html#user-sign-in-page).

1. Passare al ruolo `abac-project-role`. Per ulteriori informazioni, consulta [Cambio di un ruolo (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html).

1. [Crea una funzione Lambda](configuration-tags.md#using-tags-with-the-console):
   + In **Permissions** (Autorizzazioni), scegli **Change default execution role** (Modifica ruolo di esecuzione predefinito), quindi per **Execution role** (Ruolo di esecuzione), scegli **Use an existing role** (Utilizza un ruolo esistente). Scegli lo stesso ruolo di esecuzione che hai usato in [Fase 4: Concessione delle autorizzazioni IAM](#abac-iam-permissions).
   + In **Advanced settings** (Impostazioni avanzate), seleziona **Enable tags** (Abilita tag) quindi scegli **Add new tag** (Aggiungi nuovo tag). In **Chiave**, inserire `project`. Non immettere un **valore**.

1. [Esegui il test della funzione](testing-functions.md).

1. Crea una seconda funzione Lambda e aggiungi un tag diverso, ad esempio `environment`. Questa operazione dovrebbe non riuscire perché la policy ABAC creata in [Fase 1: richiesta di tag sulle nuove funzioni](#require-tag-on-create) consente al principale di creare solo funzioni con tag `project`.

1. Crea una terza funzione senza tag. Questa operazione dovrebbe non riuscire perché la policy ABAC creata in [Fase 1: richiesta di tag sulle nuove funzioni](#require-tag-on-create) non consente al principale di creare funzioni senza tag.

Questa strategia di autorizzazione consente di controllare l'accesso senza creare nuove policy per ogni nuovo utente. Per concedere l'accesso a nuovi utenti, è sufficiente concedere loro l'autorizzazione per assumere il ruolo che corrisponde al progetto assegnato.

## Fase 8: eliminare le risorse
<a name="abac-clean-up"></a>

**Per eliminare il ruolo IAM**

1. Aprire la pagina [Ruoli](https://console.aws.amazon.com/iam/home#/roles) della console IAM.

1. Seleziona il ruolo creato nella [fase 5](#abac-create-role).

1. Scegli **Elimina**.

1. Per confermare l'eliminazione, inserisci il nome del ruolo nel campo di immissione del testo.

1. Scegli **Elimina**.

**Per eliminare l'utente IAM**

1. Apri la pagina [Utenti](https://console.aws.amazon.com/iam/home#/users) nella console IAM.

1. Seleziona l'utente IAM creato nella [fase 6](#abac-create-user).

1. Scegli **Elimina**.

1. Per confermare l'eliminazione, inserisci il nome utente nel campo di immissione del testo.

1. Scegli **Elimina utente**.

**Per eliminare la funzione Lambda**

1. Aprire la pagina [Functions (Funzioni)](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Selezionare la funzione creata.

1. Scegliere **Operazioni**, **Elimina**.

1. Digita **confirm** nel campo di immissione testo e scegli **Delete** (Elimina).