aws-sdk 1.30.1 → 1.31.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 (126) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -3
  3. data/lib/aws/api_config/CloudFront-2013-11-11.yml +2886 -0
  4. data/lib/aws/api_config/CloudTrail-2013-11-01.yml +36 -0
  5. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +67 -446
  6. data/lib/aws/auto_scaling.rb +0 -1
  7. data/lib/aws/auto_scaling/client.rb +2 -0
  8. data/lib/aws/cloud_formation.rb +0 -1
  9. data/lib/aws/cloud_formation/client.rb +2 -0
  10. data/lib/aws/cloud_front.rb +0 -1
  11. data/lib/aws/cloud_front/client.rb +6 -6
  12. data/lib/aws/cloud_search.rb +0 -1
  13. data/lib/aws/cloud_search/client.rb +3 -0
  14. data/lib/aws/cloud_trail.rb +0 -1
  15. data/lib/aws/cloud_trail/client.rb +2 -0
  16. data/lib/aws/cloud_watch.rb +0 -1
  17. data/lib/aws/cloud_watch/client.rb +2 -0
  18. data/lib/aws/core.rb +8 -6
  19. data/lib/aws/core/client.rb +30 -4
  20. data/lib/aws/core/configuration.rb +1 -1
  21. data/lib/aws/core/http/request.rb +2 -1
  22. data/lib/aws/core/signers/base.rb +46 -0
  23. data/lib/aws/core/signers/cloud_front.rb +56 -0
  24. data/lib/aws/core/signers/s3.rb +159 -0
  25. data/lib/aws/core/signers/version_2.rb +72 -0
  26. data/lib/aws/core/signers/version_3.rb +86 -0
  27. data/lib/aws/core/signers/version_3_https.rb +61 -0
  28. data/lib/aws/core/signers/version_4.rb +228 -0
  29. data/lib/aws/core/signers/version_4/chunk_signed_stream.rb +191 -0
  30. data/lib/aws/data_pipeline.rb +0 -1
  31. data/lib/aws/data_pipeline/client.rb +3 -0
  32. data/lib/aws/direct_connect.rb +0 -1
  33. data/lib/aws/direct_connect/client.rb +3 -0
  34. data/lib/aws/dynamo_db.rb +0 -1
  35. data/lib/aws/dynamo_db/client.rb +2 -0
  36. data/lib/aws/ec2.rb +0 -1
  37. data/lib/aws/ec2/client.rb +21 -0
  38. data/lib/aws/elastic_beanstalk.rb +0 -1
  39. data/lib/aws/elastic_beanstalk/client.rb +3 -0
  40. data/lib/aws/elastic_transcoder.rb +0 -1
  41. data/lib/aws/elastic_transcoder/client.rb +2 -0
  42. data/lib/aws/elasticache.rb +0 -1
  43. data/lib/aws/elasticache/client.rb +2 -0
  44. data/lib/aws/elb.rb +0 -1
  45. data/lib/aws/elb/client.rb +2 -0
  46. data/lib/aws/emr.rb +0 -1
  47. data/lib/aws/emr/client.rb +2 -0
  48. data/lib/aws/glacier.rb +0 -1
  49. data/lib/aws/glacier/client.rb +2 -0
  50. data/lib/aws/iam.rb +0 -1
  51. data/lib/aws/iam/client.rb +2 -0
  52. data/lib/aws/import_export.rb +0 -1
  53. data/lib/aws/import_export/client.rb +2 -0
  54. data/lib/aws/kinesis.rb +0 -1
  55. data/lib/aws/kinesis/client.rb +2 -0
  56. data/lib/aws/ops_works.rb +0 -1
  57. data/lib/aws/ops_works/client.rb +2 -0
  58. data/lib/aws/rds.rb +0 -1
  59. data/lib/aws/rds/client.rb +2 -0
  60. data/lib/aws/redshift.rb +0 -1
  61. data/lib/aws/redshift/client.rb +2 -0
  62. data/lib/aws/route_53.rb +0 -1
  63. data/lib/aws/route_53/client.rb +2 -0
  64. data/lib/aws/s3.rb +1 -0
  65. data/lib/aws/s3/bucket_collection.rb +9 -7
  66. data/lib/aws/s3/client.rb +70 -9
  67. data/lib/aws/s3/config.rb +12 -0
  68. data/lib/aws/s3/object_collection.rb +4 -9
  69. data/lib/aws/s3/presign_v4.rb +127 -0
  70. data/lib/aws/s3/presigned_post.rb +1 -1
  71. data/lib/aws/s3/request.rb +0 -136
  72. data/lib/aws/s3/s3_object.rb +40 -19
  73. data/lib/aws/simple_db.rb +0 -1
  74. data/lib/aws/simple_db/client.rb +2 -0
  75. data/lib/aws/simple_email_service.rb +0 -1
  76. data/lib/aws/simple_email_service/client.rb +2 -0
  77. data/lib/aws/simple_workflow.rb +0 -1
  78. data/lib/aws/simple_workflow/client.rb +2 -0
  79. data/lib/aws/sns.rb +0 -1
  80. data/lib/aws/sns/client.rb +2 -0
  81. data/lib/aws/sqs.rb +0 -1
  82. data/lib/aws/sqs/client.rb +2 -0
  83. data/lib/aws/storage_gateway.rb +0 -1
  84. data/lib/aws/storage_gateway/client.rb +2 -0
  85. data/lib/aws/sts.rb +0 -1
  86. data/lib/aws/sts/client.rb +2 -0
  87. data/lib/aws/support.rb +0 -1
  88. data/lib/aws/support/client.rb +2 -0
  89. data/lib/aws/version.rb +1 -1
  90. metadata +12 -38
  91. data/lib/aws/auto_scaling/request.rb +0 -29
  92. data/lib/aws/cloud_formation/request.rb +0 -29
  93. data/lib/aws/cloud_front/request.rb +0 -30
  94. data/lib/aws/cloud_search/request.rb +0 -23
  95. data/lib/aws/cloud_trail/request.rb +0 -30
  96. data/lib/aws/cloud_watch/request.rb +0 -29
  97. data/lib/aws/core/signature/version_2.rb +0 -56
  98. data/lib/aws/core/signature/version_3.rb +0 -77
  99. data/lib/aws/core/signature/version_3_https.rb +0 -54
  100. data/lib/aws/core/signature/version_4.rb +0 -135
  101. data/lib/aws/core/signer.rb +0 -46
  102. data/lib/aws/data_pipeline/request.rb +0 -26
  103. data/lib/aws/direct_connect/request.rb +0 -27
  104. data/lib/aws/dynamo_db/request.rb +0 -26
  105. data/lib/aws/ec2/request.rb +0 -21
  106. data/lib/aws/elastic_beanstalk/request.rb +0 -29
  107. data/lib/aws/elastic_transcoder/request.rb +0 -30
  108. data/lib/aws/elasticache/request.rb +0 -23
  109. data/lib/aws/elb/request.rb +0 -29
  110. data/lib/aws/emr/request.rb +0 -28
  111. data/lib/aws/glacier/request.rb +0 -29
  112. data/lib/aws/iam/request.rb +0 -29
  113. data/lib/aws/import_export/request.rb +0 -23
  114. data/lib/aws/kinesis/request.rb +0 -26
  115. data/lib/aws/ops_works/request.rb +0 -27
  116. data/lib/aws/rds/request.rb +0 -29
  117. data/lib/aws/redshift/request.rb +0 -29
  118. data/lib/aws/route_53/request.rb +0 -23
  119. data/lib/aws/simple_db/request.rb +0 -23
  120. data/lib/aws/simple_email_service/request.rb +0 -27
  121. data/lib/aws/simple_workflow/request.rb +0 -28
  122. data/lib/aws/sns/request.rb +0 -29
  123. data/lib/aws/sqs/request.rb +0 -31
  124. data/lib/aws/storage_gateway/request.rb +0 -28
  125. data/lib/aws/sts/request.rb +0 -29
  126. data/lib/aws/support/request.rb +0 -27
@@ -43,7 +43,6 @@ module AWS
43
43
 
44
44
  autoload :Client, 'aws/kinesis/client'
45
45
  autoload :Errors, 'aws/kinesis/errors'
46
- autoload :Request, 'aws/kinesis/request'
47
46
 
48
47
  include Core::ServiceInterface
49
48
 
@@ -19,6 +19,8 @@ module AWS
19
19
 
20
20
  API_VERSION = '2013-12-02'
21
21
 
22
+ signature_version :Version4, 'kinesis'
23
+
22
24
  # @api private
23
25
  CACHEABLE_REQUESTS = Set[]
24
26
 
@@ -20,7 +20,6 @@ module AWS
20
20
 
21
21
  autoload :Client, 'aws/ops_works/client'
22
22
  autoload :Errors, 'aws/ops_works/errors'
23
- autoload :Request, 'aws/ops_works/request'
24
23
 
25
24
  include Core::ServiceInterface
26
25
 
@@ -19,6 +19,8 @@ module AWS
19
19
 
20
20
  API_VERSION = '2013-02-18'
21
21
 
22
+ signature_version :Version4, 'opsworks'
23
+
22
24
  # @api private
23
25
  CACHEABLE_REQUESTS = Set[]
24
26
 
@@ -49,7 +49,6 @@ module AWS
49
49
  autoload :DBInstanceCollection, 'aws/rds/db_instance_collection'
50
50
  autoload :DBSnapshot, 'aws/rds/db_snapshot'
51
51
  autoload :DBSnapshotCollection, 'aws/rds/db_snapshot_collection'
52
- autoload :Request, 'aws/rds/request'
53
52
 
54
53
  include Core::ServiceInterface
55
54
 
@@ -19,6 +19,8 @@ module AWS
19
19
 
20
20
  API_VERSION = '2013-09-09'
21
21
 
22
+ signature_version :Version4, 'rds'
23
+
22
24
  # @api private
23
25
  CACHEABLE_REQUESTS = Set[]
24
26
 
@@ -42,7 +42,6 @@ module AWS
42
42
 
43
43
  autoload :Client, 'aws/redshift/client'
44
44
  autoload :Errors, 'aws/redshift/errors'
45
- autoload :Request, 'aws/redshift/request'
46
45
 
47
46
  include Core::ServiceInterface
48
47
 
@@ -19,6 +19,8 @@ module AWS
19
19
 
20
20
  API_VERSION = '2012-12-01'
21
21
 
22
+ signature_version :Version4, 'redshift'
23
+
22
24
  # @api private
23
25
  CACHEABLE_REQUESTS = Set[]
24
26
 
@@ -70,7 +70,6 @@ module AWS
70
70
  autoload :Errors, 'aws/route_53/errors'
71
71
  autoload :HostedZone, 'aws/route_53/hosted_zone'
72
72
  autoload :HostedZoneCollection, 'aws/route_53/hosted_zone_collection'
73
- autoload :Request, 'aws/route_53/request'
74
73
  autoload :ResourceRecordSet, 'aws/route_53/resource_record_set'
75
74
  autoload :ResourceRecordSetCollection, 'aws/route_53/resource_record_set_collection'
76
75
 
@@ -19,6 +19,8 @@ module AWS
19
19
 
20
20
  API_VERSION = '2012-12-12'
21
21
 
22
+ signature_version :Version3Https
23
+
22
24
  # @api private
23
25
  CACHEABLE_REQUESTS = Set[]
24
26
 
@@ -134,6 +134,7 @@ module AWS
134
134
  autoload :PrefixAndDelimiterCollection, 'aws/s3/prefix_and_delimiter_collection'
135
135
  autoload :PrefixedCollection, 'aws/s3/prefixed_collection'
136
136
  autoload :PresignedPost, 'aws/s3/presigned_post'
137
+ autoload :PresignV4, 'aws/s3/presign_v4'
137
138
  autoload :Request, 'aws/s3/request'
138
139
  autoload :S3Object, 'aws/s3/s3_object'
139
140
  autoload :Tree, 'aws/s3/tree'
@@ -102,11 +102,7 @@ module AWS
102
102
  config.s3_endpoint == 's3.amazonaws.com' or
103
103
  options[:location_constraint]
104
104
  then
105
- constraint =
106
- case config.s3_endpoint
107
- when 's3-eu-west-1.amazonaws.com' then 'EU'
108
- when /^s3-(.*)\.amazonaws\.com$/ then $1
109
- end
105
+ constraint = guess_constraint
110
106
  options[:location_constraint] = constraint if constraint
111
107
  end
112
108
 
@@ -148,13 +144,19 @@ module AWS
148
144
  nil
149
145
  end
150
146
 
151
- # @api private
152
147
  private
148
+
153
149
  def bucket_named name, owner = nil
154
150
  S3::Bucket.new(name.to_s, :owner => owner, :config => config)
155
151
  end
156
152
 
157
- end
153
+ def guess_constraint
154
+ case config.s3_endpoint
155
+ when 's3-eu-west-1.amazonaws.com' then 'EU'
156
+ when /^s3[.-](.*)\.amazonaws\.com/ then $1
157
+ end
158
+ end
158
159
 
160
+ end
159
161
  end
160
162
  end
@@ -25,6 +25,8 @@ module AWS
25
25
  # Client class for Amazon Simple Storage Service (S3).
26
26
  class Client < Core::Client
27
27
 
28
+ signature_version :S3
29
+
28
30
  API_VERSION = '2006-03-01'
29
31
 
30
32
  XMLNS = "http://s3.amazonaws.com/doc/#{API_VERSION}/"
@@ -45,8 +47,41 @@ module AWS
45
47
  include DataOptions
46
48
  include Core::UriEscape
47
49
 
50
+ # @param [Core::Http::Request] request
51
+ # @api private
52
+ def sign_request request
53
+ version = @config.s3_signature_version ?
54
+ @config.s3_signature_version.to_sym :
55
+ (@region =~ /cn-/ ? :v4 : :v3)
56
+ case version
57
+ when :v4 then v4_signer.sign_request(request)
58
+ when :v3 then v3_signer.sign_request(request)
59
+ else
60
+ raise "invalid signature version #{version.inspect}"
61
+ end
62
+ end
63
+
48
64
  protected
49
65
 
66
+ # @return [Core::Signers::S3]
67
+ def v3_signer
68
+ @v3_signer ||= Core::Signers::S3.new(credential_provider)
69
+ end
70
+
71
+ # @return [Core::Signers::Version4]
72
+ def v4_signer
73
+ @v4_signer ||= begin
74
+ Core::Signers::Version4.new(credential_provider, 's3', @region)
75
+ end
76
+ end
77
+
78
+ # @param [Http::Request] req
79
+ # @return [Boolean]
80
+ def chunk_sign? req
81
+ req.http_method == 'PUT' &&
82
+ req.headers['content-length'].to_i > 2 * 1024 * 1024 # 2MB
83
+ end
84
+
50
85
  def self.bucket_method(method_name, verb, *args, &block)
51
86
 
52
87
  method_options = (args.pop if args.last.kind_of?(Hash)) || {}
@@ -101,6 +136,32 @@ module AWS
101
136
 
102
137
  protected
103
138
 
139
+ def set_metadata request, options
140
+ if metadata = options[:metadata]
141
+ Array(metadata).each do |name, value|
142
+ request.headers["x-amz-meta-#{name}"] = value
143
+ end
144
+ end
145
+ end
146
+
147
+ def set_storage_class request, options
148
+ storage_class = options[:storage_class]
149
+ if storage_class.kind_of?(Symbol)
150
+ request.headers["x-amz-storage-class"] = storage_class.to_s.upcase
151
+ elsif storage_class
152
+ request.headers["x-amz-storage-class"] = storage_class
153
+ end
154
+ end
155
+
156
+ def set_server_side_encryption request, options
157
+ sse = options[:server_side_encryption]
158
+ if sse.is_a?(Symbol)
159
+ request.headers['x-amz-server-side-encryption'] = sse.to_s.upcase
160
+ elsif sse
161
+ request.headers['x-amz-server-side-encryption'] = sse
162
+ end
163
+ end
164
+
104
165
  def extract_error_details response
105
166
  if
106
167
  (response.http_response.status >= 300 ||
@@ -1314,9 +1375,9 @@ module AWS
1314
1375
  options = compute_write_options(options)
1315
1376
  set_body_stream_and_content_length(request, options)
1316
1377
 
1317
- request.metadata = options[:metadata]
1318
- request.storage_class = options[:storage_class]
1319
- request.server_side_encryption = options[:server_side_encryption]
1378
+ set_metadata(request, options)
1379
+ set_storage_class(request, options)
1380
+ set_server_side_encryption(request, options)
1320
1381
 
1321
1382
  super(request, options)
1322
1383
 
@@ -1563,9 +1624,9 @@ module AWS
1563
1624
  }) do
1564
1625
 
1565
1626
  configure_request do |req, options|
1566
- req.metadata = options[:metadata]
1567
- req.storage_class = options[:storage_class]
1568
- req.server_side_encryption = options[:server_side_encryption]
1627
+ set_metadata(req, options)
1628
+ set_storage_class(req, options)
1629
+ set_server_side_encryption(req, options)
1569
1630
  super(req, options)
1570
1631
  end
1571
1632
 
@@ -1805,9 +1866,9 @@ module AWS
1805
1866
 
1806
1867
  options = options.merge(:copy_source => escape_path(options[:copy_source]))
1807
1868
  super(req, options)
1808
- req.metadata = options[:metadata]
1809
- req.storage_class = options[:storage_class]
1810
- req.server_side_encryption = options[:server_side_encryption]
1869
+ set_metadata(req, options)
1870
+ set_storage_class(req, options)
1871
+ set_server_side_encryption(req, options)
1811
1872
 
1812
1873
  if options[:version_id]
1813
1874
  req.headers['x-amz-copy-source'] += "?versionId=#{options[:version_id]}"
@@ -39,4 +39,16 @@ AWS::Core::Configuration.module_eval do
39
39
 
40
40
  add_option :s3_storage_class, 'STANDARD'
41
41
 
42
+ add_option :s3_signature_version do |config, value|
43
+ if config.s3_region.match(/^cn-/)
44
+ :v4
45
+ elsif value
46
+ value
47
+ elsif config.s3 && config.s3[:signature_version]
48
+ config.s3[:signature_version]
49
+ else
50
+ :v3
51
+ end
52
+ end
53
+
42
54
  end
@@ -282,8 +282,8 @@ module AWS
282
282
  super
283
283
  end
284
284
 
285
- # @api private
286
- protected
285
+ private
286
+
287
287
  def each_member_in_page(page, &block)
288
288
  super
289
289
  page.contents.each do |content|
@@ -291,20 +291,14 @@ module AWS
291
291
  end
292
292
  end
293
293
 
294
- # @api private
295
- protected
296
294
  def list_request options
297
295
  client.list_objects(options)
298
296
  end
299
297
 
300
- # @api private
301
- protected
302
298
  def limit_param
303
299
  :max_keys
304
300
  end
305
301
 
306
- # @api private
307
- protected
308
302
  def next_markers page
309
303
  if page[:next_marker]
310
304
  marker = page[:next_marker]
@@ -344,7 +338,8 @@ module AWS
344
338
  process_batch unless @batch.empty?
345
339
  end
346
340
 
347
- protected
341
+ private
342
+
348
343
  def process_batch
349
344
  response = @block.call(@batch)
350
345
  @after_batch.call(response) if @after_batch
@@ -0,0 +1,127 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ class S3
16
+
17
+ # Utility class for building pre-signed URLs for Amazon S3 objects using
18
+ # signature version 4.
19
+ class PresignV4
20
+
21
+ # @param [S3Object] object
22
+ def initialize(object)
23
+ @object = object
24
+ @client = object.client
25
+ @signer = object.client.send(:v4_signer)
26
+ end
27
+
28
+ # @return [S3Object]
29
+ attr_reader :object
30
+
31
+ # @return [Client]
32
+ attr_reader :client
33
+
34
+ # @return [Core::Signers::Version4]
35
+ attr_reader :signer
36
+
37
+ # @param (see S3Object#url_for)
38
+ # @option (see S3Object#url_for)
39
+ # @return (see S3Object#url_for)
40
+ def presign(method, options = {})
41
+
42
+ now = Time.now.utc.strftime("%Y%m%dT%H%M%SZ")
43
+
44
+ request = build_request(method, options)
45
+
46
+ request.headers.clear
47
+ request.headers['host'] = request.host
48
+ signed_headers = 'Host'
49
+
50
+ # must be sent along with the PUT request headers
51
+ if options[:acl]
52
+ request.headers['X-Amz-Acl'] = options[:acl].to_s.gsub(/_/, '-')
53
+ signed_headers << ';X-Amz-Acl'
54
+ end
55
+
56
+ # must be sent along with the PUT request headers
57
+ if options[:content_md5]
58
+ request.headers['Content-MD5'] = options[:content_md5]
59
+ signed_headers << ';Content-MD5'
60
+ end
61
+
62
+ request_params = Core::Signers::S3::QUERY_PARAMS.map do |p|
63
+ param = p.tr("-","_").to_sym
64
+ if options.key?(param)
65
+ request.add_param(p, options[param])
66
+ end
67
+ end
68
+
69
+ request.add_param("X-Amz-Algorithm", "AWS4-HMAC-SHA256")
70
+ request.add_param("X-Amz-Date", now)
71
+ request.add_param("X-Amz-SignedHeaders", signed_headers)
72
+ request.add_param("X-Amz-Expires", seconds_away(options[:expires]))
73
+ request.add_param("X-Amz-Credential", signer.credential(now))
74
+ request.add_param("X-Amz-Signature", signature(request, now))
75
+
76
+ build_uri(request, options)
77
+
78
+ end
79
+
80
+ private
81
+
82
+ def build_request(method, options)
83
+ path_style = object.config.s3_force_path_style
84
+ params = options.merge(
85
+ :bucket_name => object.bucket.name,
86
+ :key => object.key,
87
+ :data => '',
88
+ )
89
+ req = client.send(:build_request, operation_name(method), params)
90
+ req.force_path_style = options.fetch(:force_path_style, path_style)
91
+ req
92
+ end
93
+
94
+ def operation_name(method)
95
+ case method
96
+ when :get, :read then :get_object
97
+ when :put, :write then :put_object
98
+ when :delete then :delete_object
99
+ else
100
+ msg = "invalid method, expected :get, :put or :delete, got "
101
+ msg << method.inspect
102
+ raise ArgumentError msg
103
+ end
104
+ end
105
+
106
+ def signature(request, datetime)
107
+ key = signer.derive_key(datetime)
108
+ signer.signature(request, key, datetime, 'UNSIGNED-PAYLOAD')
109
+ end
110
+
111
+ def build_uri(request, options)
112
+ uri_class = options[:secure] ? URI::HTTPS : URI::HTTP
113
+ uri_class.build(
114
+ :host => request.host,
115
+ :port => request.port,
116
+ :path => request.path,
117
+ :query => request.querystring
118
+ )
119
+ end
120
+
121
+ def seconds_away(expires)
122
+ expires - Time.now.to_i
123
+ end
124
+
125
+ end
126
+ end
127
+ end
@@ -342,7 +342,7 @@ module AWS
342
342
  def fields
343
343
 
344
344
  secret = config.credential_provider.secret_access_key
345
- signature = Core::Signer.sign(secret, policy, 'sha1')
345
+ signature = Core::Signers::Base.sign(secret, policy, 'sha1')
346
346
 
347
347
  fields = {
348
348
  "AWSAccessKeyId" => config.credential_provider.access_key_id,