google-cloud-storage 1.11.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6df77120a6b6b06e34910f4150a4b4734e9f1ee6055f24dd1dcdcce6852c200a
4
- data.tar.gz: d3d9ae16b4cafc4e8d033efa4686ebbeeffbcf70005a34e1804fdf67ea16fb58
3
+ metadata.gz: 303659292accc44f277af53a486fc796a833b5f9f209923b989d34fd732a03dd
4
+ data.tar.gz: 6d702f3c6ab49d78dd9fba0b836a7b5ebcd0fc00f80c59fe3a2217e441ed1ab1
5
5
  SHA512:
6
- metadata.gz: db977a4ee0406302562c8d0d71f6a8a55bea904305a774dc2244898c7c08e3253b98ec77181d425f30a0953f9be693d36e27052b1e22a678bd6e3470b9aacfde
7
- data.tar.gz: 827d0709cc5f86a215813a93ce308c354e61f2a9b5bbbd9d087b89776ff9a1818b5f4e34418f976689ea1bd415231b8d73ec870628e8dccd67c82bc71242e363
6
+ metadata.gz: c9cac290f73ce71a32b26f3a8f293ac12813f08c0494435c47736a0533e94719bcfe8697f33c7234466cc11ce1d5db4227edbb14a9cae537654ae558a6924444
7
+ data.tar.gz: e7accc00dc59f35e31548767c33a871a2cabfce2ae2a4c13429aaa445e1436a36457911cc032ac162582381cf8ca6769f433c710c923c8ccc9983d9cce30a158
@@ -378,6 +378,54 @@ module Google
378
378
  patch_gapi! :billing
379
379
  end
380
380
 
381
+ ##
382
+ # The Cloud KMS encryption key that will be used to protect files.
383
+ # For example: `projects/a/locations/b/keyRings/c/cryptoKeys/d`
384
+ #
385
+ # @return [String, nil] A Cloud KMS encryption key, or `nil` if none
386
+ # has been configured.
387
+ #
388
+ # @example
389
+ # require "google/cloud/storage"
390
+ #
391
+ # storage = Google::Cloud::Storage.new
392
+ #
393
+ # bucket = storage.bucket "my-bucket"
394
+ #
395
+ # # KMS key ring must use the same location as the bucket.
396
+ # kms_key_name = "projects/a/locations/b/keyRings/c/cryptoKeys/d"
397
+ # bucket.default_kms_key = kms_key_name
398
+ #
399
+ # bucket.default_kms_key #=> kms_key_name
400
+ #
401
+ def default_kms_key
402
+ @gapi.encryption && @gapi.encryption.default_kms_key_name
403
+ end
404
+
405
+ ##
406
+ # Set the Cloud KMS encryption key that will be used to protect files.
407
+ # For example: `projects/a/locations/b/keyRings/c/cryptoKeys/d`
408
+ #
409
+ # @param [String] new_default_kms_key New Cloud KMS key name
410
+ #
411
+ # @example
412
+ # require "google/cloud/storage"
413
+ #
414
+ # storage = Google::Cloud::Storage.new
415
+ #
416
+ # bucket = storage.bucket "my-bucket"
417
+ #
418
+ # # KMS key ring must use the same location as the bucket.
419
+ # kms_key_name = "projects/a/locations/b/keyRings/c/cryptoKeys/d"
420
+ #
421
+ # bucket.default_kms_key = kms_key_name
422
+ #
423
+ def default_kms_key= new_default_kms_key
424
+ @gapi.encryption = Google::Apis::StorageV1::Bucket::Encryption.new \
425
+ default_kms_key_name: new_default_kms_key
426
+ patch_gapi! :encryption
427
+ end
428
+
381
429
  ##
382
430
  # Updates the bucket with changes made in the given block in a single
383
431
  # PATCH request. The following attributes may be set: {#cors},
@@ -645,7 +693,15 @@ module Google
645
693
  # Class](https://cloud.google.com/storage/docs/per-object-storage-class).
646
694
  # The default value is the default storage class for the bucket.
647
695
  # @param [String] encryption_key Optional. A customer-supplied, AES-256
648
- # encryption key that will be used to encrypt the file.
696
+ # encryption key that will be used to encrypt the file. Do not provide
697
+ # if `kms_key` is used.
698
+ # @param [String] kms_key Optional. Resource name of the Cloud KMS
699
+ # key, of the form
700
+ # `projects/my-prj/locations/kr-loc/keyRings/my-kr/cryptoKeys/my-key`,
701
+ # that will be used to encrypt the file. The KMS key ring must use
702
+ # the same location as the bucket.The Service Account associated with
703
+ # your project requires access to this encryption key. Do not provide
704
+ # if `encryption_key` is used.
649
705
  #
650
706
  # @return [Google::Cloud::Storage::File]
651
707
  #
@@ -687,6 +743,22 @@ module Google
687
743
  # file = bucket.file "destination/path/file.ext",
688
744
  # encryption_key: key
689
745
  #
746
+ # @example Providing a customer-managed Cloud KMS encryption key:
747
+ # require "google/cloud/storage"
748
+ #
749
+ # storage = Google::Cloud::Storage.new
750
+ # bucket = storage.bucket "my-bucket"
751
+ #
752
+ # # KMS key ring must use the same location as the bucket.
753
+ # kms_key_name = "projects/a/locations/b/keyRings/c/cryptoKeys/d"
754
+ #
755
+ # bucket.create_file "path/to/local.file.ext",
756
+ # "destination/path/file.ext",
757
+ # kms_key: kms_key_name
758
+ #
759
+ # file = bucket.file "destination/path/file.ext"
760
+ # file.kms_key #=> kms_key_name
761
+ #
690
762
  # @example Create a file with gzip-encoded data.
691
763
  # require "zlib"
692
764
  # require "google/cloud/storage"
@@ -717,13 +789,14 @@ module Google
717
789
  content_disposition: nil, content_encoding: nil,
718
790
  content_language: nil, content_type: nil,
719
791
  crc32c: nil, md5: nil, metadata: nil,
720
- storage_class: nil, encryption_key: nil
792
+ storage_class: nil, encryption_key: nil, kms_key: nil
721
793
  ensure_service!
722
794
  options = { acl: File::Acl.predefined_rule_for(acl), md5: md5,
723
795
  cache_control: cache_control, content_type: content_type,
724
796
  content_disposition: content_disposition, crc32c: crc32c,
725
797
  content_encoding: content_encoding, metadata: metadata,
726
798
  content_language: content_language, key: encryption_key,
799
+ kms_key: kms_key,
727
800
  storage_class: storage_class_for(storage_class),
728
801
  user_project: user_project }
729
802
  ensure_io_or_file_exists! file
@@ -308,6 +308,23 @@ module Google
308
308
  Base64.decode64 @gapi.customer_encryption.key_sha256
309
309
  end
310
310
 
311
+ ##
312
+ # The Cloud KMS encryption key that was used to protect the file, or
313
+ # `nil` if none has been configured.
314
+ #
315
+ # @see https://cloud.google.com/kms/docs/ Cloud Key Management Service
316
+ # Documentation
317
+ #
318
+ # @return [String, nil] A Cloud KMS encryption key, or `nil` if none has
319
+ # been configured.
320
+ #
321
+ # @see https://cloud.google.com/kms/docs/ Cloud Key Management Service
322
+ # Documentation
323
+ #
324
+ def kms_key
325
+ @gapi.kms_key_name
326
+ end
327
+
311
328
  ##
312
329
  # The file's storage class. This defines how the file is stored and
313
330
  # determines the SLA and the cost of storage. For more information, see
@@ -320,11 +337,16 @@ module Google
320
337
  end
321
338
 
322
339
  ##
323
- # Updates how the file is stored and determines the SLA and the cost of
324
- # storage. Accepted values include `:multi_regional`, `:regional`,
325
- # `:nearline`, and `:coldline`, as well as the equivalent strings
326
- # returned by {File#storage_class} or {Bucket#storage_class}. For more
327
- # information, see [Storage
340
+ # Rewrites the file with a new storage class, which determines the SLA
341
+ # and the cost of storage. Accepted values include:
342
+ #
343
+ # * `:multi_regional`
344
+ # * `:regional`
345
+ # * `:nearline`
346
+ # * `:coldline`
347
+ #
348
+ # as well as the equivalent strings returned by {File#storage_class} or
349
+ # {Bucket#storage_class}. For more information, see [Storage
328
350
  # Classes](https://cloud.google.com/storage/docs/storage-classes) and
329
351
  # [Per-Object Storage
330
352
  # Class](https://cloud.google.com/storage/docs/per-object-storage-class).
@@ -718,9 +740,18 @@ module Google
718
740
  # @param [String] encryption_key Optional. The customer-supplied,
719
741
  # AES-256 encryption key used to decrypt the file, if the existing
720
742
  # file is encrypted.
721
- # @param [String] new_encryption_key Optional. The customer-supplied,
722
- # AES-256 encryption key used to encrypt the file, if the rewritten
723
- # file is intended to be encrypted.
743
+ # @param [String, nil] new_encryption_key Optional. The new
744
+ # customer-supplied, AES-256 encryption key with which to encrypt the
745
+ # file. If not provided, the rewritten file will be encrypted using
746
+ # the default server-side encryption, or the `new_kms_key` if one is
747
+ # provided. Do not provide if `new_kms_key` is used.
748
+ # @param [String] new_kms_key Optional. Resource name of the Cloud KMS
749
+ # key, of the form
750
+ # `projects/my-prj/locations/kr-loc/keyRings/my-kr/cryptoKeys/my-key`,
751
+ # that will be used to encrypt the file. The KMS key ring must use
752
+ # the same location as the bucket.The Service Account associated with
753
+ # your project requires access to this encryption key. Do not provide
754
+ # if `new_encryption_key` is used.
724
755
  # @yield [file] a block yielding a delegate object for updating
725
756
  #
726
757
  # @return [Google::Cloud::Storage::File]
@@ -770,7 +801,7 @@ module Google
770
801
  # f.metadata["rewritten_from"] = "#{file.bucket}/#{file.name}"
771
802
  # end
772
803
  #
773
- # @example The file can be rewritten with a new encryption key:
804
+ # @example Rewriting with a customer-supplied encryption key:
774
805
  # require "google/cloud/storage"
775
806
  #
776
807
  # storage = Google::Cloud::Storage.new
@@ -793,9 +824,31 @@ module Google
793
824
  # f.metadata["rewritten_from"] = "#{file.bucket}/#{file.name}"
794
825
  # end
795
826
  #
827
+ # @example Rewriting with a customer-managed Cloud KMS encryption key:
828
+ # require "google/cloud/storage"
829
+ #
830
+ # storage = Google::Cloud::Storage.new
831
+ #
832
+ # bucket = storage.bucket "my-bucket"
833
+ #
834
+ # # KMS key ring must use the same location as the bucket.
835
+ # kms_key_name = "projects/a/locations/b/keyRings/c/cryptoKeys/d"
836
+ #
837
+ # # Old customer-supplied key was stored securely for later use.
838
+ # old_key = "y\x03\"\x0E\xB6\xD3\x9B\x0E\xAB*\x19\xFAv\xDEY\xBEI..."
839
+ #
840
+ # file = bucket.file "path/to/my-file.ext"
841
+ # file.rewrite "new-destination-bucket",
842
+ # "path/to/destination/file.ext",
843
+ # encryption_key: old_key,
844
+ # new_kms_key: kms_key_name do |f|
845
+ # f.metadata["rewritten_from"] = "#{file.bucket}/#{file.name}"
846
+ # end
847
+ #
796
848
  def rewrite dest_bucket_or_path, dest_path = nil,
797
849
  acl: nil, generation: nil,
798
- encryption_key: nil, new_encryption_key: nil
850
+ encryption_key: nil, new_encryption_key: nil,
851
+ new_kms_key: nil
799
852
  ensure_service!
800
853
  dest_bucket, dest_path = fix_rewrite_args dest_bucket_or_path,
801
854
  dest_path
@@ -815,6 +868,7 @@ module Google
815
868
  acl: acl, generation: generation,
816
869
  encryption_key: encryption_key,
817
870
  new_encryption_key: new_encryption_key,
871
+ new_kms_key: new_kms_key,
818
872
  user_project: user_project
819
873
 
820
874
  File.from_gapi new_gapi, service, user_project: user_project
@@ -841,13 +895,20 @@ module Google
841
895
  # if one was used.
842
896
  # @param [String, nil] new_encryption_key Optional. The new
843
897
  # customer-supplied, AES-256 encryption key with which to encrypt the
844
- # file. If `nil`, the rewritten file will be encrypted using the
845
- # default server-side encryption, not customer-supplied encryption
846
- # keys.
898
+ # file. If not provided, the rewritten file will be encrypted using
899
+ # the default server-side encryption, or the `new_kms_key` if one is
900
+ # provided. Do not provide if `new_kms_key` is used.
901
+ # @param [String] new_kms_key Optional. Resource name of the Cloud KMS
902
+ # key, of the form
903
+ # `projects/my-prj/locations/kr-loc/keyRings/my-kr/cryptoKeys/my-key`,
904
+ # that will be used to encrypt the file. The KMS key ring must use
905
+ # the same location as the bucket.The Service Account associated with
906
+ # your project requires access to this encryption key. Do not provide
907
+ # if `new_encryption_key` is used.
847
908
  #
848
909
  # @return [Google::Cloud::Storage::File]
849
910
  #
850
- # @example The file will be rewritten with a new encryption key:
911
+ # @example Rotating to a new customer-supplied encryption key:
851
912
  # require "google/cloud/storage"
852
913
  #
853
914
  # storage = Google::Cloud::Storage.new
@@ -865,9 +926,27 @@ module Google
865
926
  #
866
927
  # file.rotate encryption_key: old_key, new_encryption_key: new_key
867
928
  #
868
- def rotate encryption_key: nil, new_encryption_key: nil
929
+ # @example Rotating to a customer-managed Cloud KMS encryption key:
930
+ # require "google/cloud/storage"
931
+ #
932
+ # storage = Google::Cloud::Storage.new
933
+ # bucket = storage.bucket "my-bucket"
934
+ #
935
+ # # KMS key ring must use the same location as the bucket.
936
+ # kms_key_name = "projects/a/locations/b/keyRings/c/cryptoKeys/d"
937
+ #
938
+ # # Old key was stored securely for later use.
939
+ # old_key = "y\x03\"\x0E\xB6\xD3\x9B\x0E\xAB*\x19\xFAv\xDEY\xBEI..."
940
+ #
941
+ # file = bucket.file "path/to/my-file.ext", encryption_key: old_key
942
+ #
943
+ # file.rotate encryption_key: old_key, new_kms_key: kms_key_name
944
+ #
945
+ def rotate encryption_key: nil, new_encryption_key: nil,
946
+ new_kms_key: nil
869
947
  rewrite bucket, name, encryption_key: encryption_key,
870
- new_encryption_key: new_encryption_key
948
+ new_encryption_key: new_encryption_key,
949
+ new_kms_key: new_kms_key
871
950
  end
872
951
 
873
952
  ##
@@ -1233,7 +1312,8 @@ module Google
1233
1312
 
1234
1313
  ensure_service!
1235
1314
 
1236
- @gapi = if attributes.include? :storage_class
1315
+ rewrite_attrs = %i[storage_class kms_key_name]
1316
+ @gapi = if attributes.any? { |a| rewrite_attrs.include? a }
1237
1317
  rewrite_gapi \
1238
1318
  bucket, name, update_gapi, user_project: user_project
1239
1319
  else
@@ -1254,12 +1334,14 @@ module Google
1254
1334
  def rewrite_gapi bucket, name, updated_gapi,
1255
1335
  new_bucket: nil, new_name: nil, acl: nil,
1256
1336
  generation: nil, encryption_key: nil,
1257
- new_encryption_key: nil, user_project: nil
1337
+ new_encryption_key: nil, new_kms_key: nil,
1338
+ user_project: nil
1258
1339
  new_bucket ||= bucket
1259
1340
  new_name ||= name
1260
1341
  options = { acl: File::Acl.predefined_rule_for(acl),
1261
1342
  generation: generation, source_key: encryption_key,
1262
1343
  destination_key: new_encryption_key,
1344
+ destination_kms_key: new_kms_key,
1263
1345
  user_project: user_project }.delete_if { |_k, v| v.nil? }
1264
1346
 
1265
1347
  resp = service.rewrite_file \
@@ -278,7 +278,8 @@ module Google
278
278
  cache_control: nil, content_disposition: nil,
279
279
  content_encoding: nil, content_language: nil,
280
280
  content_type: nil, crc32c: nil, md5: nil, metadata: nil,
281
- storage_class: nil, key: nil, user_project: nil
281
+ storage_class: nil, key: nil, kms_key: nil,
282
+ user_project: nil
282
283
  file_obj = Google::Apis::StorageV1::Object.new(
283
284
  { cache_control: cache_control, content_type: content_type,
284
285
  content_disposition: content_disposition, md5_hash: md5,
@@ -293,7 +294,7 @@ module Google
293
294
  bucket_name, file_obj,
294
295
  name: path, predefined_acl: acl, upload_source: source,
295
296
  content_encoding: content_encoding, content_type: content_type,
296
- user_project: user_project(user_project),
297
+ kms_key_name: kms_key, user_project: user_project(user_project),
297
298
  options: key_options(key)
298
299
  end
299
300
  end
@@ -316,14 +317,15 @@ module Google
316
317
  def rewrite_file source_bucket_name, source_file_path,
317
318
  destination_bucket_name, destination_file_path,
318
319
  file_gapi = nil, source_key: nil, destination_key: nil,
319
- acl: nil, generation: nil, token: nil,
320
- user_project: nil
320
+ destination_kms_key: nil, acl: nil, generation: nil,
321
+ token: nil, user_project: nil
321
322
  key_options = rewrite_key_options source_key, destination_key
322
323
  execute do
323
324
  service.rewrite_object \
324
325
  source_bucket_name, source_file_path,
325
326
  destination_bucket_name, destination_file_path,
326
327
  file_gapi,
328
+ destination_kms_key_name: destination_kms_key,
327
329
  destination_predefined_acl: acl,
328
330
  source_generation: generation,
329
331
  rewrite_token: token,
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Storage
19
- VERSION = "1.11.0".freeze
19
+ VERSION = "1.12.0".freeze
20
20
  end
21
21
  end
22
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-cloud-storage
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.0
4
+ version: 1.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Moore
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-05-02 00:00:00.000000000 Z
12
+ date: 2018-05-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: google-cloud-core