Путаница здесь заключается в разнице между использованием AWS KMS напрямую через AWS SDK и использованием AWS Encryption SDK.
AWS Encryption SDK использует KMS (или других ключевых поставщиков) в качестве части конвертаформат шифрования [1].По этой причине приведенный вами фрагмент кода верен: выходные данные AWS Encryption SDK не могут быть расшифрованы непосредственно KMS, и наоборот.
Однако все реализации AWS Encryption SDK совместимы с друг с другом .
Если вы хотите зашифровать что-то из CLI, которое вы можете передать в код Java / JVM для расшифровки, это определенно возможно с помощью AWS Encryption SDK CLI и AWSEncryption SDK для Java.
Источник: я написал AWS Encryption SDK для Python [2] и CLI [3] и дал рекомендации по AWS Encryption SDK для C [4], а также нашу документацию [5].
Что касается того, почему вы не можете использовать AWSKmsClient
для расшифровки значения, которое вы получили от использования интерфейса командной строки AWS для прямого вызова KMS, существует множество возможностей в зависимости от того, какую ошибку вы получили.
Возможно, у вас нет разрешений Decrypt
на CMK.Это должно было привести к ошибке разрешений от KMS.
Другая возможность - предоставление неверного зашифрованного текста.CLI AWS автоматически кодирует base64 двоичные данные CiphertextBlob
, которые он получает от KMS, прежде чем возвращать их, поскольку большинство оболочек плохо обрабатывают двоичные данные.Тем не менее, AWSKmsClient
не будет автоматически base64-декодировать что-либо перед отправкой в KMS.Вы должны предоставить необработанные байты.Таким образом, если вы предоставляете в кодировке base64 строку AWSKmsClient
в запросе на расшифровку, KMS выдаст ошибку, указав неверный зашифрованный текст.
[1] https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/message-format.html
[2] https://aws -encryption-sdk-python.readthedocs.io / en / latest /
[3] https://aws -encryption-sdk-cli.readthedocs.io / ru / latest /
[4] https://github.com/awslabs/aws-encryption-sdk-c
[5] https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html