aws-sdk-s3 1.79.1 → 1.212.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.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1548 -0
  3. data/LICENSE.txt +202 -0
  4. data/VERSION +1 -0
  5. data/lib/aws-sdk-s3/access_grants_credentials.rb +57 -0
  6. data/lib/aws-sdk-s3/access_grants_credentials_provider.rb +250 -0
  7. data/lib/aws-sdk-s3/bucket.rb +900 -98
  8. data/lib/aws-sdk-s3/bucket_acl.rb +44 -10
  9. data/lib/aws-sdk-s3/bucket_cors.rb +51 -11
  10. data/lib/aws-sdk-s3/bucket_lifecycle.rb +53 -8
  11. data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +107 -9
  12. data/lib/aws-sdk-s3/bucket_logging.rb +43 -6
  13. data/lib/aws-sdk-s3/bucket_notification.rb +32 -9
  14. data/lib/aws-sdk-s3/bucket_policy.rb +90 -6
  15. data/lib/aws-sdk-s3/bucket_region_cache.rb +9 -5
  16. data/lib/aws-sdk-s3/bucket_request_payment.rb +38 -8
  17. data/lib/aws-sdk-s3/bucket_tagging.rb +46 -7
  18. data/lib/aws-sdk-s3/bucket_versioning.rb +127 -9
  19. data/lib/aws-sdk-s3/bucket_website.rb +46 -7
  20. data/lib/aws-sdk-s3/client.rb +13729 -3146
  21. data/lib/aws-sdk-s3/client_api.rb +1604 -277
  22. data/lib/aws-sdk-s3/customizations/bucket.rb +31 -47
  23. data/lib/aws-sdk-s3/customizations/errors.rb +40 -0
  24. data/lib/aws-sdk-s3/customizations/object.rb +253 -82
  25. data/lib/aws-sdk-s3/customizations/object_summary.rb +5 -0
  26. data/lib/aws-sdk-s3/customizations/object_version.rb +13 -0
  27. data/lib/aws-sdk-s3/customizations/types/permanent_redirect.rb +26 -0
  28. data/lib/aws-sdk-s3/customizations.rb +28 -29
  29. data/lib/aws-sdk-s3/default_executor.rb +103 -0
  30. data/lib/aws-sdk-s3/encryption/client.rb +9 -5
  31. data/lib/aws-sdk-s3/encryption/decrypt_handler.rb +0 -4
  32. data/lib/aws-sdk-s3/encryption/default_cipher_provider.rb +2 -0
  33. data/lib/aws-sdk-s3/encryption/encrypt_handler.rb +2 -0
  34. data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +15 -9
  35. data/lib/aws-sdk-s3/encryptionV2/client.rb +105 -26
  36. data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +7 -165
  37. data/lib/aws-sdk-s3/encryptionV2/decryption.rb +205 -0
  38. data/lib/aws-sdk-s3/encryptionV2/default_cipher_provider.rb +20 -3
  39. data/lib/aws-sdk-s3/encryptionV2/encrypt_handler.rb +2 -4
  40. data/lib/aws-sdk-s3/encryptionV2/io_encrypter.rb +2 -0
  41. data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +18 -6
  42. data/lib/aws-sdk-s3/encryptionV2/utils.rb +5 -0
  43. data/lib/aws-sdk-s3/encryptionV3/client.rb +885 -0
  44. data/lib/aws-sdk-s3/encryptionV3/decrypt_handler.rb +98 -0
  45. data/lib/aws-sdk-s3/encryptionV3/decryption.rb +244 -0
  46. data/lib/aws-sdk-s3/encryptionV3/default_cipher_provider.rb +159 -0
  47. data/lib/aws-sdk-s3/encryptionV3/default_key_provider.rb +35 -0
  48. data/lib/aws-sdk-s3/encryptionV3/encrypt_handler.rb +98 -0
  49. data/lib/aws-sdk-s3/encryptionV3/errors.rb +47 -0
  50. data/lib/aws-sdk-s3/encryptionV3/io_auth_decrypter.rb +60 -0
  51. data/lib/aws-sdk-s3/encryptionV3/io_decrypter.rb +35 -0
  52. data/lib/aws-sdk-s3/encryptionV3/io_encrypter.rb +84 -0
  53. data/lib/aws-sdk-s3/encryptionV3/key_provider.rb +28 -0
  54. data/lib/aws-sdk-s3/encryptionV3/kms_cipher_provider.rb +159 -0
  55. data/lib/aws-sdk-s3/encryptionV3/materials.rb +58 -0
  56. data/lib/aws-sdk-s3/encryptionV3/utils.rb +321 -0
  57. data/lib/aws-sdk-s3/encryption_v2.rb +1 -0
  58. data/lib/aws-sdk-s3/encryption_v3.rb +24 -0
  59. data/lib/aws-sdk-s3/endpoint_parameters.rb +181 -0
  60. data/lib/aws-sdk-s3/endpoint_provider.rb +889 -0
  61. data/lib/aws-sdk-s3/endpoints.rb +1544 -0
  62. data/lib/aws-sdk-s3/errors.rb +80 -1
  63. data/lib/aws-sdk-s3/event_streams.rb +1 -1
  64. data/lib/aws-sdk-s3/express_credentials.rb +55 -0
  65. data/lib/aws-sdk-s3/express_credentials_provider.rb +59 -0
  66. data/lib/aws-sdk-s3/file_downloader.rb +258 -82
  67. data/lib/aws-sdk-s3/file_uploader.rb +25 -14
  68. data/lib/aws-sdk-s3/legacy_signer.rb +17 -26
  69. data/lib/aws-sdk-s3/multipart_download_error.rb +8 -0
  70. data/lib/aws-sdk-s3/multipart_file_uploader.rb +111 -86
  71. data/lib/aws-sdk-s3/multipart_stream_uploader.rb +110 -92
  72. data/lib/aws-sdk-s3/multipart_upload.rb +304 -14
  73. data/lib/aws-sdk-s3/multipart_upload_error.rb +3 -4
  74. data/lib/aws-sdk-s3/multipart_upload_part.rb +344 -20
  75. data/lib/aws-sdk-s3/object.rb +2457 -225
  76. data/lib/aws-sdk-s3/object_acl.rb +76 -15
  77. data/lib/aws-sdk-s3/object_copier.rb +7 -5
  78. data/lib/aws-sdk-s3/object_multipart_copier.rb +48 -23
  79. data/lib/aws-sdk-s3/object_summary.rb +2033 -169
  80. data/lib/aws-sdk-s3/object_version.rb +470 -53
  81. data/lib/aws-sdk-s3/plugins/accelerate.rb +1 -39
  82. data/lib/aws-sdk-s3/plugins/access_grants.rb +178 -0
  83. data/lib/aws-sdk-s3/plugins/arn.rb +70 -0
  84. data/lib/aws-sdk-s3/plugins/bucket_dns.rb +3 -41
  85. data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +1 -6
  86. data/lib/aws-sdk-s3/plugins/checksum_algorithm.rb +44 -0
  87. data/lib/aws-sdk-s3/plugins/dualstack.rb +2 -49
  88. data/lib/aws-sdk-s3/plugins/endpoints.rb +86 -0
  89. data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +3 -1
  90. data/lib/aws-sdk-s3/plugins/express_session_auth.rb +88 -0
  91. data/lib/aws-sdk-s3/plugins/get_bucket_location_fix.rb +1 -1
  92. data/lib/aws-sdk-s3/plugins/http_200_errors.rb +87 -26
  93. data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +8 -26
  94. data/lib/aws-sdk-s3/plugins/location_constraint.rb +3 -1
  95. data/lib/aws-sdk-s3/plugins/md5s.rb +10 -68
  96. data/lib/aws-sdk-s3/plugins/s3_signer.rb +48 -88
  97. data/lib/aws-sdk-s3/plugins/streaming_retry.rb +28 -9
  98. data/lib/aws-sdk-s3/plugins/url_encoded_keys.rb +2 -1
  99. data/lib/aws-sdk-s3/presigned_post.rb +99 -78
  100. data/lib/aws-sdk-s3/presigner.rb +50 -42
  101. data/lib/aws-sdk-s3/resource.rb +144 -15
  102. data/lib/aws-sdk-s3/transfer_manager.rb +321 -0
  103. data/lib/aws-sdk-s3/types.rb +12223 -4723
  104. data/lib/aws-sdk-s3/waiters.rb +1 -1
  105. data/lib/aws-sdk-s3.rb +37 -28
  106. data/sig/bucket.rbs +231 -0
  107. data/sig/bucket_acl.rbs +78 -0
  108. data/sig/bucket_cors.rbs +69 -0
  109. data/sig/bucket_lifecycle.rbs +88 -0
  110. data/sig/bucket_lifecycle_configuration.rbs +115 -0
  111. data/sig/bucket_logging.rbs +76 -0
  112. data/sig/bucket_notification.rbs +114 -0
  113. data/sig/bucket_policy.rbs +59 -0
  114. data/sig/bucket_request_payment.rbs +54 -0
  115. data/sig/bucket_tagging.rbs +65 -0
  116. data/sig/bucket_versioning.rbs +77 -0
  117. data/sig/bucket_website.rbs +93 -0
  118. data/sig/client.rbs +2612 -0
  119. data/sig/customizations/bucket.rbs +19 -0
  120. data/sig/customizations/object.rbs +38 -0
  121. data/sig/customizations/object_summary.rbs +35 -0
  122. data/sig/errors.rbs +44 -0
  123. data/sig/multipart_upload.rbs +120 -0
  124. data/sig/multipart_upload_part.rbs +109 -0
  125. data/sig/object.rbs +464 -0
  126. data/sig/object_acl.rbs +86 -0
  127. data/sig/object_summary.rbs +347 -0
  128. data/sig/object_version.rbs +143 -0
  129. data/sig/resource.rbs +141 -0
  130. data/sig/types.rbs +2899 -0
  131. data/sig/waiters.rbs +95 -0
  132. metadata +74 -16
  133. data/lib/aws-sdk-s3/plugins/bucket_arn.rb +0 -212
@@ -3,7 +3,7 @@
3
3
  # WARNING ABOUT GENERATED CODE
4
4
  #
5
5
  # This file is generated. See the contributing guide for more information:
6
- # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
7
  #
8
8
  # WARNING ABOUT GENERATED CODE
9
9
 
@@ -42,7 +42,7 @@ module Aws::S3
42
42
  @object_key
43
43
  end
44
44
 
45
- # Container for the bucket owner's display name and ID.
45
+ # Container for the bucket owner's ID.
46
46
  # @return [Types::Owner]
47
47
  def owner
48
48
  data[:owner]
@@ -55,7 +55,17 @@ module Aws::S3
55
55
  end
56
56
 
57
57
  # If present, indicates that the requester was successfully charged for
58
- # the request.
58
+ # the request. For more information, see [Using Requester Pays buckets
59
+ # for storage transfers and usage][1] in the *Amazon Simple Storage
60
+ # Service user guide*.
61
+ #
62
+ # <note markdown="1"> This functionality is not supported for directory buckets.
63
+ #
64
+ # </note>
65
+ #
66
+ #
67
+ #
68
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html
59
69
  # @return [String]
60
70
  def request_charged
61
71
  data[:request_charged]
@@ -75,10 +85,12 @@ module Aws::S3
75
85
  #
76
86
  # @return [self]
77
87
  def load
78
- resp = @client.get_object_acl(
88
+ resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
89
+ @client.get_object_acl(
79
90
  bucket: @bucket_name,
80
91
  key: @object_key
81
92
  )
93
+ end
82
94
  @data = resp.data
83
95
  self
84
96
  end
@@ -193,7 +205,9 @@ module Aws::S3
193
205
  :retry
194
206
  end
195
207
  end
196
- Aws::Waiters::Waiter.new(options).wait({})
208
+ Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
209
+ Aws::Waiters::Waiter.new(options).wait({})
210
+ end
197
211
  end
198
212
 
199
213
  # @!group Actions
@@ -221,6 +235,7 @@ module Aws::S3
221
235
  # },
222
236
  # },
223
237
  # content_md5: "ContentMD5",
238
+ # checksum_algorithm: "CRC32", # accepts CRC32, CRC32C, SHA1, SHA256, CRC64NVME
224
239
  # grant_full_control: "GrantFullControl",
225
240
  # grant_read: "GrantRead",
226
241
  # grant_read_acp: "GrantReadACP",
@@ -228,6 +243,7 @@ module Aws::S3
228
243
  # grant_write_acp: "GrantWriteACP",
229
244
  # request_payer: "requester", # accepts requester
230
245
  # version_id: "ObjectVersionId",
246
+ # expected_bucket_owner: "AccountId",
231
247
  # })
232
248
  # @param [Hash] options ({})
233
249
  # @option options [String] :acl
@@ -241,45 +257,90 @@ module Aws::S3
241
257
  # Contains the elements that set the ACL permissions for an object per
242
258
  # grantee.
243
259
  # @option options [String] :content_md5
244
- # The base64-encoded 128-bit MD5 digest of the data. This header must be
245
- # used as a message integrity check to verify that the request body was
246
- # not corrupted in transit. For more information, go to [RFC
260
+ # The Base64 encoded 128-bit `MD5` digest of the data. This header must
261
+ # be used as a message integrity check to verify that the request body
262
+ # was not corrupted in transit. For more information, go to [RFC
247
263
  # 1864.&gt;][1]
248
264
  #
265
+ # For requests made using the Amazon Web Services Command Line Interface
266
+ # (CLI) or Amazon Web Services SDKs, this field is calculated
267
+ # automatically.
268
+ #
249
269
  #
250
270
  #
251
271
  # [1]: http://www.ietf.org/rfc/rfc1864.txt
272
+ # @option options [String] :checksum_algorithm
273
+ # Indicates the algorithm used to create the checksum for the object
274
+ # when you use the SDK. This header will not provide any additional
275
+ # functionality if you don't use the SDK. When you send this header,
276
+ # there must be a corresponding `x-amz-checksum` or `x-amz-trailer`
277
+ # header sent. Otherwise, Amazon S3 fails the request with the HTTP
278
+ # status code `400 Bad Request`. For more information, see [Checking
279
+ # object integrity][1] in the *Amazon S3 User Guide*.
280
+ #
281
+ # If you provide an individual checksum, Amazon S3 ignores any provided
282
+ # `ChecksumAlgorithm` parameter.
283
+ #
284
+ #
285
+ #
286
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html
252
287
  # @option options [String] :grant_full_control
253
288
  # Allows grantee the read, write, read ACP, and write ACP permissions on
254
289
  # the bucket.
290
+ #
291
+ # This functionality is not supported for Amazon S3 on Outposts.
255
292
  # @option options [String] :grant_read
256
293
  # Allows grantee to list the objects in the bucket.
294
+ #
295
+ # This functionality is not supported for Amazon S3 on Outposts.
257
296
  # @option options [String] :grant_read_acp
258
297
  # Allows grantee to read the bucket ACL.
298
+ #
299
+ # This functionality is not supported for Amazon S3 on Outposts.
259
300
  # @option options [String] :grant_write
260
- # Allows grantee to create, overwrite, and delete any object in the
261
- # bucket.
301
+ # Allows grantee to create new objects in the bucket.
302
+ #
303
+ # For the bucket and object owners of existing objects, also allows
304
+ # deletions and overwrites of those objects.
262
305
  # @option options [String] :grant_write_acp
263
306
  # Allows grantee to write the ACL for the applicable bucket.
307
+ #
308
+ # This functionality is not supported for Amazon S3 on Outposts.
264
309
  # @option options [String] :request_payer
265
310
  # Confirms that the requester knows that they will be charged for the
266
311
  # request. Bucket owners need not specify this parameter in their
267
- # requests. For information about downloading objects from requester
268
- # pays buckets, see [Downloading Objects in Requestor Pays Buckets][1]
269
- # in the *Amazon S3 Developer Guide*.
312
+ # requests. If either the source or destination S3 bucket has Requester
313
+ # Pays enabled, the requester will pay for corresponding charges to copy
314
+ # the object. For information about downloading objects from Requester
315
+ # Pays buckets, see [Downloading Objects in Requester Pays Buckets][1]
316
+ # in the *Amazon S3 User Guide*.
317
+ #
318
+ # <note markdown="1"> This functionality is not supported for directory buckets.
319
+ #
320
+ # </note>
270
321
  #
271
322
  #
272
323
  #
273
324
  # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html
274
325
  # @option options [String] :version_id
275
- # VersionId used to reference a specific version of the object.
326
+ # Version ID used to reference a specific version of the object.
327
+ #
328
+ # <note markdown="1"> This functionality is not supported for directory buckets.
329
+ #
330
+ # </note>
331
+ # @option options [String] :expected_bucket_owner
332
+ # The account ID of the expected bucket owner. If the account ID that
333
+ # you provide does not match the actual owner of the bucket, the request
334
+ # fails with the HTTP status code `403 Forbidden` (access denied).
276
335
  # @return [Types::PutObjectAclOutput]
277
336
  def put(options = {})
278
337
  options = options.merge(
279
338
  bucket: @bucket_name,
280
339
  key: @object_key
281
340
  )
282
- resp = @client.put_object_acl(options)
341
+ resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
342
+ @client.put_object_acl(options)
343
+ end
283
344
  resp.data
284
345
  end
285
346
 
@@ -28,11 +28,13 @@ module Aws
28
28
  options[:bucket] = target_bucket
29
29
  options[:key] = target_key
30
30
  options[:copy_source] = copy_source(source)
31
- if options.delete(:multipart_copy)
32
- apply_source_client(source, options)
33
- ObjectMultipartCopier.new(@options).copy(options)
34
- else
35
- @object.client.copy_object(options)
31
+ Aws::Plugins::UserAgent.metric('S3_TRANSFER') do
32
+ if options.delete(:multipart_copy)
33
+ apply_source_client(source, options)
34
+ ObjectMultipartCopier.new(@options).copy(options)
35
+ else
36
+ @object.client.copy_object(options)
37
+ end
36
38
  end
37
39
  end
38
40
 
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'thread'
4
- require 'cgi'
4
+ require "cgi/escape"
5
+ require "cgi/util" if RUBY_VERSION < "3.5"
5
6
 
6
7
  module Aws
7
8
  module S3
@@ -15,12 +16,18 @@ module Aws
15
16
  MAX_PARTS = 10_000
16
17
 
17
18
  # @option options [Client] :client
18
- # @option [Integer] :min_part_size (52428800) Size of copied parts.
19
- # Defaults to 50MB.
20
- # will be constructed from the given `options' hash.
21
- # @option [Integer] :thread_count (10) Number of concurrent threads to
22
- # use for copying parts.
19
+ # @option options [Integer] :min_part_size (52428800)
20
+ # Size of copied parts. Defaults to 50MB.
21
+ # @option options [Integer] :thread_count (10) Number of concurrent
22
+ # threads to use for copying parts.
23
+ # @option options [Boolean] :use_source_parts (false) Use part sizes
24
+ # defined on the source object if any exist. If copying or moving an
25
+ # object that is already multipart, this does not re-part the object,
26
+ # instead re-using the part definitions on the original. That means
27
+ # the etag and any checksums will not change. This is especially
28
+ # useful if the source object has parts with varied sizes.
23
29
  def initialize(options = {})
30
+ @use_source_parts = options.delete(:use_source_parts) || false
24
31
  @thread_count = options.delete(:thread_count) || 10
25
32
  @min_part_size = options.delete(:min_part_size) || (FIVE_MB * 10)
26
33
  @client = options[:client] || Client.new
@@ -31,8 +38,9 @@ module Aws
31
38
 
32
39
  # @option (see S3::Client#copy_object)
33
40
  def copy(options = {})
34
- size = source_size(options)
35
- options[:upload_id] = initiate_upload(options)
41
+ metadata = source_metadata(options)
42
+ size = metadata[:content_length]
43
+ options[:upload_id] = initiate_upload(metadata.merge(options))
36
44
  begin
37
45
  parts = copy_parts(size, default_part_size(size), options)
38
46
  complete_upload(parts, options)
@@ -74,10 +82,9 @@ module Aws
74
82
  end
75
83
 
76
84
  def copy_part(part)
77
- {
78
- etag: @client.upload_part_copy(part).copy_part_result.etag,
79
- part_number: part[:part_number],
80
- }
85
+ @client.upload_part_copy(part).copy_part_result.to_h.merge({
86
+ part_number: part[:part_number]
87
+ }).tap { |result| result.delete(:last_modified) }
81
88
  end
82
89
 
83
90
  def complete_upload(parts, options)
@@ -100,26 +107,39 @@ module Aws
100
107
  parts = []
101
108
  options = options_for(:upload_part_copy, options)
102
109
  while offset < size
110
+ part_size = calculate_part_size(part_number, default_part_size, options)
103
111
  parts << options.merge({
104
112
  part_number: part_number,
105
- copy_source_range: byte_range(offset, default_part_size, size),
113
+ copy_source_range: byte_range(offset, part_size, size),
106
114
  })
107
115
  part_number += 1
108
- offset += default_part_size
116
+ offset += part_size
109
117
  end
110
118
  parts
111
119
  end
112
120
 
113
- def byte_range(offset, default_part_size, size)
114
- if offset + default_part_size < size
115
- "bytes=#{offset}-#{offset + default_part_size - 1}"
121
+ def byte_range(offset, part_size, size)
122
+ if offset + part_size < size
123
+ "bytes=#{offset}-#{offset + part_size - 1}"
116
124
  else
117
125
  "bytes=#{offset}-#{size - 1}"
118
126
  end
119
127
  end
120
128
 
121
- def source_size(options)
122
- return options.delete(:content_length) if options[:content_length]
129
+ def calculate_part_size(part_number, default_part_size, options)
130
+ if @use_source_parts && source_has_parts(options)
131
+ source_metadata(options.merge({ part_number: part_number }))[:content_length]
132
+ else
133
+ default_part_size
134
+ end
135
+ end
136
+
137
+ def source_has_parts(options)
138
+ @source_has_parts ||= source_metadata(options.merge({ part_number: 1 }))[:parts_count]
139
+ end
140
+
141
+ def source_metadata(options)
142
+ return options.slice(:content_length) if options[:content_length]
123
143
 
124
144
  client = options[:copy_source_client] || @client
125
145
 
@@ -129,10 +149,15 @@ module Aws
129
149
  bucket, key = options[:copy_source].match(/([^\/]+?)\/(.+)/)[1,2]
130
150
  end
131
151
 
132
- key = CGI.unescape(key)
133
- opts = { bucket: bucket, key: key }
134
- opts[:version_id] = version_id if version_id
135
- client.head_object(opts).content_length
152
+ head_opts = { bucket: bucket, key: CGI.unescape(key) }.tap { |opts|
153
+ opts[:version_id] = version_id if version_id
154
+ opts[:part_number] = options[:part_number] if options[:part_number]
155
+ }
156
+
157
+ client.head_object(head_opts).to_h.tap { |head|
158
+ head.delete(:server_side_encryption)
159
+ head.delete(:ssekms_key_id)
160
+ }
136
161
  end
137
162
 
138
163
  def default_part_size(source_size)