在Python中使用Azurekeyvault中的密钥加密azure blob

2024-05-19 06:22:26 发布

您现在位置:Python中文网/ 问答频道 /正文

微软在C#中有一个使用azure密钥库中的密钥加密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密钥时,它给出了一个错误

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密钥长度


Tags: keyhttpsselfcomgetdef密钥storage
2条回答

“使用Azure密钥库加密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

•在“encryptionusage.py”脚本中,您用于在python中的azure blob存储中使用客户端加密,“KEK”,即密钥加密密钥或包装密钥加密算法被称为“A256KW”,如下面的快照所示,这是一种使用AES256位密钥的密钥包装加密算法

Encryption.py snapshot

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

“Eyjhbgcioijbmju2s1cjlbmmijbmju2r0nnin0.66xZoxFI18zfvLMO6WU1zzqqX1tT8xu_qZzMQyPcfVuajPNkOJUXQA.X5ZL8yaOektXmfny.brz Lg.xG-EvM-9hrw0XRiuRW7HrA”>;A256KW算法的输出,通过该算法提取CEK

  ‘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或包装密钥,即“EYJHBGCIOIJBMJU2R0NNIN0”不具有可提取CEK的有效密钥长度。此外,在您的例子中,加密脚本中的“get_key_wrap_algorithm”命令返回值“A256KW”,如上所述,从中提取256位CEK。因此,请根据收到的错误检查azure密钥库中存储的密钥长度。它应符合上述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

相关问题 更多 >

    热门问题