Creazione di concessioni - AWS Key Management Service

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

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.

Creazione di una concessione

Per creare una sovvenzione, chiama l'operazione. CreateGrant Specifica una chiave KMS, un assegnatario principale e un elenco di operazioni di concessione consentite. È inoltre possibile designare un principale per il ritiro opzionale. Per personalizzare la concessione, puoi usare i parametri Constraints opzionali per definire i vincoli di concessione

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

Ad esempio, il comando CreateGrant seguente crea una concessione che consente agli utenti autorizzati ad assumere il ruolo keyUserRole di chiamare l'operazione Decrypt sulla chiave KMS simmetrica 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 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, utilizza il parametro opzionale Nome 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 illustrano l'utilizzo delle concessioni in diversi linguaggi di programmazione, consulta Utilizzo delle concessioni.

Utilizzo dei vincoli di concessione

I vincoli di concessione stabiliscono condizioni relative alle autorizzazioni che la concessione dà all'assegnatario principale. I vincoli di concessione sostituiscono le chiavi di condizione in una policy chiave o in una policy IAM. 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 in una richiesta di operazione crittografica.

I vincoli di concessione del contesto di crittografia sono progettati per essere utilizzati con operazioni di concessione 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 La concessione creata da questo comando concede agli utenti autorizzati ad assumere il ruolo keyUserRole l'autorizzazione a chiamare l'operazione API Decrypt. 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

$ 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 concessioneEncryptionContextSubset, 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 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'ListGrantsoperazione 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

Una concessione può includere l'autorizzazione per chiamare l'operazione CreateGrant. Ma quando un assegnatario principale 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 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.

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

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": { IAM best practices discourage the use of IAM users with long-term credentials. Whenever possible, use IAM roles, which provide temporary credentials. For details, see Security best practices in IAM in the IAM User Guide. "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.