

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

# Creazione di concessioni
<a name="create-grant-overview"></a>

Prima di creare una concessione, scopri le opzioni per la personalizzazione della concessione. È possibile utilizzare *vincoli di concessione* per limitare le autorizzazioni nella concessione. Scopri di più sulla concessione dell'autorizzazione `CreateGrant`. Le entità principali che ricevono l'autorizzazione per creare concessioni da una concessione sono limitate nelle concessioni che possono creare.

**Topics**
+ [Creazione di una concessione](#grant-create)
+ [Concessione dell'autorizzazione CreateGrant](#grant-creategrant)

## Creazione di una concessione
<a name="grant-create"></a>

Per creare una sovvenzione, chiama l'[CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)operazione. Specifica una chiave KMS, un [assegnatario principale](grants.md#terms-grantee-principal) e un elenco di [operazioni di concessione](grants.md#terms-grant-operations) consentite. È inoltre possibile designare un [principale per il ritiro](grants.md#terms-retiring-principal) opzionale. Per personalizzare la concessione, puoi usare i parametri `Constraints` opzionali per definire i [vincoli di concessione](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)

Quando si crea, si ritira o si revoca una concessione, potrebbe verificarsi un breve ritardo, in genere meno di cinque minuti, prima che la modifica sia disponibile in AWS KMS. Per ulteriori informazioni, consulta [Consistenza finale (per concessioni)](grants.md#terms-eventual-consistency).

Ad esempio, il comando `CreateGrant` seguente crea una concessione che consente agli utenti autorizzati ad assumere il ruolo `keyUserRole` di chiamare l'operazione [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) sulla [chiave KMS simmetrica](symm-asymm-choose-key-spec.md#symmetric-cmks) specificata. La concessione utilizza il parametro `RetiringPrincipal` per designare un'entità principale che può ritirare la concessione. Include anche un vincolo di concessione che consente l'autorizzazione solo quando il [contesto di crittografia](encrypt_context.md) nella richiesta include `"Department": "IT"`.

```
$  aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

Se il tuo codice tenta di nuovo l'operazione `CreateGrant` o utilizza un [SDK AWS che rinvia automaticamente le richieste](https://docs.aws.amazon.com/general/latest/gr/api-retries.html), utilizza il parametro opzionale [Nome](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-Name) per impedire la creazione di concessioni duplicate. Se AWS KMS riceve una `CreateGrant` richiesta di concessione con le stesse proprietà di una concessione esistente, incluso il nome, riconosce la richiesta come un nuovo tentativo e non crea una nuova concessione. Non puoi utilizzare il valore `Name` per identificare la concessione in qualsiasi operazione AWS KMS .

**Importante**  
Non includere informazioni riservate o sensibili nel nome della concessione. Può apparire in testo semplice nei CloudTrail log e in altri output.

```
$ aws kms create-grant \
    --name IT-1234abcd-keyUserRole-decrypt \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

Per esempi di codice che dimostrano come creare sovvenzioni in diversi linguaggi di programmazione, vedere. [Utilizzo `CreateGrant` con un AWS SDK o una CLI](example_kms_CreateGrant_section.md)

### Utilizzo dei vincoli di concessione
<a name="grant-constraints"></a>

I [vincoli di concessione](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html) stabiliscono condizioni relative alle autorizzazioni che la concessione dà all'assegnatario principale. I vincoli di concessione sostituiscono le [chiavi di condizione](policy-conditions.md) in una [policy chiave](key-policies.md) o in una [policy IAM](iam-policies.md). Ogni valore del vincolo di concessione può includere fino a 8 coppie del contesto di crittografia. Il valore del contesto di crittografia in ogni vincolo di concessione non può superare i 384 caratteri.

**Importante**  
Non includere informazioni riservate o sensibili in questo campo. Questo campo può essere visualizzato in testo semplice nei CloudTrail log e in altri output.

AWS KMS supporta due vincoli di concessione `EncryptionContextEquals` ed entrambi stabiliscono `EncryptionContextSubset` i requisiti per il [contesto di crittografia](encrypt_context.md) in una richiesta di operazione crittografica. 

I vincoli di concessione del contesto di crittografia sono progettati per essere utilizzati con [operazioni di concessione](grants.md#terms-grant-operations) che dispongono di un parametro contesto di crittografia. 
+ I vincoli di contesto di crittografia sono validi solo in una concessione per una chiave KMS di crittografia simmetrica. Le operazioni di crittografia con altre chiavi KMS non supportano un contesto di crittografia.
+ Il vincolo di contesto di crittografia viene ignorato per le operazioni `DescribeKey` e `RetireGrant`. `DescribeKey` e `RetireGrant` non dispongono di un parametro di contesto di crittografia, ma è possibile includere queste operazioni in una concessione con un vincolo di contesto di crittografia.
+ È possibile utilizzare un vincolo di contesto di crittografia in una concessione per l'operazione `CreateGrant`. Il vincolo del contesto di crittografia richiede che tutte le concessioni create con l'autorizzazione `CreateGrant` hanno un vincolo di contesto di crittografia altrettanto rigoroso o più rigoroso.

AWS KMS supporta i seguenti vincoli di concessione del contesto di crittografia.

**EncryptionContextEquals**  
Utilizza `EncryptionContextEquals` per specificare il contesto di crittografia esatto per le richieste consentite.   
`EncryptionContextEquals` richiede che le coppie del contesto di crittografia nella richiesta corrispondano in modo esatto a livello di maiuscole e minuscole alle coppie del contesto di crittografia nel vincolo di concessione. Le coppie possono essere visualizzate in qualsiasi ordine, ma le chiavi e i valori in ciascuna coppia non possono variare.   
Ad esempio, se il vincolo di concessione `EncryptionContextEquals` richiede la coppia del contesto di crittografia `"Department": "IT"`, la concessione consente le richieste del tipo specificato solo quando il contesto di crittografia nella richiesta è esattamente `"Department": "IT"`.

**EncryptionContextSubset**  
Utilizza `EncryptionContextSubset` per richiedere che le richieste includano particolari coppie di contesto di crittografia.  
`EncryptionContextSubset` richiede che le richieste includano tutte le coppie del contesto di crittografia nel vincolo di concessione (corrispondenti in modo esatto a livello di maiuscole e minuscole), ma la richiesta può avere anche altre coppie di contesto di crittografia. Le coppie possono essere visualizzate in qualsiasi ordine, ma le chiavi e i valori in ciascuna coppia non possono variare.   
Ad esempio, se il vincolo di concessione `EncryptionContextSubset` richiede la coppia del contesto di crittografia `Department=IT`, la concessione consente le richieste del tipo specificato quando il contesto di crittografia nella richiesta è `"Department": "IT"`, o include `"Department": "IT"` insieme ad altre coppie di contesto di crittografia, come `"Department": "IT","Purpose": "Test"`.

Per specificare un vincolo di contesto di crittografia in una concessione per una chiave KMS di crittografia simmetrica, utilizzate il parametro nell'operazione. `Constraints` [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) La concessione creata da questo comando concede agli utenti autorizzati ad assumere il ruolo `keyUserRole` l'autorizzazione a chiamare l'operazione API [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html). Tuttavia, tale autorizzazione è valida solo quando il contesto di crittografia nella richiesta `Decrypt` è una coppia di contesto di crittografia `"Department": "IT"`.

```
$ aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextEquals={Department=IT}
```

La concessione risultante è simile alla seguente. Tieni presente che l'autorizzazione concessa al ruolo `keyUserRole` è valida solo quando la richiesta `Decrypt` usa la stessa coppia del contesto di crittografia specificata nel vincolo di concessione. Per trovare le concessioni su una chiave KMS, usa l'operazione. [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)

```
$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
{
    "Grants": [
        {
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "Decrypt"
            ],
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
            "CreationDate": 1568565290.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole"
        }
    ]
}
```

Per soddisfare il vincolo di concessione `EncryptionContextEquals`, il contesto di crittografia nella richiesta per l'operazione `Decrypt` deve essere una coppia `"Department": "IT"`. Una richiesta dall'assegnatario principale come la seguente soddisferebbe il vincolo di concessione `EncryptionContextEquals`.

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

Quando il vincolo di concessione è `EncryptionContextSubset`, le coppie del contesto di crittografia nella richiesta devono includere le coppie del contesto di crittografia nel vincolo di concessione, ma la richiesta può includere anche altre coppie di contesto di crittografia. Il seguente vincolo di concessione richiede che una delle coppie di contesto di crittografia nella richiesta sia `"Deparment": "IT"`.

```
"Constraints": {
   "EncryptionContextSubset": {
       "Department": "IT"
   }
}
```

La seguente richiesta dall'assegnatario principale soddisferebbe entrambi i vincoli di concessione `EncryptionContextEqual` e `EncryptionContextSubset` di questo esempio.

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

Tuttavia, una richiesta come la seguente da parte dell'assegnatario principale soddisferebbe il vincolo di concessione`EncryptionContextSubset`, ma fallirebbe il vincolo di concessione `EncryptionContextEquals`.

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT,Purpose=Test
```

AWS i servizi spesso utilizzano vincoli di contesto di crittografia nelle concessioni che consentono loro di utilizzare le chiavi KMS nel tuo. Account AWS Ad esempio, Amazon DynamoDB utilizza una concessione come la seguente per ottenere l'autorizzazione a utilizzare la [Chiave gestita da AWS](concepts.md#aws-managed-key) per DynamoDB nel tuo account. Il vincolo di concessione `EncryptionContextSubset` in questa concessione rende le autorizzazioni nella concessione valide solo quando il contesto di crittografia nella richiesta include coppie `"tableName": "Services"` e `"subscriberID": "111122223333"`. Questo vincolo di concessione significa che la concessione consente a DynamoDB di utilizzare la chiave KMS specificata solo per una determinata tabella nel tuo Account AWS.

Per ottenere questo risultato, esegui l'[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)operazione su Chiave gestita da AWS per DynamoDB nel tuo account.

```
$ aws kms list-grants --key-id 0987dcba-09fe-87dc-65ba-ab0987654321

{
    "Grants": [
        {
            "Operations": [
                "Decrypt",
                "Encrypt",
                "GenerateDataKey",
                "ReEncryptFrom",
                "ReEncryptTo",
                "RetireGrant",
                "DescribeKey"
            ],
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "Constraints": {
                "EncryptionContextSubset": {
                    "aws:dynamodb:tableName": "Services",
                    "aws:dynamodb:subscriberId": "111122223333"
                }
            },
            "CreationDate": 1518567315.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321",
            "GranteePrincipal": "dynamodb.us-west-2.amazonaws.com",
            "RetiringPrincipal": "dynamodb.us-west-2.amazonaws.com",
            "Name": "8276b9a6-6cf0-46f1-b2f0-7993a7f8c89a",
            "GrantId": "1667b97d27cf748cf05b487217dd4179526c949d14fb3903858e25193253fe59"
        }
    ]
}
```

## Concessione dell'autorizzazione CreateGrant
<a name="grant-creategrant"></a>

Una concessione può includere l'autorizzazione per chiamare l'operazione `CreateGrant`. Ma quando un [assegnatario principale](grants.md#terms-grantee-principal) ottiene l'autorizzazione di chiamare `CreateGrant` da una concessione, piuttosto che da una policy, tale autorizzazione è limitata. 
+ L'assegnatario principale può solo creare concessioni che consentono alcune o tutte le operazioni nella concessione primaria.
+ I [vincoli di concessione](#grant-constraints) nelle concessioni che creano devono essere almeno altrettanto rigorosi di quelli della concessione primaria.

Queste limitazioni non si applicano ai principali che ottengono l'autorizzazione `CreateGrant` da una policy, anche se le loro autorizzazioni possono essere limitate dalle [condizioni della policy](grant-authorization.md).

Ad esempio, considera una concessione che consente al principale della concessione di chiamare le operazioni `GenerateDataKey`, `Decrypt` e `CreateGrant`. Chiamiamo una concessione che consente all'autorizzazione `CreateGrant` a una *concessione primaria*.

```
# The original grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572216195.0,
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "GenerateDataKey",
                "Decrypt",
                "CreateGrant
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextSubset": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

L'assegnatario principale, exampleUser, può utilizzare questa autorizzazione per creare una concessione che include un sottoinsieme delle operazioni specificate nella concessione originale, ad esempio `CreateGrant` e `Decrypt`. La *concessione secondaria* non può includere altre operazioni, come `ScheduleKeyDeletion` o `ReEncrypt`.

Inoltre, i [vincoli nelle concessioni](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html) secondarie devono essere altrettanto o più restrittivi di quelli della concessione primaria. Ad esempio, la concessione figlio può aggiungere coppie a un vincolo `EncryptionContextSubset` nella concessione padre, ma non può rimuoverle. La concessione figlio può modificare un vincolo `EncryptionContextSubset` in un vincolo `EncryptionContextEquals`, ma non viceversa.

Le best practice di IAM disincentivano l'uso di utenti IAM con credenziali a lungo termine. Quando possibile, utilizza i ruoli IAM che forniscono credenziali temporanee. Per i dettagli, consulta la sezione [Best practice di sicurezza in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) nella *Guida per l'utente IAM*.

Ad esempio, l'assegnatario principale della concessione può utilizzare l'autorizzazione `CreateGrant` che ha ottenuto dalla concessione primaria per creare la seguente concessione secondaria. Le operazioni nella concessione secondaria sono un sottoinsieme di operazioni della concessione primaria e i vincoli di concessione sono più restrittivi.

```
# The child grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572249600.0,
            "GrantId": "fedcba9999c1e2e9876abcde6e9d6c9b6a1987650000abcee009abcdef40183f",
            "Operations": [
                "CreateGrant"
                "Decrypt"
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:user/exampleUser",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:user/anotherUser",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

L'assegnatario principale nella concessione secondaria, `anotherUser`, può utilizzare il la sua autorizzazione `CreateGrant` per creare concessioni. Tuttavia, le concessioni che `anotherUser` crea devono includere le operazioni nella sua concessione primaria o in un sottoinsieme e i vincoli di concessione devono essere uguali o più severi. 