aws-sdk-s3 1.96.2 → 1.117.2

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +147 -0
  3. data/VERSION +1 -1
  4. data/lib/aws-sdk-s3/bucket.rb +127 -30
  5. data/lib/aws-sdk-s3/bucket_acl.rb +21 -4
  6. data/lib/aws-sdk-s3/bucket_cors.rb +23 -6
  7. data/lib/aws-sdk-s3/bucket_lifecycle.rb +27 -8
  8. data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +28 -6
  9. data/lib/aws-sdk-s3/bucket_logging.rb +21 -4
  10. data/lib/aws-sdk-s3/bucket_notification.rb +19 -7
  11. data/lib/aws-sdk-s3/bucket_policy.rb +23 -6
  12. data/lib/aws-sdk-s3/bucket_request_payment.rb +21 -4
  13. data/lib/aws-sdk-s3/bucket_tagging.rb +23 -6
  14. data/lib/aws-sdk-s3/bucket_versioning.rb +63 -12
  15. data/lib/aws-sdk-s3/bucket_website.rb +23 -6
  16. data/lib/aws-sdk-s3/client.rb +2776 -1341
  17. data/lib/aws-sdk-s3/client_api.rb +577 -208
  18. data/lib/aws-sdk-s3/customizations/bucket.rb +20 -46
  19. data/lib/aws-sdk-s3/customizations/object.rb +78 -5
  20. data/lib/aws-sdk-s3/encryption/client.rb +1 -1
  21. data/lib/aws-sdk-s3/encryption/decrypt_handler.rb +0 -4
  22. data/lib/aws-sdk-s3/encryptionV2/client.rb +1 -1
  23. data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +0 -4
  24. data/lib/aws-sdk-s3/encryptionV2/encrypt_handler.rb +0 -4
  25. data/lib/aws-sdk-s3/endpoint_parameters.rb +142 -0
  26. data/lib/aws-sdk-s3/endpoint_provider.rb +2020 -0
  27. data/lib/aws-sdk-s3/endpoints.rb +2149 -0
  28. data/lib/aws-sdk-s3/file_downloader.rb +1 -1
  29. data/lib/aws-sdk-s3/file_uploader.rb +6 -1
  30. data/lib/aws-sdk-s3/multipart_file_uploader.rb +26 -7
  31. data/lib/aws-sdk-s3/multipart_stream_uploader.rb +36 -10
  32. data/lib/aws-sdk-s3/multipart_upload.rb +126 -12
  33. data/lib/aws-sdk-s3/multipart_upload_part.rb +134 -14
  34. data/lib/aws-sdk-s3/object.rb +291 -115
  35. data/lib/aws-sdk-s3/object_acl.rb +23 -6
  36. data/lib/aws-sdk-s3/object_summary.rb +210 -81
  37. data/lib/aws-sdk-s3/object_version.rb +66 -39
  38. data/lib/aws-sdk-s3/plugins/accelerate.rb +3 -44
  39. data/lib/aws-sdk-s3/plugins/arn.rb +22 -180
  40. data/lib/aws-sdk-s3/plugins/bucket_dns.rb +3 -39
  41. data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +1 -6
  42. data/lib/aws-sdk-s3/plugins/dualstack.rb +1 -55
  43. data/lib/aws-sdk-s3/plugins/endpoints.rb +262 -0
  44. data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +2 -1
  45. data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +6 -29
  46. data/lib/aws-sdk-s3/plugins/md5s.rb +5 -3
  47. data/lib/aws-sdk-s3/plugins/s3_signer.rb +33 -100
  48. data/lib/aws-sdk-s3/plugins/skip_whole_multipart_get_checksums.rb +31 -0
  49. data/lib/aws-sdk-s3/plugins/streaming_retry.rb +23 -2
  50. data/lib/aws-sdk-s3/presigned_post.rb +47 -35
  51. data/lib/aws-sdk-s3/presigner.rb +20 -27
  52. data/lib/aws-sdk-s3/resource.rb +19 -1
  53. data/lib/aws-sdk-s3/types.rb +2759 -4389
  54. data/lib/aws-sdk-s3.rb +5 -1
  55. metadata +12 -11
  56. data/lib/aws-sdk-s3/arn/access_point_arn.rb +0 -69
  57. data/lib/aws-sdk-s3/arn/object_lambda_arn.rb +0 -69
  58. data/lib/aws-sdk-s3/arn/outpost_access_point_arn.rb +0 -73
  59. data/lib/aws-sdk-s3/plugins/object_lambda_endpoint.rb +0 -25
@@ -5,22 +5,6 @@ require 'uri'
5
5
  module Aws
6
6
  module S3
7
7
  class Bucket
8
- # Save the old initialize method so that we can call 'super'.
9
- old_initialize = instance_method(:initialize)
10
- # Make the method redefinable
11
- alias_method :initialize, :initialize
12
- # Define a new initialize method that extracts out a bucket ARN.
13
- define_method(:initialize) do |*args|
14
- old_initialize.bind(self).call(*args)
15
- resolved_region, arn = Plugins::ARN.resolve_arn!(
16
- name,
17
- client.config.region,
18
- client.config.s3_use_arn_region
19
- )
20
- @resolved_region = resolved_region
21
- @arn = arn
22
- end
23
-
24
8
  # Deletes all objects and versioned objects from this bucket
25
9
  #
26
10
  # @example
@@ -105,14 +89,27 @@ module Aws
105
89
  if options[:virtual_host]
106
90
  scheme = options.fetch(:secure, true) ? 'https' : 'http'
107
91
  "#{scheme}://#{name}"
108
- elsif @arn
109
- Plugins::ARN.resolve_url!(
110
- client.config.endpoint.dup,
111
- @arn,
112
- @resolved_region
113
- ).to_s
114
92
  else
115
- s3_bucket_url
93
+ # Taken from Aws::S3::Endpoints module
94
+ unless client.config.regional_endpoint
95
+ endpoint = client.config.endpoint.to_s
96
+ end
97
+ params = Aws::S3::EndpointParameters.new(
98
+ bucket: name,
99
+ region: client.config.region,
100
+ use_fips: client.config.use_fips_endpoint,
101
+ use_dual_stack: client.config.use_dualstack_endpoint,
102
+ endpoint: endpoint,
103
+ force_path_style: client.config.force_path_style,
104
+ accelerate: client.config.use_accelerate_endpoint,
105
+ use_global_endpoint: client.config.s3_us_east_1_regional_endpoint == 'legacy',
106
+ use_object_lambda_endpoint: nil,
107
+ disable_access_points: nil,
108
+ disable_multi_region_access_points: client.config.s3_disable_multiregion_access_points,
109
+ use_arn_region: client.config.s3_use_arn_region,
110
+ )
111
+ endpoint = Aws::S3::EndpointProvider.new.resolve_endpoint(params)
112
+ endpoint.url
116
113
  end
117
114
  end
118
115
 
@@ -142,29 +139,6 @@ module Aws
142
139
 
143
140
  self
144
141
  end
145
-
146
- private
147
-
148
- def s3_bucket_url
149
- url = client.config.endpoint.dup
150
- if bucket_as_hostname?(url.scheme == 'https')
151
- url.host = "#{name}.#{url.host}"
152
- else
153
- url.path += '/' unless url.path[-1] == '/'
154
- url.path += Seahorse::Util.uri_escape(name)
155
- end
156
- if (client.config.region == 'us-east-1') &&
157
- (client.config.s3_us_east_1_regional_endpoint == 'legacy')
158
- url.host = Plugins::IADRegionalEndpoint.legacy_host(url.host)
159
- end
160
- url.to_s
161
- end
162
-
163
- def bucket_as_hostname?(https)
164
- Plugins::BucketDns.dns_compatible?(name, https) &&
165
- !client.config.force_path_style
166
- end
167
-
168
142
  end
169
143
  end
170
144
  end
@@ -161,7 +161,7 @@ module Aws
161
161
  #
162
162
  # @param [Symbol] method
163
163
  # The S3 operation to generate a presigned URL for. Valid values
164
- # are `:get`, `:put`, `:head`, `:delete`, `:create_multipart_upload`,
164
+ # are `:get`, `:put`, `:head`, `:delete`, `:create_multipart_upload`,
165
165
  # `:list_multipart_uploads`, `:complete_multipart_upload`,
166
166
  # `:abort_multipart_upload`, `:list_parts`, and `:upload_part`.
167
167
  #
@@ -215,6 +215,79 @@ module Aws
215
215
  )
216
216
  end
217
217
 
218
+ # Allows you to create presigned URL requests for S3 operations. This
219
+ # method returns a tuple containing the URL and the signed X-amz-* headers
220
+ # to be used with the presigned url.
221
+ #
222
+ # @example Pre-signed GET URL, valid for one hour
223
+ #
224
+ # obj.presigned_request(:get, expires_in: 3600)
225
+ # #=> ["https://bucket-name.s3.amazonaws.com/object-key?...", {}]
226
+ #
227
+ # @example Pre-signed PUT with a canned ACL
228
+ #
229
+ # # the object uploaded using this URL will be publicly accessible
230
+ # obj.presigned_request(:put, acl: 'public-read')
231
+ # #=> ["https://bucket-name.s3.amazonaws.com/object-key?...",
232
+ # {"x-amz-acl"=>"public-read"}]
233
+ #
234
+ # @param [Symbol] method
235
+ # The S3 operation to generate a presigned request for. Valid values
236
+ # are `:get`, `:put`, `:head`, `:delete`, `:create_multipart_upload`,
237
+ # `:list_multipart_uploads`, `:complete_multipart_upload`,
238
+ # `:abort_multipart_upload`, `:list_parts`, and `:upload_part`.
239
+ #
240
+ # @param [Hash] params
241
+ # Additional request parameters to use when generating the pre-signed
242
+ # request. See the related documentation in {Client} for accepted
243
+ # params.
244
+ #
245
+ # | Method | Client Method |
246
+ # |------------------------------|------------------------------------|
247
+ # | `:get` | {Client#get_object} |
248
+ # | `:put` | {Client#put_object} |
249
+ # | `:head` | {Client#head_object} |
250
+ # | `:delete` | {Client#delete_object} |
251
+ # | `:create_multipart_upload` | {Client#create_multipart_upload} |
252
+ # | `:list_multipart_uploads` | {Client#list_multipart_uploads} |
253
+ # | `:complete_multipart_upload` | {Client#complete_multipart_upload} |
254
+ # | `:abort_multipart_upload` | {Client#abort_multipart_upload} |
255
+ # | `:list_parts` | {Client#list_parts} |
256
+ # | `:upload_part` | {Client#upload_part} |
257
+ #
258
+ # @option params [Boolean] :virtual_host (false) When `true` the
259
+ # presigned URL will use the bucket name as a virtual host.
260
+ #
261
+ # bucket = Aws::S3::Bucket.new('my.bucket.com')
262
+ # bucket.object('key').presigned_request(virtual_host: true)
263
+ # #=> ["http://my.bucket.com/key?...", {}]
264
+ #
265
+ # @option params [Integer] :expires_in (900) Number of seconds before
266
+ # the pre-signed URL expires. This may not exceed one week (604800
267
+ # seconds). Note that the pre-signed URL is also only valid as long as
268
+ # credentials used to sign it are. For example, when using IAM roles,
269
+ # temporary tokens generated for signing also have a default expiration
270
+ # which will affect the effective expiration of the pre-signed URL.
271
+ #
272
+ # @raise [ArgumentError] Raised if `:expires_in` exceeds one week
273
+ # (604800 seconds).
274
+ #
275
+ # @return [String, Hash] A tuple with a presigned URL and headers that
276
+ # should be included with the request.
277
+ #
278
+ def presigned_request(method, params = {})
279
+ presigner = Presigner.new(client: client)
280
+
281
+ if %w(delete head get put).include?(method.to_s)
282
+ method = "#{method}_object".to_sym
283
+ end
284
+
285
+ presigner.presigned_request(
286
+ method.downcase,
287
+ params.merge(bucket: bucket_name, key: key)
288
+ )
289
+ end
290
+
218
291
  # Returns the public (un-signed) URL for this object.
219
292
  #
220
293
  # s3.bucket('bucket-name').object('obj-key').public_url
@@ -327,7 +400,7 @@ module Aws
327
400
  # progress = Proc.new do |bytes, totals|
328
401
  # puts bytes.map.with_index { |b, i| "Part #{i+1}: #{b} / #{totals[i]}"}.join(' ') + "Total: #{100.0 * bytes.sum / totals.sum }%" }
329
402
  # end
330
- # obj.upload_file('/path/to/file')
403
+ # obj.upload_file('/path/to/file', progress_callback: progress)
331
404
  #
332
405
  # @param [String, Pathname, File, Tempfile] source A file on the local
333
406
  # file system that will be uploaded as this object. This can either be
@@ -337,10 +410,10 @@ module Aws
337
410
  # using an open Tempfile, rewind it before uploading or else the object
338
411
  # will be empty.
339
412
  #
340
- # @option options [Integer] :multipart_threshold (15728640) Files larger
413
+ # @option options [Integer] :multipart_threshold (104857600) Files larger
341
414
  # than or equal to `:multipart_threshold` are uploaded using the S3
342
415
  # multipart APIs.
343
- # Default threshold is 15MB.
416
+ # Default threshold is 100MB.
344
417
  #
345
418
  # @option options [Integer] :thread_count (10) The number of parallel
346
419
  # multipart uploads. This option is not used if the file is smaller than
@@ -391,7 +464,7 @@ module Aws
391
464
  # customizing each range size in multipart_download,
392
465
  # By default, `auto` mode is enabled, which performs multipart_download
393
466
  #
394
- # @option options [String] chunk_size required in get_range mode.
467
+ # @option options [Integer] chunk_size required in get_range mode.
395
468
  #
396
469
  # @option options [Integer] thread_count (10) Customize threads used in
397
470
  # the multipart download.
@@ -120,7 +120,7 @@ module Aws
120
120
  # attr_reader :encryption_materials
121
121
  #
122
122
  # def key_for(matdesc)
123
- # key_name = JSON.load(matdesc)['key']
123
+ # key_name = JSON.parse(matdesc)['key']
124
124
  # if key = @keys[key_name]
125
125
  # key
126
126
  # else
@@ -165,10 +165,6 @@ module Aws
165
165
  # to initialize the cipher, and the decrypter truncates the
166
166
  # auth tag from the body when writing the final bytes.
167
167
  def authenticated_decrypter(context, cipher, envelope)
168
- if RUBY_VERSION.match(/1.9/)
169
- raise "authenticated decryption not supported by OpenSSL in Ruby version ~> 1.9"
170
- raise Aws::Errors::NonSupportedRubyVersionError, msg
171
- end
172
168
  http_resp = context.http_response
173
169
  content_length = http_resp.headers['content-length'].to_i
174
170
  auth_tag_length = auth_tag_length(envelope)
@@ -157,7 +157,7 @@ module Aws
157
157
  # attr_reader :encryption_materials
158
158
  #
159
159
  # def key_for(matdesc)
160
- # key_name = JSON.load(matdesc)['key']
160
+ # key_name = JSON.parse(matdesc)['key']
161
161
  # if key = @keys[key_name]
162
162
  # key
163
163
  # else
@@ -166,10 +166,6 @@ module Aws
166
166
  # to initialize the cipher, and the decrypter truncates the
167
167
  # auth tag from the body when writing the final bytes.
168
168
  def authenticated_decrypter(context, cipher, envelope)
169
- if RUBY_VERSION.match(/1.9/)
170
- raise "authenticated decryption not supported by OpenSSL in Ruby version ~> 1.9"
171
- raise Aws::Errors::NonSupportedRubyVersionError, msg
172
- end
173
169
  http_resp = context.http_response
174
170
  content_length = http_resp.headers['content-length'].to_i
175
171
  auth_tag_length = auth_tag_length(envelope)
@@ -9,10 +9,6 @@ module Aws
9
9
  class EncryptHandler < Seahorse::Client::Handler
10
10
 
11
11
  def call(context)
12
- if RUBY_VERSION.match(/1.9/)
13
- raise "authenticated encryption not supported by OpenSSL in Ruby version ~> 1.9"
14
- raise Aws::Errors::NonSupportedRubyVersionError, msg
15
- end
16
12
  envelope, cipher = context[:encryption][:cipher_provider]
17
13
  .encryption_cipher(
18
14
  kms_encryption_context: context[:encryption][:kms_encryption_context]
@@ -0,0 +1,142 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::S3
11
+ # Endpoint parameters used to influence endpoints per request.
12
+ #
13
+ # @!attribute bucket
14
+ # The S3 bucket used to send the request. This is an optional parameter that will be set automatically for operations that are scoped to an S3 bucket.
15
+ #
16
+ # @return [String]
17
+ #
18
+ # @!attribute region
19
+ # The AWS region used to dispatch the request.
20
+ #
21
+ # @return [String]
22
+ #
23
+ # @!attribute use_fips
24
+ # When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
25
+ #
26
+ # @return [Boolean]
27
+ #
28
+ # @!attribute use_dual_stack
29
+ # When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
30
+ #
31
+ # @return [Boolean]
32
+ #
33
+ # @!attribute endpoint
34
+ # Override the endpoint used to send this request
35
+ #
36
+ # @return [String]
37
+ #
38
+ # @!attribute force_path_style
39
+ # When true, force a path-style endpoint to be used where the bucket name is part of the path.
40
+ #
41
+ # @return [Boolean]
42
+ #
43
+ # @!attribute accelerate
44
+ # When true, use S3 Accelerate. NOTE: Not all regions support S3 accelerate.
45
+ #
46
+ # @return [Boolean]
47
+ #
48
+ # @!attribute use_global_endpoint
49
+ # Whether the global endpoint should be used, rather then the regional endpoint for us-east-1.
50
+ #
51
+ # @return [Boolean]
52
+ #
53
+ # @!attribute use_object_lambda_endpoint
54
+ # Internal parameter to use object lambda endpoint for an operation (eg: WriteGetObjectResponse)
55
+ #
56
+ # @return [Boolean]
57
+ #
58
+ # @!attribute disable_access_points
59
+ # Internal parameter to disable Access Point Buckets
60
+ #
61
+ # @return [Boolean]
62
+ #
63
+ # @!attribute disable_multi_region_access_points
64
+ # Whether multi-region access points (MRAP) should be disabled.
65
+ #
66
+ # @return [Boolean]
67
+ #
68
+ # @!attribute use_arn_region
69
+ # When an Access Point ARN is provided and this flag is enabled, the SDK MUST use the ARN&#39;s region when constructing the endpoint instead of the client&#39;s configured region.
70
+ #
71
+ # @return [Boolean]
72
+ #
73
+ EndpointParameters = Struct.new(
74
+ :bucket,
75
+ :region,
76
+ :use_fips,
77
+ :use_dual_stack,
78
+ :endpoint,
79
+ :force_path_style,
80
+ :accelerate,
81
+ :use_global_endpoint,
82
+ :use_object_lambda_endpoint,
83
+ :disable_access_points,
84
+ :disable_multi_region_access_points,
85
+ :use_arn_region,
86
+ ) do
87
+ include Aws::Structure
88
+
89
+ # @api private
90
+ class << self
91
+ PARAM_MAP = {
92
+ 'Bucket' => :bucket,
93
+ 'Region' => :region,
94
+ 'UseFIPS' => :use_fips,
95
+ 'UseDualStack' => :use_dual_stack,
96
+ 'Endpoint' => :endpoint,
97
+ 'ForcePathStyle' => :force_path_style,
98
+ 'Accelerate' => :accelerate,
99
+ 'UseGlobalEndpoint' => :use_global_endpoint,
100
+ 'UseObjectLambdaEndpoint' => :use_object_lambda_endpoint,
101
+ 'DisableAccessPoints' => :disable_access_points,
102
+ 'DisableMultiRegionAccessPoints' => :disable_multi_region_access_points,
103
+ 'UseArnRegion' => :use_arn_region,
104
+ }.freeze
105
+ end
106
+
107
+ def initialize(options = {})
108
+ self[:bucket] = options[:bucket]
109
+ self[:region] = options[:region]
110
+ self[:use_fips] = options[:use_fips]
111
+ self[:use_fips] = false if self[:use_fips].nil?
112
+ if self[:use_fips].nil?
113
+ raise ArgumentError, "Missing required EndpointParameter: :use_fips"
114
+ end
115
+ self[:use_dual_stack] = options[:use_dual_stack]
116
+ self[:use_dual_stack] = false if self[:use_dual_stack].nil?
117
+ if self[:use_dual_stack].nil?
118
+ raise ArgumentError, "Missing required EndpointParameter: :use_dual_stack"
119
+ end
120
+ self[:endpoint] = options[:endpoint]
121
+ self[:force_path_style] = options[:force_path_style]
122
+ self[:accelerate] = options[:accelerate]
123
+ self[:accelerate] = false if self[:accelerate].nil?
124
+ if self[:accelerate].nil?
125
+ raise ArgumentError, "Missing required EndpointParameter: :accelerate"
126
+ end
127
+ self[:use_global_endpoint] = options[:use_global_endpoint]
128
+ self[:use_global_endpoint] = false if self[:use_global_endpoint].nil?
129
+ if self[:use_global_endpoint].nil?
130
+ raise ArgumentError, "Missing required EndpointParameter: :use_global_endpoint"
131
+ end
132
+ self[:use_object_lambda_endpoint] = options[:use_object_lambda_endpoint]
133
+ self[:disable_access_points] = options[:disable_access_points]
134
+ self[:disable_multi_region_access_points] = options[:disable_multi_region_access_points]
135
+ self[:disable_multi_region_access_points] = false if self[:disable_multi_region_access_points].nil?
136
+ if self[:disable_multi_region_access_points].nil?
137
+ raise ArgumentError, "Missing required EndpointParameter: :disable_multi_region_access_points"
138
+ end
139
+ self[:use_arn_region] = options[:use_arn_region]
140
+ end
141
+ end
142
+ end