aws-sdk-s3 1.68.1 → 1.93.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +748 -0
  3. data/LICENSE.txt +202 -0
  4. data/VERSION +1 -0
  5. data/lib/aws-sdk-s3.rb +6 -3
  6. data/lib/aws-sdk-s3/arn/access_point_arn.rb +64 -0
  7. data/lib/aws-sdk-s3/arn/object_lambda_arn.rb +64 -0
  8. data/lib/aws-sdk-s3/arn/outpost_access_point_arn.rb +73 -0
  9. data/lib/aws-sdk-s3/bucket.rb +71 -10
  10. data/lib/aws-sdk-s3/bucket_acl.rb +11 -1
  11. data/lib/aws-sdk-s3/bucket_cors.rb +20 -4
  12. data/lib/aws-sdk-s3/bucket_lifecycle.rb +17 -2
  13. data/lib/aws-sdk-s3/bucket_lifecycle_configuration.rb +15 -2
  14. data/lib/aws-sdk-s3/bucket_logging.rb +11 -1
  15. data/lib/aws-sdk-s3/bucket_notification.rb +8 -1
  16. data/lib/aws-sdk-s3/bucket_policy.rb +18 -2
  17. data/lib/aws-sdk-s3/bucket_region_cache.rb +2 -0
  18. data/lib/aws-sdk-s3/bucket_request_payment.rb +14 -5
  19. data/lib/aws-sdk-s3/bucket_tagging.rb +18 -2
  20. data/lib/aws-sdk-s3/bucket_versioning.rb +27 -1
  21. data/lib/aws-sdk-s3/bucket_website.rb +18 -2
  22. data/lib/aws-sdk-s3/client.rb +3425 -1183
  23. data/lib/aws-sdk-s3/client_api.rb +361 -21
  24. data/lib/aws-sdk-s3/customizations.rb +4 -1
  25. data/lib/aws-sdk-s3/customizations/bucket.rb +17 -7
  26. data/lib/aws-sdk-s3/customizations/multipart_upload.rb +2 -0
  27. data/lib/aws-sdk-s3/customizations/object.rb +27 -7
  28. data/lib/aws-sdk-s3/customizations/object_summary.rb +2 -0
  29. data/lib/aws-sdk-s3/customizations/types/list_object_versions_output.rb +2 -0
  30. data/lib/aws-sdk-s3/encryption.rb +4 -0
  31. data/lib/aws-sdk-s3/encryption/client.rb +13 -0
  32. data/lib/aws-sdk-s3/encryption/decrypt_handler.rb +72 -26
  33. data/lib/aws-sdk-s3/encryption/default_cipher_provider.rb +43 -5
  34. data/lib/aws-sdk-s3/encryption/default_key_provider.rb +2 -0
  35. data/lib/aws-sdk-s3/encryption/encrypt_handler.rb +13 -2
  36. data/lib/aws-sdk-s3/encryption/errors.rb +2 -0
  37. data/lib/aws-sdk-s3/encryption/io_auth_decrypter.rb +2 -0
  38. data/lib/aws-sdk-s3/encryption/io_decrypter.rb +11 -3
  39. data/lib/aws-sdk-s3/encryption/io_encrypter.rb +2 -0
  40. data/lib/aws-sdk-s3/encryption/key_provider.rb +2 -0
  41. data/lib/aws-sdk-s3/encryption/kms_cipher_provider.rb +34 -3
  42. data/lib/aws-sdk-s3/encryption/materials.rb +2 -0
  43. data/lib/aws-sdk-s3/encryption/utils.rb +25 -0
  44. data/lib/aws-sdk-s3/encryptionV2/client.rb +566 -0
  45. data/lib/aws-sdk-s3/encryptionV2/decrypt_handler.rb +226 -0
  46. data/lib/aws-sdk-s3/encryptionV2/default_cipher_provider.rb +170 -0
  47. data/lib/aws-sdk-s3/encryptionV2/default_key_provider.rb +40 -0
  48. data/lib/aws-sdk-s3/encryptionV2/encrypt_handler.rb +69 -0
  49. data/lib/aws-sdk-s3/encryptionV2/errors.rb +37 -0
  50. data/lib/aws-sdk-s3/encryptionV2/io_auth_decrypter.rb +58 -0
  51. data/lib/aws-sdk-s3/encryptionV2/io_decrypter.rb +37 -0
  52. data/lib/aws-sdk-s3/encryptionV2/io_encrypter.rb +73 -0
  53. data/lib/aws-sdk-s3/encryptionV2/key_provider.rb +31 -0
  54. data/lib/aws-sdk-s3/encryptionV2/kms_cipher_provider.rb +169 -0
  55. data/lib/aws-sdk-s3/encryptionV2/materials.rb +60 -0
  56. data/lib/aws-sdk-s3/encryptionV2/utils.rb +103 -0
  57. data/lib/aws-sdk-s3/encryption_v2.rb +23 -0
  58. data/lib/aws-sdk-s3/errors.rb +24 -1
  59. data/lib/aws-sdk-s3/event_streams.rb +3 -1
  60. data/lib/aws-sdk-s3/file_downloader.rb +2 -0
  61. data/lib/aws-sdk-s3/file_part.rb +2 -0
  62. data/lib/aws-sdk-s3/file_uploader.rb +16 -3
  63. data/lib/aws-sdk-s3/legacy_signer.rb +17 -25
  64. data/lib/aws-sdk-s3/multipart_file_uploader.rb +39 -2
  65. data/lib/aws-sdk-s3/multipart_stream_uploader.rb +2 -0
  66. data/lib/aws-sdk-s3/multipart_upload.rb +18 -1
  67. data/lib/aws-sdk-s3/multipart_upload_error.rb +2 -0
  68. data/lib/aws-sdk-s3/multipart_upload_part.rb +67 -8
  69. data/lib/aws-sdk-s3/object.rb +310 -34
  70. data/lib/aws-sdk-s3/object_acl.rb +19 -1
  71. data/lib/aws-sdk-s3/object_copier.rb +2 -0
  72. data/lib/aws-sdk-s3/object_multipart_copier.rb +2 -0
  73. data/lib/aws-sdk-s3/object_summary.rb +208 -25
  74. data/lib/aws-sdk-s3/object_version.rb +35 -9
  75. data/lib/aws-sdk-s3/plugins/accelerate.rb +32 -38
  76. data/lib/aws-sdk-s3/plugins/arn.rb +228 -0
  77. data/lib/aws-sdk-s3/plugins/bucket_dns.rb +2 -2
  78. data/lib/aws-sdk-s3/plugins/bucket_name_restrictions.rb +3 -1
  79. data/lib/aws-sdk-s3/plugins/dualstack.rb +15 -4
  80. data/lib/aws-sdk-s3/plugins/expect_100_continue.rb +4 -1
  81. data/lib/aws-sdk-s3/plugins/get_bucket_location_fix.rb +2 -0
  82. data/lib/aws-sdk-s3/plugins/http_200_errors.rb +4 -1
  83. data/lib/aws-sdk-s3/plugins/iad_regional_endpoint.rb +14 -7
  84. data/lib/aws-sdk-s3/plugins/location_constraint.rb +2 -0
  85. data/lib/aws-sdk-s3/plugins/md5s.rb +3 -1
  86. data/lib/aws-sdk-s3/plugins/object_lambda_endpoint.rb +25 -0
  87. data/lib/aws-sdk-s3/plugins/redirects.rb +2 -0
  88. data/lib/aws-sdk-s3/plugins/s3_host_id.rb +2 -0
  89. data/lib/aws-sdk-s3/plugins/s3_signer.rb +36 -14
  90. data/lib/aws-sdk-s3/plugins/sse_cpk.rb +3 -1
  91. data/lib/aws-sdk-s3/plugins/streaming_retry.rb +118 -0
  92. data/lib/aws-sdk-s3/plugins/url_encoded_keys.rb +2 -0
  93. data/lib/aws-sdk-s3/presigned_post.rb +64 -28
  94. data/lib/aws-sdk-s3/presigner.rb +20 -16
  95. data/lib/aws-sdk-s3/resource.rb +4 -2
  96. data/lib/aws-sdk-s3/types.rb +3300 -542
  97. data/lib/aws-sdk-s3/waiters.rb +3 -1
  98. metadata +30 -8
  99. data/lib/aws-sdk-s3/plugins/bucket_arn.rb +0 -210
data/LICENSE.txt ADDED
@@ -0,0 +1,202 @@
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.93.1
data/lib/aws-sdk-s3.rb CHANGED
@@ -1,10 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # WARNING ABOUT GENERATED CODE
2
4
  #
3
5
  # This file is generated. See the contributing guide for more information:
4
- # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
5
7
  #
6
8
  # WARNING ABOUT GENERATED CODE
7
9
 
10
+
8
11
  require 'aws-sdk-kms'
9
12
  require 'aws-sigv4'
10
13
  require 'aws-sdk-core'
@@ -63,9 +66,9 @@ require_relative 'aws-sdk-s3/event_streams'
63
66
  #
64
67
  # See {Errors} for more information.
65
68
  #
66
- # @service
69
+ # @!group service
67
70
  module Aws::S3
68
71
 
69
- GEM_VERSION = '1.68.1'
72
+ GEM_VERSION = '1.93.1'
70
73
 
71
74
  end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aws
4
+ module S3
5
+ # @api private
6
+ class AccessPointARN < Aws::ARN
7
+ def initialize(options)
8
+ super(options)
9
+ @type, @access_point_name, @extra = @resource.split(/[:,\/]/)
10
+ end
11
+
12
+ def support_dualstack?
13
+ true
14
+ end
15
+
16
+ def support_fips?
17
+ true
18
+ end
19
+
20
+ def validate_arn!
21
+ unless @service == 's3'
22
+ raise ArgumentError, 'Must provide a valid S3 Access Point ARN.'
23
+ end
24
+
25
+ if @region.empty? || @account_id.empty?
26
+ raise ArgumentError,
27
+ 'S3 Access Point ARNs must contain both a region '\
28
+ 'and an account id.'
29
+ end
30
+
31
+ if @type != 'accesspoint'
32
+ raise ArgumentError, 'Invalid ARN, resource format is not correct'
33
+ end
34
+
35
+ if @access_point_name.nil? || @access_point_name.empty?
36
+ raise ArgumentError, 'Missing ARN accesspoint name.'
37
+ end
38
+
39
+ if @extra
40
+ raise ArgumentError,
41
+ 'ARN accesspoint resource must be a single value.'
42
+ end
43
+
44
+ unless Seahorse::Util.host_label?(
45
+ "#{@access_point_name}-#{@account_id}"
46
+ )
47
+ raise ArgumentError,
48
+ "#{@access_point_name}-#{@account_id} is not a valid "\
49
+ 'host label.'
50
+ end
51
+ end
52
+
53
+ def host_url(region, fips = false, dualstack = false, custom_endpoint = nil)
54
+ pfx = "#{@access_point_name}-#{@account_id}"
55
+ if custom_endpoint
56
+ "#{pfx}.#{custom_endpoint}"
57
+ else
58
+ sfx = Aws::Partitions::EndpointProvider.dns_suffix_for(region)
59
+ "#{pfx}.s3-accesspoint#{'-fips' if fips}#{'.dualstack' if dualstack}.#{region}.#{sfx}"
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aws
4
+ module S3
5
+ # @api private
6
+ class ObjectLambdaARN < Aws::ARN
7
+ def initialize(options)
8
+ super(options)
9
+ @type, @access_point_name, @extra = @resource.split(/[:,\/]/)
10
+ end
11
+
12
+ def support_dualstack?
13
+ false
14
+ end
15
+
16
+ def support_fips?
17
+ true
18
+ end
19
+
20
+ def validate_arn!
21
+ unless @service == 's3-object-lambda'
22
+ raise ArgumentError, 'Must provide a valid S3 Object Lambdas ARN.'
23
+ end
24
+
25
+ if @region.empty? || @account_id.empty?
26
+ raise ArgumentError,
27
+ 'S3 Object Lambdas ARNs must contain both a region '\
28
+ 'and an account id.'
29
+ end
30
+
31
+ if @type != 'accesspoint'
32
+ raise ArgumentError, 'Invalid ARN, resource format is not correct.'
33
+ end
34
+
35
+ if @access_point_name.nil? || @access_point_name.empty?
36
+ raise ArgumentError, 'Missing ARN accesspoint name.'
37
+ end
38
+
39
+ if @extra
40
+ raise ArgumentError,
41
+ 'ARN accesspoint resource must be a single value.'
42
+ end
43
+
44
+ unless Seahorse::Util.host_label?(
45
+ "#{@access_point_name}-#{@account_id}"
46
+ )
47
+ raise ArgumentError,
48
+ "#{@access_point_name}-#{@account_id} is not a valid "\
49
+ 'host label.'
50
+ end
51
+ end
52
+
53
+ def host_url(region, fips = false, _dualstack = false, custom_endpoint = nil)
54
+ pfx = "#{@access_point_name}-#{@account_id}"
55
+ if custom_endpoint
56
+ "#{pfx}.#{custom_endpoint}"
57
+ else
58
+ sfx = Aws::Partitions::EndpointProvider.dns_suffix_for(region)
59
+ "#{pfx}.s3-object-lambda#{'-fips' if fips}.#{region}.#{sfx}"
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aws
4
+ module S3
5
+ # @api private
6
+ class OutpostAccessPointARN < Aws::ARN
7
+ def initialize(options)
8
+ super(options)
9
+ @type, @outpost_id, @subtype, @access_point_name, @extra =
10
+ @resource.split(/[:,\/]/)
11
+ end
12
+
13
+ def support_dualstack?
14
+ false
15
+ end
16
+
17
+ def support_fips?
18
+ false
19
+ end
20
+
21
+ def validate_arn!
22
+ unless @service == 's3-outposts'
23
+ raise ArgumentError, 'Must provide a valid S3 Outposts ARN.'
24
+ end
25
+
26
+ if @region.empty? || @account_id.empty?
27
+ raise ArgumentError,
28
+ 'S3 Outpost ARNs must contain both a region '\
29
+ 'and an account id.'
30
+ end
31
+
32
+ if @type != 'outpost' && @subtype != 'accesspoint'
33
+ raise ArgumentError, 'Invalid ARN, resource format is not correct.'
34
+ end
35
+
36
+ if @outpost_id.nil? || @outpost_id.empty?
37
+ raise ArgumentError, 'Missing ARN outpost id.'
38
+ end
39
+
40
+ if @access_point_name.nil? || @access_point_name.empty?
41
+ raise ArgumentError, 'Missing ARN accesspoint name.'
42
+ end
43
+
44
+ if @extra
45
+ raise ArgumentError,
46
+ 'ARN accesspoint resource must be a single value.'
47
+ end
48
+
49
+ unless Seahorse::Util.host_label?(
50
+ "#{@access_point_name}-#{@account_id}"
51
+ )
52
+ raise ArgumentError,
53
+ "#{@access_point_name}-#{@account_id} is not a valid "\
54
+ 'host label.'
55
+ end
56
+
57
+ unless Seahorse::Util.host_label?(@outpost_id)
58
+ raise ArgumentError, "#{@outpost_id} is not a valid host label."
59
+ end
60
+ end
61
+
62
+ # Outpost ARNs currently do not support dualstack
63
+ def host_url(region, _fips = false, _dualstack = false, custom_endpoint = nil)
64
+ pfx = "#{@access_point_name}-#{@account_id}.#{@outpost_id}"
65
+ if custom_endpoint
66
+ "#{pfx}.#{custom_endpoint}"
67
+ else
68
+ "#{pfx}.s3-outposts.#{region}.amazonaws.com"
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # WARNING ABOUT GENERATED CODE
2
4
  #
3
5
  # This file is generated. See the contributing guide for more information:
4
- # https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
5
7
  #
6
8
  # WARNING ABOUT GENERATED CODE
7
9
 
@@ -32,7 +34,8 @@ module Aws::S3
32
34
  @name
33
35
  end
34
36
 
35
- # Date the bucket was created.
37
+ # Date the bucket was created. This date can change when making changes
38
+ # to your bucket, such as editing its bucket policy.
36
39
  # @return [Time]
37
40
  def creation_date
38
41
  data[:creation_date]
@@ -220,7 +223,7 @@ module Aws::S3
220
223
  # bucket.create({
221
224
  # acl: "private", # accepts private, public-read, public-read-write, authenticated-read
222
225
  # create_bucket_configuration: {
223
- # location_constraint: "EU", # accepts EU, eu-west-1, us-west-1, us-west-2, ap-south-1, ap-southeast-1, ap-southeast-2, ap-northeast-1, sa-east-1, cn-north-1, eu-central-1
226
+ # location_constraint: "af-south-1", # accepts af-south-1, ap-east-1, ap-northeast-1, ap-northeast-2, ap-northeast-3, ap-south-1, ap-southeast-1, ap-southeast-2, ca-central-1, cn-north-1, cn-northwest-1, EU, eu-central-1, eu-north-1, eu-south-1, eu-west-1, eu-west-2, eu-west-3, me-south-1, sa-east-1, us-east-2, us-gov-east-1, us-gov-west-1, us-west-1, us-west-2
224
227
  # },
225
228
  # grant_full_control: "GrantFullControl",
226
229
  # grant_read: "GrantRead",
@@ -258,8 +261,14 @@ module Aws::S3
258
261
 
259
262
  # @example Request syntax with placeholder values
260
263
  #
261
- # bucket.delete()
264
+ # bucket.delete({
265
+ # expected_bucket_owner: "AccountId",
266
+ # })
262
267
  # @param [Hash] options ({})
268
+ # @option options [String] :expected_bucket_owner
269
+ # The account ID of the expected bucket owner. If the bucket is owned by
270
+ # a different account, the request will fail with an HTTP `403 (Access
271
+ # Denied)` error.
263
272
  # @return [EmptyStructure]
264
273
  def delete(options = {})
265
274
  options = options.merge(bucket: @name)
@@ -282,6 +291,7 @@ module Aws::S3
282
291
  # mfa: "MFA",
283
292
  # request_payer: "requester", # accepts requester
284
293
  # bypass_governance_retention: false,
294
+ # expected_bucket_owner: "AccountId",
285
295
  # })
286
296
  # @param [Hash] options ({})
287
297
  # @option options [required, Types::Delete] :delete
@@ -305,6 +315,10 @@ module Aws::S3
305
315
  # Specifies whether you want to delete this object even if it has a
306
316
  # Governance-type Object Lock in place. You must have sufficient
307
317
  # permissions to perform this operation.
318
+ # @option options [String] :expected_bucket_owner
319
+ # The account ID of the expected bucket owner. If the bucket is owned by
320
+ # a different account, the request will fail with an HTTP `403 (Access
321
+ # Denied)` error.
308
322
  # @return [Types::DeleteObjectsOutput]
309
323
  def delete_objects(options = {})
310
324
  options = options.merge(bucket: @name)
@@ -334,28 +348,32 @@ module Aws::S3
334
348
  # "MetadataKey" => "MetadataValue",
335
349
  # },
336
350
  # server_side_encryption: "AES256", # accepts AES256, aws:kms
337
- # storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE
351
+ # storage_class: "STANDARD", # accepts STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE, OUTPOSTS
338
352
  # website_redirect_location: "WebsiteRedirectLocation",
339
353
  # sse_customer_algorithm: "SSECustomerAlgorithm",
340
354
  # sse_customer_key: "SSECustomerKey",
341
355
  # sse_customer_key_md5: "SSECustomerKeyMD5",
342
356
  # ssekms_key_id: "SSEKMSKeyId",
343
357
  # ssekms_encryption_context: "SSEKMSEncryptionContext",
358
+ # bucket_key_enabled: false,
344
359
  # request_payer: "requester", # accepts requester
345
360
  # tagging: "TaggingHeader",
346
361
  # object_lock_mode: "GOVERNANCE", # accepts GOVERNANCE, COMPLIANCE
347
362
  # object_lock_retain_until_date: Time.now,
348
363
  # object_lock_legal_hold_status: "ON", # accepts ON, OFF
364
+ # expected_bucket_owner: "AccountId",
349
365
  # })
350
366
  # @param [Hash] options ({})
351
367
  # @option options [String] :acl
352
368
  # The canned ACL to apply to the object. For more information, see
353
369
  # [Canned ACL][1].
354
370
  #
371
+ # This action is not supported by Amazon S3 on Outposts.
372
+ #
355
373
  #
356
374
  #
357
375
  # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL
358
- # @option options [String, IO] :body
376
+ # @option options [String, StringIO, File] :body
359
377
  # Object data.
360
378
  # @option options [String] :cache_control
361
379
  # Can be used to specify caching behavior along the request/reply chain.
@@ -423,22 +441,38 @@ module Aws::S3
423
441
  # @option options [String] :grant_full_control
424
442
  # Gives the grantee READ, READ\_ACP, and WRITE\_ACP permissions on the
425
443
  # object.
444
+ #
445
+ # This action is not supported by Amazon S3 on Outposts.
426
446
  # @option options [String] :grant_read
427
447
  # Allows grantee to read the object data and its metadata.
448
+ #
449
+ # This action is not supported by Amazon S3 on Outposts.
428
450
  # @option options [String] :grant_read_acp
429
451
  # Allows grantee to read the object ACL.
452
+ #
453
+ # This action is not supported by Amazon S3 on Outposts.
430
454
  # @option options [String] :grant_write_acp
431
455
  # Allows grantee to write the ACL for the applicable object.
456
+ #
457
+ # This action is not supported by Amazon S3 on Outposts.
432
458
  # @option options [required, String] :key
433
- # Object key for which the PUT operation was initiated.
459
+ # Object key for which the PUT action was initiated.
434
460
  # @option options [Hash<String,String>] :metadata
435
461
  # A map of metadata to store with the object in S3.
436
462
  # @option options [String] :server_side_encryption
437
463
  # The server-side encryption algorithm used when storing this object in
438
464
  # Amazon S3 (for example, AES256, aws:kms).
439
465
  # @option options [String] :storage_class
440
- # If you don't specify, S3 Standard is the default storage class.
441
- # Amazon S3 supports other storage classes.
466
+ # By default, Amazon S3 uses the STANDARD Storage Class to store newly
467
+ # created objects. The STANDARD storage class provides high durability
468
+ # and high availability. Depending on performance needs, you can specify
469
+ # a different Storage Class. Amazon S3 on Outposts only uses the
470
+ # OUTPOSTS Storage Class. For more information, see [Storage Classes][1]
471
+ # in the *Amazon S3 Service Developer Guide*.
472
+ #
473
+ #
474
+ #
475
+ # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html
442
476
  # @option options [String] :website_redirect_location
443
477
  # If the bucket is configured as a website, redirects requests for this
444
478
  # object to another object in the same bucket or to an external URL.
@@ -472,7 +506,7 @@ module Aws::S3
472
506
  # encrypting data. This value is used to store the object and then it is
473
507
  # discarded; Amazon S3 does not store the encryption key. The key must
474
508
  # be appropriate for use with the algorithm specified in the
475
- # `x-amz-server-side​-encryption​-customer-algorithm` header.
509
+ # `x-amz-server-side-encryption-customer-algorithm` header.
476
510
  # @option options [String] :sse_customer_key_md5
477
511
  # Specifies the 128-bit MD5 digest of the encryption key according to
478
512
  # RFC 1321. Amazon S3 uses this header for a message integrity check to
@@ -493,6 +527,14 @@ module Aws::S3
493
527
  # Specifies the AWS KMS Encryption Context to use for object encryption.
494
528
  # The value of this header is a base64-encoded UTF-8 string holding JSON
495
529
  # with the encryption context key-value pairs.
530
+ # @option options [Boolean] :bucket_key_enabled
531
+ # Specifies whether Amazon S3 should use an S3 Bucket Key for object
532
+ # encryption with server-side encryption using AWS KMS (SSE-KMS).
533
+ # Setting this header to `true` causes Amazon S3 to use an S3 Bucket Key
534
+ # for object encryption with SSE-KMS.
535
+ #
536
+ # Specifying this header with a PUT action doesn’t affect bucket-level
537
+ # settings for S3 Bucket Key.
496
538
  # @option options [String] :request_payer
497
539
  # Confirms that the requester knows that they will be charged for the
498
540
  # request. Bucket owners need not specify this parameter in their
@@ -517,6 +559,10 @@ module Aws::S3
517
559
  #
518
560
  #
519
561
  # [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html
562
+ # @option options [String] :expected_bucket_owner
563
+ # The account ID of the expected bucket owner. If the bucket is owned by
564
+ # a different account, the request will fail with an HTTP `403 (Access
565
+ # Denied)` error.
520
566
  # @return [Object]
521
567
  def put_object(options = {})
522
568
  options = options.merge(bucket: @name)
@@ -578,6 +624,7 @@ module Aws::S3
578
624
  # key_marker: "KeyMarker",
579
625
  # prefix: "Prefix",
580
626
  # upload_id_marker: "UploadIdMarker",
627
+ # expected_bucket_owner: "AccountId",
581
628
  # })
582
629
  # @param [Hash] options ({})
583
630
  # @option options [String] :delimiter
@@ -620,6 +667,10 @@ module Aws::S3
620
667
  # uploads for a key equal to the key-marker might be included in the
621
668
  # list only if they have an upload ID lexicographically greater than the
622
669
  # specified `upload-id-marker`.
670
+ # @option options [String] :expected_bucket_owner
671
+ # The account ID of the expected bucket owner. If the bucket is owned by
672
+ # a different account, the request will fail with an HTTP `403 (Access
673
+ # Denied)` error.
623
674
  # @return [MultipartUpload::Collection]
624
675
  def multipart_uploads(options = {})
625
676
  batches = Enumerator.new do |y|
@@ -668,6 +719,7 @@ module Aws::S3
668
719
  # key_marker: "KeyMarker",
669
720
  # prefix: "Prefix",
670
721
  # version_id_marker: "VersionIdMarker",
722
+ # expected_bucket_owner: "AccountId",
671
723
  # })
672
724
  # @param [Hash] options ({})
673
725
  # @option options [String] :delimiter
@@ -695,6 +747,10 @@ module Aws::S3
695
747
  # result under CommonPrefixes.
696
748
  # @option options [String] :version_id_marker
697
749
  # Specifies the object version you want to start listing from.
750
+ # @option options [String] :expected_bucket_owner
751
+ # The account ID of the expected bucket owner. If the bucket is owned by
752
+ # a different account, the request will fail with an HTTP `403 (Access
753
+ # Denied)` error.
698
754
  # @return [ObjectVersion::Collection]
699
755
  def object_versions(options = {})
700
756
  batches = Enumerator.new do |y|
@@ -726,6 +782,7 @@ module Aws::S3
726
782
  # fetch_owner: false,
727
783
  # start_after: "StartAfter",
728
784
  # request_payer: "requester", # accepts requester
785
+ # expected_bucket_owner: "AccountId",
729
786
  # })
730
787
  # @param [Hash] options ({})
731
788
  # @option options [String] :delimiter
@@ -746,6 +803,10 @@ module Aws::S3
746
803
  # Confirms that the requester knows that she or he will be charged for
747
804
  # the list objects request in V2 style. Bucket owners need not specify
748
805
  # this parameter in their requests.
806
+ # @option options [String] :expected_bucket_owner
807
+ # The account ID of the expected bucket owner. If the bucket is owned by
808
+ # a different account, the request will fail with an HTTP `403 (Access
809
+ # Denied)` error.
749
810
  # @return [ObjectSummary::Collection]
750
811
  def objects(options = {})
751
812
  batches = Enumerator.new do |y|