@@ -43,6 +43,18 @@ def delete_bucket(bucket_name):
4343 print ('Bucket {} deleted' .format (bucket .name ))
4444
4545
46+ def enable_default_kms_key (bucket_name , kms_key_name ):
47+ """Sets a bucket's default KMS key."""
48+ storage_client = storage .Client ()
49+ bucket = storage_client .get_bucket (bucket_name )
50+ bucket .default_kms_key_name = kms_key_name
51+ bucket .patch ()
52+
53+ print ('Set default KMS key for bucket {} to {}.' .format (
54+ bucket .name ,
55+ bucket .default_kms_key_name ))
56+
57+
4658def get_bucket_labels (bucket_name ):
4759 """Prints out a bucket's labels."""
4860 storage_client = storage .Client ()
@@ -143,6 +155,20 @@ def upload_blob(bucket_name, source_file_name, destination_blob_name):
143155 destination_blob_name ))
144156
145157
158+ def upload_blob_with_kms (bucket_name , source_file_name , destination_blob_name ,
159+ kms_key_name ):
160+ """Uploads a file to the bucket, encrypting it with the given KMS key."""
161+ storage_client = storage .Client ()
162+ bucket = storage_client .get_bucket (bucket_name )
163+ blob = bucket .blob (destination_blob_name , kms_key_name = kms_key_name )
164+ blob .upload_from_filename (source_file_name )
165+
166+ print ('File {} uploaded to {} with encryption key {}.' .format (
167+ source_file_name ,
168+ destination_blob_name ,
169+ kms_key_name ))
170+
171+
146172def download_blob (bucket_name , source_blob_name , destination_file_name ):
147173 """Downloads a blob from the bucket."""
148174 storage_client = storage .Client ()
@@ -277,6 +303,16 @@ def copy_blob(bucket_name, blob_name, new_bucket_name, new_blob_name):
277303 upload_parser .add_argument ('source_file_name' )
278304 upload_parser .add_argument ('destination_blob_name' )
279305
306+ enable_default_kms_parser = subparsers .add_parser (
307+ 'enable-default-kms-key' , help = enable_default_kms_key .__doc__ )
308+ enable_default_kms_parser .add_argument ('kms_key_name' )
309+
310+ upload_kms_parser = subparsers .add_parser (
311+ 'upload-with-kms-key' , help = upload_blob_with_kms .__doc__ )
312+ upload_kms_parser .add_argument ('source_file_name' )
313+ upload_kms_parser .add_argument ('destination_blob_name' )
314+ upload_kms_parser .add_argument ('kms_key_name' )
315+
280316 download_parser = subparsers .add_parser (
281317 'download' , help = download_blob .__doc__ )
282318 download_parser .add_argument ('source_blob_name' )
@@ -310,6 +346,8 @@ def copy_blob(bucket_name, blob_name, new_bucket_name, new_blob_name):
310346
311347 if args .command == 'create-bucket' :
312348 create_bucket (args .bucket_name )
349+ if args .command == 'enable-default-kms-key' :
350+ enable_default_kms_key (args .bucket_name , args .kms_key_name )
313351 elif args .command == 'delete-bucket' :
314352 delete_bucket (args .bucket_name )
315353 if args .command == 'get-bucket-labels' :
@@ -327,6 +365,12 @@ def copy_blob(bucket_name, blob_name, new_bucket_name, new_blob_name):
327365 args .bucket_name ,
328366 args .source_file_name ,
329367 args .destination_blob_name )
368+ elif args .command == 'upload-with-kms-key' :
369+ upload_blob_with_kms (
370+ args .bucket_name ,
371+ args .source_file_name ,
372+ args .destination_blob_name ,
373+ args .kms_key_name )
330374 elif args .command == 'download' :
331375 download_blob (
332376 args .bucket_name ,
0 commit comments