Usar um token de concessão
A API do AWS KMS segue o modelo de consistência eventual. Ao criar uma concessão, esta pode não entrar em vigor imediatamente. Pode haver um breve atraso antes que a alteração esteja disponível em todo o AWS KMS. Normalmente, a alteração leva menos de alguns segundos para se propagar por todo o sistema, mas, em alguns casos, pode levar vários minutos. Uma vez que a alteração tenha se propagado em todo o sistema, a entidade principal receptora da concessão poderá usar as permissões na concessão sem especificar o token de concessão ou qualquer evidência da concessão. No entanto, se uma concessão for tão nova a ponto de ainda não ser conhecida pelo AWS KMS, a solicitação poderá falhar com um erro de AccessDeniedException.
Para usar as permissões em uma nova concessão imediatamente, use o token de concessão para a concessão. Salve o token de concessão retornado pela operação CreateGrant. Em seguida, envie o token de concessão na solicitação para a operação AWS KMS. Você pode enviar um token de concessão para qualquer operação de concessão do AWS KMS e pode enviar vários tokens de concessão na mesma solicitação.
O exemplo a seguir usa a operação CreateGrant para criar uma concessão que permite as operações GenerateDataKey e Decrypt. Ele salva o token de concessão retornado por CreateGrant na variável token. Em seguida, em uma chamada para GenerateDataKey, ele usa o token de concessão na variável token.
# Create a grant; save the grant token$token=$(aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:user/appUser \ --retiring-principal arn:aws:iam::111122223333:user/acctAdmin \ --operations GenerateDataKey Decrypt \ --query GrantToken \ --output text)# Use the grant token in a request$aws kms generate-data-key \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ –-key-spec AES_256 \ --grant-tokens $token
As entidades principais com permissão também podem usar um token de concessão para desativar uma nova concessão antes mesmo que ela fique disponível por meio do AWS KMS. (A operação RevokeGrant não aceita um token de concessão.) Para obter detalhes, consulte Retirar e revogar concessões.
# Retire the grant$aws kms retire-grant --grant-token $token