Criar concessões - AWS Key Management Service

Criar concessões

Antes de criar uma concessão, saiba mais sobre as opções para personalizar sua concessão. Você pode usar restrições de concessão para limitar as permissões na concessão. Além disso, saiba mais sobre como conceder a permissão CreateGrant. As entidades principais que obtêm permissão para criar concessões a partir de uma concessão são limitados em termos das concessões que elas podem criar.

Criar uma concessão

Para criar uma concessão, chame a operação CreateGrant. Especifique uma chave do KMS, uma entidade principal receptora da concessão e uma lista de operações de concessão. Você também pode designar uma entidade principal de retirada opcional. Para personalizar a concessão, use parâmetros Constraints opcionais para definir as restrições de concessão

Quando você cria, retira ou revoga uma concessão, pode haver um breve atraso, geralmente de menos de cinco minutos, até que a operação atinja a consistência final.

Por exemplo, o comando CreateGrant a seguir cria uma concessão que permite que exampleUser chame a operação Decrypt na chave do KMS siméstrica especificada. A concessão usa o parâmetro RetiringPrincipal para designar um principal que pode desativar a concessão. Ele também inclui uma restrição de concessão que concede a permissão somente quando o contexto de criptografia na solicitação inclui "Department": "IT".

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

Se o seu código tentar novamente a operação CreateGrant ou usar umSDK da AWS que repete solicitações automaticamente, use o parâmetro Name opcional para impedir a criação de concessões duplicadas. Se o AWS KMS receber uma solicitação CreateGrant para uma concessão com as mesmas propriedades de uma concessão existente, incluindo o nome, ele reconhecerá a solicitação como uma nova tentativa e não criará uma nova concessão. Não é possível usar o valor Name para identificar a concessão em qualquer operação do AWS KMS.

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

Para exemplos de código que demonstram como trabalhar com subsídios em várias linguagens de programação, consulte Trabalhar com concessões.

Usar restrições de concessão

Restrições de concessão definem condições para as permissões que a concessão fornece à entidade principal receptora da concessão. Restrições de concessão ocupam o lugar de chaves de condição em uma política de chaves ou política do IAM. Cada valor de restrição de concessão pode incluir até oito pares de contexto de criptografia. O valor do contexto de criptografia em cada restrição de concessão não pode exceder 384 caracteres.

O AWS KMS é compatível com duas restrições de concessão, EncryptionContextEquals e EncryptionContextSubset. Ambas estabelecem requisitos para o contexto de criptografia em uma solicitação de operação criptográfica.

As restrições de concessão de contexto de criptografia foram projetadas para serem usadas com operações de concessão que têm um parâmetro de contexto de criptografia.

  • As restrições de contexto de criptografia são válidas somente em uma concessão para uma chave do KMS de criptografia simétrica. Operações criptográficas com outras chaves do KMS não são compatíveis com um contexto de criptografia.

  • A restrição do contexto de criptografia é ignorada para operações DescribeKey e RetireGrant. DescribeKey e RetireGrant não têm um parâmetro de contexto de criptografia, mas você pode incluir essas operações em uma concessão que tenha uma restrição de contexto de criptografia.

  • É possível usar uma restrição de contexto de criptografia em uma concessão para a operação CreateGrant. A restrição de contexto de criptografia requer que todas as concessões criadas com a permissão CreateGrant tenham uma restrição de contexto de criptografia igualmente rigorosa ou ainda mais rigorosa.

O AWS KMS oferece suporte às seguintes restrições de concessão de contexto de criptografia.

EncryptionContextEquals

Use EncryptionContextEquals para especificar o contexto de criptografia exato para solicitações permitidas.

EncryptionContextEquals requer que os pares de contexto de criptografia na solicitação sejam uma correspondência exata, com distinção entre maiúsculas e minúsculas, para os pares de contexto de criptografia na restrição de concessão. Os pares podem aparecer em qualquer ordem, mas as chaves e os valores em cada par não podem variar.

Por exemplo, se a restrição de concessão EncryptionContextEquals exigir o par de contexto de criptografia "Department": "IT", a concessão permitirá solicitações do tipo especificado apenas quando o contexto de criptografia na solicitação for exatamente"Department": "IT".

EncryptionContextSubset

Use EncryptionContextSubset para exigir que as solicitações incluam pares de contexto de criptografia específicos.

EncryptionContextSubset requer que a solicitação inclua todos os pares de contexto de criptografia na restrição de concessão (uma correspondência exata com distinção entre maiúsculas e minúsculas), mas a solicitação também pode conter pares de contexto de criptografia adicionais. Os pares podem aparecer em qualquer ordem, mas as chaves e os valores em cada par não podem variar.

Por exemplo, se a restrição de concessão EncryptionContextSubset exigir o par de contexto de criptografia Department=IT, a concessão permitirá solicitações do tipo especificado quando o contexto de criptografia na solicitação for "Department": "IT" ou incluir "Department": "IT" juntamente com outros pares de contexto de criptografia, como "Department": "IT","Purpose": "Test".

Para especificar uma restrição de contexto de criptografia em uma concessão para uma chave do KMS de criptografia simétrica, use o parâmetro Constraints na operação CreateGrant. A concessão que esse comando cria concede a permissão exampleUser para chamar a operaçãoDecrypt. Porém, essa permissão entrará em vigor somente quando o contexto de criptografia na solicitação Decrypt for um par de contexto de criptografia "Department": "IT".

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

A concessão resultante é semelhante à seguinte. Observe que a permissão concedida para exampleUser entrará em vigor somente quando a solicitação Decrypt usar o mesmo par de contexto de criptografia especificado na restrição de concessão. Para encontrar as concessões em uma chave do KMS, use a operação ListGrants.

$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "Grants": [ { "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GrantId": "8c94d1f12f5e69f440bae30eaec9570bb1fb7358824f9ddfa1aa5a0dab1a59b2", "Operations": [ "Decrypt" ], "GranteePrincipal": "arn:aws:iam::111122223333:user/exampleUser", "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" } ] }

Para atender à restrição de concessão EncryptionContextEquals, o contexto de criptografia na solicitação para a operação Decrypt deve ser um par "Department": "IT". Uma solicitação como a seguinte da entidade principal receptora da concessão atenderia à restrição de concessão 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 a restrição de concessão é EncryptionContextSubset, os pares de contexto de criptografia na solicitação devem incluir pares de contexto de criptografia na restrição de concessão, mas a solicitação também pode incluir outros pares de contexto de criptografia. A restrição de concessão a seguir exige que um dos pares de contexto de criptografia na solicitação seja "Deparment": "IT".

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

A solicitação a seguir da entidade principal receptora da concessão atenderia a ambas as restrições de concessão EncryptionContextEqual e EncryptionContextSubset neste exemplo.

$ 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

No entanto, uma solicitação como o seguinte da entidade principal receptora da concessão atenderia a restrição de concessão EncryptionContextSubset, mas falharia na restrição de concessão 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

Os serviços da AWS geralmente usam restrições de contexto de criptografia nas concessões que dão a eles permissão para usar chaves do KMS em sua Conta da AWS. Por exemplo, o Amazon DynamoDB usa uma concessão, como a seguinte, para obter permissão de uso da Chave gerenciada pela AWS para o DynamoDB na sua conta. A restrição de concessão EncryptionContextSubset nessa concessão colocará em vigor as permissões na concessão somente quando o contexto de criptografia na solicitação incluir os pares "subscriberID": "111122223333" e "tableName": "Services". Essa restrição de concessão significa que a concessão permite que o DynamoDB use a chave do KMS especificada apenas para uma tabela específica na sua Conta da AWS.

Para obter essa saída, execute a operação ListGrants na Chave gerenciada pela AWS para o DynamoDB na sua conta.

$ 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" } ] }

Conceder a permissão CreateGrant

Uma concessão pode incluir permissão para chamar a operação CreateGrant. Porém, quando uma entidade principal receptora da concessão obtém permissão para chamar CreateGrant de uma concessão, em vez de uma política, essa permissão é limitada.

  • A entidade principal receptora da concessão só pode criar concessões que permitam algumas ou todas as operações na concessão pai.

  • As restrições de concessão nas concessões que elas criam devem ser pelo menos tão rigorosas quanto as contidos na concessão pai.

Essas limitações não se aplicam a entidades principais que obtêm a permissão CreateGrant de uma política, embora suas permissões possam ser limitadas por condições de política.

Por exemplo, considere uma concessão que permite que o principal favorecido chame as operações GenerateDataKey, Decrypt e CreateGrant. Chamamos uma concessão que aceita a permissão CreateGrant para uma concessão pai.

# 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:user/exampleUser", "Constraints": { "EncryptionContextSubset": { "Department": "IT" } }, } ] }

A entidade principal receptora da concessão, exampleUser, pode usar essa permissão para criar uma concessão que inclui qualquer subconjunto das operações especificadas na concessão original, como CreateGrant e Decrypt. A concessão filho não pode incluir outras operações, como ScheduleKeyDeletion ou ReEncrypt.

Além disso, as restrições de concessão nas concessões filho devem ser igualmente ou mais restritivas que as da concessão pai. Por exemplo, a concessão filho pode adicionar pares a uma restrição EncryptionContextSubset na concessão pai, mas não pode removê-los. A concessão filho pode alterar uma restrição EncryptionContextSubset para uma restrição EncryptionContextEquals, mas não o contrário.

Por exemplo, a entidade principal receptora da concessão pode usar a permissão CreateGrant que obteve da concessão pai para criar a seguinte concessão filho. As operações na concessão filho são um subconjunto das operações na concessão pai, e as restrições de concessão são mais restritivas.

# 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" } }, } ] }

A entidade principal receptora da concessão na concessão filho, anotherUser, pode usar a permissão CreateGrant para criar concessões. No entanto, as concessões criadas por anotherUser devem incluir as operações em sua concessão pai ou um subconjunto, e as restrições de concessão devem ser iguais ou mais rigorosas.