MCPcopy Create free account
hub / github.com/Azure/azure-storage-python / BlobEncryptionSamples

Class BlobEncryptionSamples

samples/blob/encryption_usage.py:97–263  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

95
96
97class BlobEncryptionSamples():
98 def __init__(self, account):
99 self.account = account
100
101 def run_all_samples(self):
102
103 self.block_blob_service = self.account.create_block_blob_service()
104 self.page_blob_service = self.account.create_page_blob_service()
105 self.service_dict = {'block_blob': self.block_blob_service,
106 'page_blob': self.page_blob_service}
107 self.put_encrypted_blob()
108 self.get_encrypted_blob()
109 self.get_encrypted_blob_key_encryption_key()
110 self.require_encryption()
111 self.alternate_key_algorithms()
112
113 def _get_resource_reference(self, prefix):
114 return '{}{}'.format(prefix, str(uuid.uuid4()).replace('-', ''))
115
116 def _get_blob_reference(self, prefix='blob'):
117 return self._get_resource_reference(prefix)
118
119 def _create_encrypted_blob(self, container_name, type, prefix='blob'):
120 blob_name = self._get_resource_reference(prefix)
121 self.service_dict[type].create_blob_from_text(container_name, blob_name, u'hello world')
122 return blob_name
123
124 def _create_container(self, prefix='container'):
125 container_name = self._get_resource_reference(prefix)
126 self.block_blob_service.create_container(container_name)
127 return container_name
128
129 def _get_random_bytes(self, size):
130 rand = random.Random()
131 result = bytearray(size)
132 for i in range(size):
133 result[i] = rand.randint(0, 255)
134 return bytes(result)
135
136 def put_encrypted_blob(self):
137 container_name = self._create_container()
138 block_blob_name = self._get_blob_reference(prefix='block_blob')
139 page_blob_name = self._get_blob_reference(prefix='page_blob')
140
141 # KeyWrapper implements the key encryption key interface outlined
142 # in the create_blob_from_* documentation on each service. Setting
143 # this property will tell the service to encrypt the blob. Blob encryption
144 # is supported only for uploading whole blobs and only at the time of creation.
145 kek = KeyWrapper('key1')
146 for service in self.service_dict.values():
147 service.key_encryption_key = kek
148
149 self.block_blob_service.create_blob_from_text(container_name, block_blob_name, u'Foo')
150 self.page_blob_service.create_blob_from_bytes(container_name, page_blob_name, b'Foo.' * 128)
151
152 # Even when encrypting, uploading large blobs will still automatically
153 # chunk the data and parallelize the upload with max_connections
154 # defaulting to 2.

Callers 1

Calls

no outgoing calls

Tested by 1