【问题标题】:Encrypt azure blob using Key in Azure-key-vault in Python在 Python 中使用 Azure-key-vault 中的密钥加密 azure blob
【发布时间】:2021-11-30 14:11:39
【问题描述】:

Microsoft 在 C# 中有一个示例,用于使用 azure-key-vault 中的密钥加密 azure blob https://docs.microsoft.com/en-us/azure/storage/blobs/storage-encrypt-decrypt-blobs-key-vault?WT.mc_id=Portal-Microsoft_Azure_Support&tabs=dotnet11#prerequisites

我希望在 Python 中做同样的事情 我尝试遵循此页面中给出的代码 https://github.com/Azure/azure-storage-python/blob/master/samples/blob/encryption_usage.py 此页面未使用 azure 密钥

当我尝试在该示例中使用 azure key 时出现错误

class KeyWrapper:
    def __init__(self, kid):
        self.kek = self.get_azure_vault_key()
        self.backend = default_backend()
        self.kid = 'local:' + kid

    def get_azure_vault_key(self):
        credential = DefaultAzureCredential()
        key_client = KeyClient(vault_url="https://xyz.vault.azure.net/", credential=credential)
        keyvaultObj = key_client.get_key("my-key")
        actualKey = keyvaultObj.key.n
        return actualKey

def saveEncryptedCSVtoAzureBlob(CSVData, accountName, accountKey):
    blobName = 'myBlob'
    blobService = BlockBlobService(account_name=accountName, account_key=accountKey)
    kek = KeyWrapper('local:key1') 
    blobService.key_encryption_key = kek
    blobService.create_blob_from_text(containerName, blobName, CSVData)

此示例给出以下错误 ValueError:包装密钥必须是有效的 AES 密钥长度

【问题讨论】:

  • 看起来 Python 示例使用 AES 256 ("A256KW") 进行密钥包装——AES 密钥的大小必须为 128、192 或 256 位。你知道 Key Vault 密钥的大小吗?

标签: python azure-blob-storage azure-keyvault public-key-encryption azure-container-service


【解决方案1】:

• 在您用于在 python 的 azure blob 存储中使用客户端加密的“encryptionusage.py”脚本中,提到了“KEK”,即密钥加密密钥或包装密钥加密算法'A256KW' 如下图所示,它是一种使用 AES256 位密钥的密钥包装加密算法。

• A256KW 算法的输出如下,从中提取了“CEK,即内容加密密钥”的详细信息,该密钥用于加密 azure blob 存储的内容并存储在 Azure Key vault 中。

‘eyJhbGciOiJBMjU2S1ciLCJlbmMiOiJBMjU2R0NNIn0.66xZoxFI18zfvLMO6WU1zzqqX1tT8xu_qZzMQyPcfVuajPNkOJUXQA.X5ZL8yaOektXmfny.brz-Lg.xG-EvM-9hrw0XRiuRW7HrA’算法将提取出的CEKW输出>

  ‘JWE Header:  {"alg":"A256KW","enc":"A256GCM"}                         
    Encrypted key (CEK):  66xZoxFI18zfvLMO6WU1zzqqX1tT8xu_qZzMQyPcfVuajPNkOJUXQA   
    Initialization vector:  X5ZL8yaOektXmfny                                         
    Ciphertext:  brz-Lg                                                   
    Authentication Tag:  xG-EvM-9hrw0XRiuRW7HrA ‘   data extracted from the KEK A256KW algorithm.

• 因此,上述输出示例中显示的 KEK 或包装密钥(即“eyJhbGciOiJBMjU2S1ciLCJlbmMiOiJBMjU2R0NNIn0”)没有可提取 CEK 的有效密钥长度。此外,在您的情况下,加密脚本中的“get_key_wrap_algorithm”命令返回值“A256KW”,从该值中提取 256 位 CEK,如上所述。因此,请根据收到的错误检查存储在 azure key vault 中的密钥长度。它应该符合上述 256 位规范。

请找到以下链接以获取更多信息:-

https://docs.microsoft.com/en-us/azure/storage/common/storage-client-side-encryption-python?tabs=python2

https://security.stackexchange.com/questions/80966/what-is-the-point-of-aes-key-wrap-with-json-web-encryption

【讨论】:

    【解决方案2】:

    “使用 azure key vault 加密 Azure blob 存储”功能今天不可用

    存储 Python 库似乎尚不支持与 Azure Key Vault 集成。将来会添加此支持,因此目前没有发布示例。

    此功能仅适用于 C#/.NET

    https://docs.microsoft.com/en-us/azure/storage/blobs/storage-encrypt-decrypt-blobs-key-vault?WT.mc_id=Portal-Microsoft_Azure_Support&tabs=dotnet11#use-key-vault-secrets

    【讨论】:

      猜你喜欢
      • 2021-01-11
      • 2021-12-13
      • 2021-03-16
      • 1970-01-01
      • 2018-05-06
      • 2017-04-24
      • 2016-05-01
      • 1970-01-01
      • 2017-10-30
      相关资源
      最近更新 更多