Безопасное хранение KMS-шифрования с помощью aws_encryption_sdk для python
Я хочу зашифровать oauth-доступ и обновить токен для хранения в моей базе данных Postgres для дальнейшего использования в моем проекте Django. Я использую Python aws_encryption_sdk, вызывая функцию шифрования, следуя приведенному ниже примеру: https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/python-example-code.html. Я могу успешно зашифровать и расшифровать мой токен, используя следующий метод и аналогичный метод дешифрования.
ciphertext, encryptor_header = aws_encryption_sdk.encrypt(
source=access_token_plaintext,
key_provider=master_key_provider
)
print('Ciphertext: ', ciphertext)
Теперь я хочу сохранить зашифрованный текст в поле модели, прикрепленном к пользователю, чтобы я мог совершать вызовы API для пользователя без необходимости повторной аутентификации. Но хотя зашифрованный текст успешно содержит зашифрованный access_token, он также содержит мой AWS ARN + keyId в виде открытого текста, так что сохранение зашифрованного текста, похоже, отрицательно сказывается на всей цели шифрования.
Зашифрованный текст является байтовым объектом, поэтому он затрудняет извлечение только зашифрованного текста токена, что я и пытался сделать.
Есть ли способ лучше? Безопасно ли хранить мой ARN как часть байтового объекта зашифрованного текста? Нужно ли хранить все это в отдельной базе данных?
Когда я печатаю зашифрованный текст, это тип ответа, который я получаю:
b'\x01\x00{\x03\x0cencryption_context_example_string\x00\x0cencryption_context_example_match\x00\x15aws-crypto-public-key\abcdefghighlmnopqrstuvwxyz/1234567==\x00\x01\x00\x07aws-kms\x00Karn:aws:kms:region_name:account-number:key/ABCD1234-ABCD-1234-A1B2-ABCD1234\x00\xcd...'