View a markdown version of this page

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, chiamate l'operazione. CreateGrant Specificate una chiave KMS, un elenco di operazioni di concessione consentite e un destinatario o un responsabile del servizio beneficiario.

Quando si specifica un committente beneficiario, è possibile facoltativamente designare un committente o un committente del servizio in pensionee utilizzare il parametro per definire i vincoli di concessione. Constraints Quando si specifica un committente del servizio beneficiario, è necessario includere un vincolo di concessione.SourceArn È inoltre necessario specificare a o a. RetiringServicePrincipal RetiringPrincipal

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 dimostrano come creare sovvenzioni in diversi linguaggi di programmazione, vedere. Utilizzo CreateGrant con un AWS SDK o una CLI

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.

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 tipi di vincoli di concessione: i vincoli del contesto di crittografia e il vincolo. SourceArn

vincoli del contesto di crittografia

I vincoli del contesto di crittografia stabiliscono i requisiti per il contesto di crittografia in una richiesta di operazione crittografica. Ogni valore del vincolo di concessione del contesto di crittografia può includere fino a 8 coppie di contesti di crittografia. Il valore del contesto di crittografia in ogni vincolo non può superare i 384 caratteri.

  • 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 due 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" } ] }

SourceArn vincolo

SourceArn

Il SourceArn vincolo limita le autorizzazioni di concessione alle richieste effettuate per conto di una AWS risorsa specifica, identificata dal relativo Amazon Resource Name (ARN). Il vincolo di SourceArn concessione inserisce effettivamente una chiave di condizione aws:SourceArnglobale nella concessione e viene valutato solo quando la richiesta viene effettuata da un servizio. AWS

Il SourceArn vincolo è sempre richiesto quando la concessione specifica un. GranteeServicePrincipal Può essere utilizzato opzionalmente con. GranteePrincipal

A differenza dei vincoli di contesto di crittografia, il SourceArn vincolo è supportato nelle concessioni per tutti i tipi di chiavi KMS.

Per specificare un SourceArn vincolo in una concessione, utilizzate il parametro nell'operazione. Constraints CreateGrant L'esempio seguente crea una concessione che consente a un AWS service principal di chiamare le Decrypt operazioni Encrypt and, ma solo quando la richiesta viene effettuata per conto della tabella DynamoDB specificata. Il SourceArn vincolo è obbligatorio quando la concessione specifica a. GranteeServicePrincipal

$ aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-service-principal service-name.amazonaws.com \ --operations Encrypt Decrypt \ --retiring-service-principal service-name.amazonaws.com \ --constraints '{"SourceArn":"arn:aws:dynamodb:us-east-1:111122223333:table/ExampleTable"}'

La concessione risultante è simile alla seguente. Le autorizzazioni nella concessione sono valide solo quando la richiesta include un ARN di origine che corrisponde SourceArn al valore nel vincolo di concessione.

$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "Grants": [ { "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a", "Operations": [ "Encrypt", "Decrypt" ], "GranteeServicePrincipal": "service-name.amazonaws.com", "Constraints": { "SourceArn": "arn:aws:dynamodb:us-east-1:111122223333:table/ExampleTable" }, "CreationDate": 1718567315.0, "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "RetiringServicePrincipal": "service-name.amazonaws.com" } ] }

È inoltre possibile combinare più vincoli in un'unica concessione. Tuttavia, è possibile specificare uno EncryptionContextEquals o entrambiEncryptionContextSubset, ma non entrambi.

Quando GranteeServicePrincipal viene specificato, il SourceArn vincolo è obbligatorio, quindi le combinazioni valide per creare una concessione con vincoli multipli sono:

  • EncryptionContextEquals con SourceArn

  • EncryptionContextSubset con SourceArn

L'esempio seguente crea una concessione con GranteeServicePrincipal e e RetiringServicePrincipal include sia un vincolo che un EncryptionContextSubset vincolo. SourceArn

$ aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-service-principal service-name.amazonaws.com \ --retiring-service-principal service-name.amazonaws.com \ --operations Encrypt Decrypt GenerateDataKey DescribeKey \ --constraints '{"EncryptionContextSubset":{"Department":"IT"},"SourceArn":"arn:aws:dynamodb:us-east-1:111122223333:table/ExampleTable"}'

La concessione risultante è simile alla seguente. Nota che la risposta include RetiringServicePrincipal campi GranteeServicePrincipal e e che il Constraints campo contiene entrambi EncryptionContextSubset eSourceArn.

$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "Grants": [ { "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a", "Operations": [ "Encrypt", "Decrypt", "GenerateDataKey", "DescribeKey" ], "GranteeServicePrincipal": "service-name.amazonaws.com", "Constraints": { "EncryptionContextSubset": { "Department": "IT" }, "SourceArn": "arn:aws:dynamodb:us-east-1:111122223333:table/ExampleTable" }, "CreationDate": 1718567315.0, "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "RetiringServicePrincipal": "service-name.amazonaws.com" } ] }

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.

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