aws-sdk-v1 1.52.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 (560) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +7 -0
  3. data/LICENSE.txt +12 -0
  4. data/README.md +337 -0
  5. data/bin/aws-rb +179 -0
  6. data/ca-bundle.crt +3554 -0
  7. data/endpoints.json +1671 -0
  8. data/lib/aws-sdk-v1.rb +2 -0
  9. data/lib/aws-sdk.rb +1 -0
  10. data/lib/aws.rb +14 -0
  11. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +1070 -0
  12. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +372 -0
  13. data/lib/aws/api_config/CloudFront-2013-05-12.yml +2448 -0
  14. data/lib/aws/api_config/CloudFront-2013-08-26.yml +2599 -0
  15. data/lib/aws/api_config/CloudFront-2013-09-27.yml +2765 -0
  16. data/lib/aws/api_config/CloudFront-2013-11-11.yml +2886 -0
  17. data/lib/aws/api_config/CloudFront-2013-11-22.yml +2918 -0
  18. data/lib/aws/api_config/CloudFront-2014-01-31.yml +2934 -0
  19. data/lib/aws/api_config/CloudFront-2014-05-31.yml +3100 -0
  20. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
  21. data/lib/aws/api_config/CloudSearch-2013-01-01.yml +1164 -0
  22. data/lib/aws/api_config/CloudTrail-2013-11-01.yml +130 -0
  23. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
  24. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
  25. data/lib/aws/api_config/DirectConnect-2012-10-25.yml +735 -0
  26. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1168 -0
  27. data/lib/aws/api_config/DynamoDB-2012-08-10.yml +2105 -0
  28. data/lib/aws/api_config/EC2-2013-08-15.yml +4708 -0
  29. data/lib/aws/api_config/EC2-2013-10-01.yml +4726 -0
  30. data/lib/aws/api_config/EC2-2013-10-15.yml +4651 -0
  31. data/lib/aws/api_config/EC2-2014-02-01.yml +4755 -0
  32. data/lib/aws/api_config/EC2-2014-05-01.yml +4812 -0
  33. data/lib/aws/api_config/ELB-2012-06-01.yml +766 -0
  34. data/lib/aws/api_config/EMR-2009-03-31.yml +972 -0
  35. data/lib/aws/api_config/ElastiCache-2013-06-15.yml +1188 -0
  36. data/lib/aws/api_config/ElastiCache-2014-03-24.yml +1375 -0
  37. data/lib/aws/api_config/ElastiCache-2014-07-15.yml +1385 -0
  38. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +854 -0
  39. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +3082 -0
  40. data/lib/aws/api_config/Glacier-2012-06-01.yml +649 -0
  41. data/lib/aws/api_config/IAM-2010-05-08.yml +1339 -0
  42. data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
  43. data/lib/aws/api_config/Kinesis-2013-12-02.yml +201 -0
  44. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +2025 -0
  45. data/lib/aws/api_config/RDS-2013-05-15.yml +2464 -0
  46. data/lib/aws/api_config/RDS-2013-09-09.yml +2640 -0
  47. data/lib/aws/api_config/Redshift-2012-12-01.yml +2161 -0
  48. data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
  49. data/lib/aws/api_config/Route53-2013-04-01.yml +889 -0
  50. data/lib/aws/api_config/SNS-2010-03-31.yml +448 -0
  51. data/lib/aws/api_config/SQS-2012-11-05.yml +404 -0
  52. data/lib/aws/api_config/STS-2011-06-15.yml +151 -0
  53. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
  54. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
  55. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2388 -0
  56. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
  57. data/lib/aws/api_config/StorageGateway-2013-06-30.yml +1025 -0
  58. data/lib/aws/api_config/Support-2013-04-15.yml +489 -0
  59. data/lib/aws/auto_scaling.rb +163 -0
  60. data/lib/aws/auto_scaling/activity.rb +102 -0
  61. data/lib/aws/auto_scaling/activity_collection.rb +81 -0
  62. data/lib/aws/auto_scaling/client.rb +48 -0
  63. data/lib/aws/auto_scaling/config.rb +18 -0
  64. data/lib/aws/auto_scaling/errors.rb +22 -0
  65. data/lib/aws/auto_scaling/group.rb +421 -0
  66. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  67. data/lib/aws/auto_scaling/group_options.rb +155 -0
  68. data/lib/aws/auto_scaling/instance.rb +192 -0
  69. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  70. data/lib/aws/auto_scaling/launch_configuration.rb +162 -0
  71. data/lib/aws/auto_scaling/launch_configuration_collection.rb +160 -0
  72. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  73. data/lib/aws/auto_scaling/notification_configuration_collection.rb +183 -0
  74. data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
  75. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  76. data/lib/aws/auto_scaling/scaling_policy_options.rb +65 -0
  77. data/lib/aws/auto_scaling/scheduled_action.rb +141 -0
  78. data/lib/aws/auto_scaling/scheduled_action_collection.rb +202 -0
  79. data/lib/aws/auto_scaling/tag.rb +59 -0
  80. data/lib/aws/auto_scaling/tag_collection.rb +114 -0
  81. data/lib/aws/cloud_formation.rb +272 -0
  82. data/lib/aws/cloud_formation/client.rb +48 -0
  83. data/lib/aws/cloud_formation/config.rb +18 -0
  84. data/lib/aws/cloud_formation/errors.rb +22 -0
  85. data/lib/aws/cloud_formation/stack.rb +266 -0
  86. data/lib/aws/cloud_formation/stack_collection.rb +232 -0
  87. data/lib/aws/cloud_formation/stack_event.rb +73 -0
  88. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  89. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  90. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  91. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  92. data/lib/aws/cloud_formation/stack_resource_collection.rb +83 -0
  93. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
  94. data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
  95. data/lib/aws/cloud_front.rb +72 -0
  96. data/lib/aws/cloud_front/client.rb +57 -0
  97. data/lib/aws/cloud_front/config.rb +18 -0
  98. data/lib/aws/cloud_front/errors.rb +22 -0
  99. data/lib/aws/cloud_search.rb +73 -0
  100. data/lib/aws/cloud_search/client.rb +40 -0
  101. data/lib/aws/cloud_search/config.rb +18 -0
  102. data/lib/aws/cloud_search/errors.rb +22 -0
  103. data/lib/aws/cloud_trail.rb +72 -0
  104. data/lib/aws/cloud_trail/client.rb +35 -0
  105. data/lib/aws/cloud_trail/config.rb +18 -0
  106. data/lib/aws/cloud_trail/errors.rb +22 -0
  107. data/lib/aws/cloud_watch.rb +118 -0
  108. data/lib/aws/cloud_watch/alarm.rb +293 -0
  109. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  110. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  111. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  112. data/lib/aws/cloud_watch/client.rb +40 -0
  113. data/lib/aws/cloud_watch/config.rb +18 -0
  114. data/lib/aws/cloud_watch/errors.rb +22 -0
  115. data/lib/aws/cloud_watch/metric.rb +135 -0
  116. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  117. data/lib/aws/cloud_watch/metric_collection.rb +129 -0
  118. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  119. data/lib/aws/core.rb +716 -0
  120. data/lib/aws/core/async_handle.rb +90 -0
  121. data/lib/aws/core/cacheable.rb +77 -0
  122. data/lib/aws/core/client.rb +787 -0
  123. data/lib/aws/core/collection.rb +263 -0
  124. data/lib/aws/core/collection/simple.rb +82 -0
  125. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  126. data/lib/aws/core/collection/with_next_token.rb +97 -0
  127. data/lib/aws/core/configuration.rb +542 -0
  128. data/lib/aws/core/credential_providers.rb +639 -0
  129. data/lib/aws/core/data.rb +247 -0
  130. data/lib/aws/core/deprecations.rb +84 -0
  131. data/lib/aws/core/endpoints.rb +37 -0
  132. data/lib/aws/core/http/connection_pool.rb +369 -0
  133. data/lib/aws/core/http/curb_handler.rb +148 -0
  134. data/lib/aws/core/http/handler.rb +89 -0
  135. data/lib/aws/core/http/net_http_handler.rb +144 -0
  136. data/lib/aws/core/http/patch.rb +102 -0
  137. data/lib/aws/core/http/request.rb +259 -0
  138. data/lib/aws/core/http/response.rb +81 -0
  139. data/lib/aws/core/indifferent_hash.rb +88 -0
  140. data/lib/aws/core/inflection.rb +56 -0
  141. data/lib/aws/core/ini_parser.rb +42 -0
  142. data/lib/aws/core/json_client.rb +47 -0
  143. data/lib/aws/core/json_parser.rb +76 -0
  144. data/lib/aws/core/json_request_builder.rb +35 -0
  145. data/lib/aws/core/json_response_parser.rb +79 -0
  146. data/lib/aws/core/lazy_error_classes.rb +108 -0
  147. data/lib/aws/core/log_formatter.rb +428 -0
  148. data/lib/aws/core/managed_file.rb +32 -0
  149. data/lib/aws/core/meta_utils.rb +45 -0
  150. data/lib/aws/core/model.rb +62 -0
  151. data/lib/aws/core/naming.rb +30 -0
  152. data/lib/aws/core/option_grammar.rb +738 -0
  153. data/lib/aws/core/options/json_serializer.rb +82 -0
  154. data/lib/aws/core/options/validator.rb +155 -0
  155. data/lib/aws/core/options/xml_serializer.rb +118 -0
  156. data/lib/aws/core/page_result.rb +75 -0
  157. data/lib/aws/core/policy.rb +941 -0
  158. data/lib/aws/core/query_client.rb +41 -0
  159. data/lib/aws/core/query_error_parser.rb +24 -0
  160. data/lib/aws/core/query_request_builder.rb +47 -0
  161. data/lib/aws/core/query_response_parser.rb +35 -0
  162. data/lib/aws/core/region.rb +85 -0
  163. data/lib/aws/core/region_collection.rb +80 -0
  164. data/lib/aws/core/resource.rb +413 -0
  165. data/lib/aws/core/resource_cache.rb +40 -0
  166. data/lib/aws/core/response.rb +215 -0
  167. data/lib/aws/core/response_cache.rb +50 -0
  168. data/lib/aws/core/rest_error_parser.rb +24 -0
  169. data/lib/aws/core/rest_json_client.rb +40 -0
  170. data/lib/aws/core/rest_request_builder.rb +154 -0
  171. data/lib/aws/core/rest_response_parser.rb +66 -0
  172. data/lib/aws/core/rest_xml_client.rb +47 -0
  173. data/lib/aws/core/service_interface.rb +83 -0
  174. data/lib/aws/core/signers/base.rb +46 -0
  175. data/lib/aws/core/signers/cloud_front.rb +56 -0
  176. data/lib/aws/core/signers/s3.rb +159 -0
  177. data/lib/aws/core/signers/version_2.rb +72 -0
  178. data/lib/aws/core/signers/version_3.rb +86 -0
  179. data/lib/aws/core/signers/version_3_https.rb +61 -0
  180. data/lib/aws/core/signers/version_4.rb +228 -0
  181. data/lib/aws/core/signers/version_4/chunk_signed_stream.rb +191 -0
  182. data/lib/aws/core/uri_escape.rb +44 -0
  183. data/lib/aws/core/xml/frame.rb +245 -0
  184. data/lib/aws/core/xml/frame_stack.rb +85 -0
  185. data/lib/aws/core/xml/grammar.rb +307 -0
  186. data/lib/aws/core/xml/parser.rb +70 -0
  187. data/lib/aws/core/xml/root_frame.rb +65 -0
  188. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  189. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +56 -0
  190. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  191. data/lib/aws/core/xml/sax_handlers/rexml.rb +47 -0
  192. data/lib/aws/core/xml/stub.rb +123 -0
  193. data/lib/aws/data_pipeline.rb +72 -0
  194. data/lib/aws/data_pipeline/client.rb +36 -0
  195. data/lib/aws/data_pipeline/config.rb +18 -0
  196. data/lib/aws/data_pipeline/errors.rb +20 -0
  197. data/lib/aws/direct_connect.rb +73 -0
  198. data/lib/aws/direct_connect/client.rb +36 -0
  199. data/lib/aws/direct_connect/config.rb +18 -0
  200. data/lib/aws/direct_connect/errors.rb +22 -0
  201. data/lib/aws/dynamo_db.rb +230 -0
  202. data/lib/aws/dynamo_db/attribute_collection.rb +456 -0
  203. data/lib/aws/dynamo_db/batch_get.rb +213 -0
  204. data/lib/aws/dynamo_db/batch_write.rb +254 -0
  205. data/lib/aws/dynamo_db/binary.rb +35 -0
  206. data/lib/aws/dynamo_db/client.rb +129 -0
  207. data/lib/aws/dynamo_db/client/v20111205.rb +1266 -0
  208. data/lib/aws/dynamo_db/client/v20120810.rb +1409 -0
  209. data/lib/aws/dynamo_db/client_v2.rb +44 -0
  210. data/lib/aws/dynamo_db/config.rb +24 -0
  211. data/lib/aws/dynamo_db/errors.rb +20 -0
  212. data/lib/aws/dynamo_db/expectations.rb +40 -0
  213. data/lib/aws/dynamo_db/item.rb +133 -0
  214. data/lib/aws/dynamo_db/item_collection.rb +856 -0
  215. data/lib/aws/dynamo_db/item_data.rb +31 -0
  216. data/lib/aws/dynamo_db/keys.rb +41 -0
  217. data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
  218. data/lib/aws/dynamo_db/resource.rb +33 -0
  219. data/lib/aws/dynamo_db/table.rb +492 -0
  220. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  221. data/lib/aws/dynamo_db/types.rb +111 -0
  222. data/lib/aws/ec2.rb +428 -0
  223. data/lib/aws/ec2/attachment.rb +135 -0
  224. data/lib/aws/ec2/attachment_collection.rb +54 -0
  225. data/lib/aws/ec2/availability_zone.rb +86 -0
  226. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  227. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  228. data/lib/aws/ec2/client.rb +154 -0
  229. data/lib/aws/ec2/collection.rb +36 -0
  230. data/lib/aws/ec2/config.rb +21 -0
  231. data/lib/aws/ec2/customer_gateway.rb +90 -0
  232. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  233. data/lib/aws/ec2/dhcp_options.rb +106 -0
  234. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  235. data/lib/aws/ec2/elastic_ip.rb +209 -0
  236. data/lib/aws/ec2/elastic_ip_collection.rb +93 -0
  237. data/lib/aws/ec2/errors.rb +32 -0
  238. data/lib/aws/ec2/export_task.rb +120 -0
  239. data/lib/aws/ec2/export_task_collection.rb +67 -0
  240. data/lib/aws/ec2/filtered_collection.rb +87 -0
  241. data/lib/aws/ec2/has_permissions.rb +44 -0
  242. data/lib/aws/ec2/image.rb +270 -0
  243. data/lib/aws/ec2/image_collection.rb +219 -0
  244. data/lib/aws/ec2/instance.rb +803 -0
  245. data/lib/aws/ec2/instance_collection.rb +402 -0
  246. data/lib/aws/ec2/internet_gateway.rb +122 -0
  247. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  248. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  249. data/lib/aws/ec2/key_pair.rb +82 -0
  250. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  251. data/lib/aws/ec2/network_acl.rb +256 -0
  252. data/lib/aws/ec2/network_acl/association.rb +56 -0
  253. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  254. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  255. data/lib/aws/ec2/network_interface.rb +237 -0
  256. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  257. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  258. data/lib/aws/ec2/permission_collection.rb +174 -0
  259. data/lib/aws/ec2/region.rb +106 -0
  260. data/lib/aws/ec2/region_collection.rb +51 -0
  261. data/lib/aws/ec2/reserved_instances.rb +57 -0
  262. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  263. data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
  264. data/lib/aws/ec2/reserved_instances_offering_collection.rb +45 -0
  265. data/lib/aws/ec2/resource.rb +161 -0
  266. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  267. data/lib/aws/ec2/route_table.rb +205 -0
  268. data/lib/aws/ec2/route_table/association.rb +119 -0
  269. data/lib/aws/ec2/route_table/route.rb +119 -0
  270. data/lib/aws/ec2/route_table_collection.rb +72 -0
  271. data/lib/aws/ec2/security_group.rb +482 -0
  272. data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
  273. data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
  274. data/lib/aws/ec2/security_group_collection.rb +133 -0
  275. data/lib/aws/ec2/snapshot.rb +143 -0
  276. data/lib/aws/ec2/snapshot_collection.rb +131 -0
  277. data/lib/aws/ec2/subnet.rb +161 -0
  278. data/lib/aws/ec2/subnet_collection.rb +119 -0
  279. data/lib/aws/ec2/tag.rb +81 -0
  280. data/lib/aws/ec2/tag_collection.rb +107 -0
  281. data/lib/aws/ec2/tagged_collection.rb +67 -0
  282. data/lib/aws/ec2/tagged_item.rb +85 -0
  283. data/lib/aws/ec2/volume.rb +185 -0
  284. data/lib/aws/ec2/volume_collection.rb +102 -0
  285. data/lib/aws/ec2/vpc.rb +174 -0
  286. data/lib/aws/ec2/vpc_collection.rb +70 -0
  287. data/lib/aws/ec2/vpn_connection.rb +99 -0
  288. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  289. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  290. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  291. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  292. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  293. data/lib/aws/elastic_beanstalk.rb +49 -0
  294. data/lib/aws/elastic_beanstalk/client.rb +36 -0
  295. data/lib/aws/elastic_beanstalk/config.rb +18 -0
  296. data/lib/aws/elastic_beanstalk/errors.rb +22 -0
  297. data/lib/aws/elastic_transcoder.rb +29 -0
  298. data/lib/aws/elastic_transcoder/client.rb +48 -0
  299. data/lib/aws/elastic_transcoder/config.rb +18 -0
  300. data/lib/aws/elastic_transcoder/errors.rb +23 -0
  301. data/lib/aws/elasticache.rb +49 -0
  302. data/lib/aws/elasticache/client.rb +41 -0
  303. data/lib/aws/elasticache/config.rb +18 -0
  304. data/lib/aws/elasticache/errors.rb +22 -0
  305. data/lib/aws/elb.rb +66 -0
  306. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  307. data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
  308. data/lib/aws/elb/client.rb +35 -0
  309. data/lib/aws/elb/config.rb +18 -0
  310. data/lib/aws/elb/errors.rb +26 -0
  311. data/lib/aws/elb/instance_collection.rb +168 -0
  312. data/lib/aws/elb/listener.rb +190 -0
  313. data/lib/aws/elb/listener_collection.rb +113 -0
  314. data/lib/aws/elb/listener_opts.rb +45 -0
  315. data/lib/aws/elb/load_balancer.rb +280 -0
  316. data/lib/aws/elb/load_balancer_collection.rb +146 -0
  317. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  318. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  319. data/lib/aws/emr.rb +87 -0
  320. data/lib/aws/emr/client.rb +35 -0
  321. data/lib/aws/emr/config.rb +18 -0
  322. data/lib/aws/emr/errors.rb +22 -0
  323. data/lib/aws/emr/instance_group.rb +138 -0
  324. data/lib/aws/emr/instance_group_collection.rb +82 -0
  325. data/lib/aws/emr/job_flow.rb +307 -0
  326. data/lib/aws/emr/job_flow_collection.rb +183 -0
  327. data/lib/aws/errors.rb +162 -0
  328. data/lib/aws/glacier.rb +79 -0
  329. data/lib/aws/glacier/archive.rb +56 -0
  330. data/lib/aws/glacier/archive_collection.rb +146 -0
  331. data/lib/aws/glacier/client.rb +49 -0
  332. data/lib/aws/glacier/config.rb +19 -0
  333. data/lib/aws/glacier/errors.rb +22 -0
  334. data/lib/aws/glacier/resource.rb +30 -0
  335. data/lib/aws/glacier/vault.rb +145 -0
  336. data/lib/aws/glacier/vault_collection.rb +75 -0
  337. data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
  338. data/lib/aws/iam.rb +408 -0
  339. data/lib/aws/iam/access_key.rb +185 -0
  340. data/lib/aws/iam/access_key_collection.rb +128 -0
  341. data/lib/aws/iam/account_alias_collection.rb +79 -0
  342. data/lib/aws/iam/client.rb +49 -0
  343. data/lib/aws/iam/collection.rb +83 -0
  344. data/lib/aws/iam/config.rb +18 -0
  345. data/lib/aws/iam/errors.rb +22 -0
  346. data/lib/aws/iam/group.rb +111 -0
  347. data/lib/aws/iam/group_collection.rb +132 -0
  348. data/lib/aws/iam/group_policy_collection.rb +47 -0
  349. data/lib/aws/iam/group_user_collection.rb +84 -0
  350. data/lib/aws/iam/login_profile.rb +111 -0
  351. data/lib/aws/iam/mfa_device.rb +52 -0
  352. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  353. data/lib/aws/iam/policy.rb +46 -0
  354. data/lib/aws/iam/policy_collection.rb +188 -0
  355. data/lib/aws/iam/resource.rb +62 -0
  356. data/lib/aws/iam/server_certificate.rb +148 -0
  357. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  358. data/lib/aws/iam/signing_certificate.rb +186 -0
  359. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  360. data/lib/aws/iam/user.rb +200 -0
  361. data/lib/aws/iam/user_collection.rb +133 -0
  362. data/lib/aws/iam/user_group_collection.rb +98 -0
  363. data/lib/aws/iam/user_policy.rb +90 -0
  364. data/lib/aws/iam/user_policy_collection.rb +45 -0
  365. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  366. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  367. data/lib/aws/import_export.rb +73 -0
  368. data/lib/aws/import_export/client.rb +35 -0
  369. data/lib/aws/import_export/config.rb +19 -0
  370. data/lib/aws/import_export/errors.rb +22 -0
  371. data/lib/aws/kinesis.rb +53 -0
  372. data/lib/aws/kinesis/client.rb +35 -0
  373. data/lib/aws/kinesis/config.rb +18 -0
  374. data/lib/aws/kinesis/errors.rb +20 -0
  375. data/lib/aws/ops_works.rb +29 -0
  376. data/lib/aws/ops_works/client.rb +35 -0
  377. data/lib/aws/ops_works/config.rb +18 -0
  378. data/lib/aws/ops_works/errors.rb +20 -0
  379. data/lib/aws/rails.rb +195 -0
  380. data/lib/aws/rds.rb +70 -0
  381. data/lib/aws/rds/client.rb +42 -0
  382. data/lib/aws/rds/config.rb +18 -0
  383. data/lib/aws/rds/db_instance.rb +215 -0
  384. data/lib/aws/rds/db_instance_collection.rb +75 -0
  385. data/lib/aws/rds/db_snapshot.rb +163 -0
  386. data/lib/aws/rds/db_snapshot_collection.rb +89 -0
  387. data/lib/aws/rds/errors.rb +22 -0
  388. data/lib/aws/record.rb +139 -0
  389. data/lib/aws/record/abstract_base.rb +689 -0
  390. data/lib/aws/record/attributes.rb +388 -0
  391. data/lib/aws/record/conversion.rb +38 -0
  392. data/lib/aws/record/dirty_tracking.rb +287 -0
  393. data/lib/aws/record/errors.rb +143 -0
  394. data/lib/aws/record/exceptions.rb +51 -0
  395. data/lib/aws/record/hash_model.rb +204 -0
  396. data/lib/aws/record/hash_model/attributes.rb +195 -0
  397. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  398. data/lib/aws/record/hash_model/scope.rb +108 -0
  399. data/lib/aws/record/model.rb +453 -0
  400. data/lib/aws/record/model/attributes.rb +377 -0
  401. data/lib/aws/record/model/finder_methods.rb +232 -0
  402. data/lib/aws/record/model/scope.rb +212 -0
  403. data/lib/aws/record/naming.rb +31 -0
  404. data/lib/aws/record/scope.rb +203 -0
  405. data/lib/aws/record/validations.rb +694 -0
  406. data/lib/aws/record/validator.rb +246 -0
  407. data/lib/aws/record/validators/acceptance.rb +49 -0
  408. data/lib/aws/record/validators/block.rb +36 -0
  409. data/lib/aws/record/validators/confirmation.rb +41 -0
  410. data/lib/aws/record/validators/count.rb +106 -0
  411. data/lib/aws/record/validators/exclusion.rb +41 -0
  412. data/lib/aws/record/validators/format.rb +55 -0
  413. data/lib/aws/record/validators/inclusion.rb +54 -0
  414. data/lib/aws/record/validators/length.rb +105 -0
  415. data/lib/aws/record/validators/method.rb +31 -0
  416. data/lib/aws/record/validators/numericality.rb +136 -0
  417. data/lib/aws/record/validators/presence.rb +43 -0
  418. data/lib/aws/redshift.rb +51 -0
  419. data/lib/aws/redshift/client.rb +35 -0
  420. data/lib/aws/redshift/config.rb +18 -0
  421. data/lib/aws/redshift/errors.rb +22 -0
  422. data/lib/aws/route_53.rb +86 -0
  423. data/lib/aws/route_53/change_batch.rb +161 -0
  424. data/lib/aws/route_53/change_info.rb +72 -0
  425. data/lib/aws/route_53/client.rb +38 -0
  426. data/lib/aws/route_53/config.rb +18 -0
  427. data/lib/aws/route_53/errors.rb +22 -0
  428. data/lib/aws/route_53/hosted_zone.rb +134 -0
  429. data/lib/aws/route_53/hosted_zone_collection.rb +101 -0
  430. data/lib/aws/route_53/resource_record_set.rb +251 -0
  431. data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
  432. data/lib/aws/s3.rb +156 -0
  433. data/lib/aws/s3/access_control_list.rb +265 -0
  434. data/lib/aws/s3/acl_object.rb +264 -0
  435. data/lib/aws/s3/acl_options.rb +204 -0
  436. data/lib/aws/s3/bucket.rb +742 -0
  437. data/lib/aws/s3/bucket_collection.rb +162 -0
  438. data/lib/aws/s3/bucket_lifecycle_configuration.rb +473 -0
  439. data/lib/aws/s3/bucket_tag_collection.rb +111 -0
  440. data/lib/aws/s3/bucket_version_collection.rb +79 -0
  441. data/lib/aws/s3/cipher_io.rb +120 -0
  442. data/lib/aws/s3/client.rb +2067 -0
  443. data/lib/aws/s3/client/xml.rb +266 -0
  444. data/lib/aws/s3/config.rb +48 -0
  445. data/lib/aws/s3/cors_rule.rb +108 -0
  446. data/lib/aws/s3/cors_rule_collection.rb +194 -0
  447. data/lib/aws/s3/data_options.rb +191 -0
  448. data/lib/aws/s3/encryption_utils.rb +146 -0
  449. data/lib/aws/s3/errors.rb +94 -0
  450. data/lib/aws/s3/multipart_upload.rb +353 -0
  451. data/lib/aws/s3/multipart_upload_collection.rb +76 -0
  452. data/lib/aws/s3/object_collection.rb +353 -0
  453. data/lib/aws/s3/object_metadata.rb +103 -0
  454. data/lib/aws/s3/object_upload_collection.rb +77 -0
  455. data/lib/aws/s3/object_version.rb +154 -0
  456. data/lib/aws/s3/object_version_collection.rb +89 -0
  457. data/lib/aws/s3/paginated_collection.rb +75 -0
  458. data/lib/aws/s3/policy.rb +74 -0
  459. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  460. data/lib/aws/s3/prefixed_collection.rb +85 -0
  461. data/lib/aws/s3/presign_v4.rb +136 -0
  462. data/lib/aws/s3/presigned_post.rb +554 -0
  463. data/lib/aws/s3/request.rb +62 -0
  464. data/lib/aws/s3/s3_object.rb +1784 -0
  465. data/lib/aws/s3/tree.rb +116 -0
  466. data/lib/aws/s3/tree/branch_node.rb +68 -0
  467. data/lib/aws/s3/tree/child_collection.rb +104 -0
  468. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  469. data/lib/aws/s3/tree/node.rb +22 -0
  470. data/lib/aws/s3/tree/parent.rb +87 -0
  471. data/lib/aws/s3/uploaded_part.rb +82 -0
  472. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  473. data/lib/aws/s3/website_configuration.rb +102 -0
  474. data/lib/aws/simple_db.rb +218 -0
  475. data/lib/aws/simple_db/attribute.rb +156 -0
  476. data/lib/aws/simple_db/attribute_collection.rb +240 -0
  477. data/lib/aws/simple_db/client.rb +67 -0
  478. data/lib/aws/simple_db/config.rb +20 -0
  479. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  480. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  481. data/lib/aws/simple_db/domain.rb +123 -0
  482. data/lib/aws/simple_db/domain_collection.rb +86 -0
  483. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  484. data/lib/aws/simple_db/errors.rb +55 -0
  485. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  486. data/lib/aws/simple_db/item.rb +93 -0
  487. data/lib/aws/simple_db/item_collection.rb +654 -0
  488. data/lib/aws/simple_db/item_data.rb +73 -0
  489. data/lib/aws/simple_db/put_attributes.rb +60 -0
  490. data/lib/aws/simple_email_service.rb +443 -0
  491. data/lib/aws/simple_email_service/client.rb +37 -0
  492. data/lib/aws/simple_email_service/config.rb +18 -0
  493. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  494. data/lib/aws/simple_email_service/errors.rb +22 -0
  495. data/lib/aws/simple_email_service/identity.rb +230 -0
  496. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  497. data/lib/aws/simple_email_service/quotas.rb +66 -0
  498. data/lib/aws/simple_workflow.rb +227 -0
  499. data/lib/aws/simple_workflow/activity_task.rb +178 -0
  500. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  501. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  502. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  503. data/lib/aws/simple_workflow/client.rb +69 -0
  504. data/lib/aws/simple_workflow/config.rb +18 -0
  505. data/lib/aws/simple_workflow/count.rb +49 -0
  506. data/lib/aws/simple_workflow/decision_task.rb +603 -0
  507. data/lib/aws/simple_workflow/decision_task_collection.rb +223 -0
  508. data/lib/aws/simple_workflow/domain.rb +122 -0
  509. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  510. data/lib/aws/simple_workflow/errors.rb +20 -0
  511. data/lib/aws/simple_workflow/history_event.rb +276 -0
  512. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  513. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  514. data/lib/aws/simple_workflow/resource.rb +94 -0
  515. data/lib/aws/simple_workflow/type.rb +89 -0
  516. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  517. data/lib/aws/simple_workflow/workflow_execution.rb +384 -0
  518. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  519. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  520. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  521. data/lib/aws/sns.rb +76 -0
  522. data/lib/aws/sns/client.rb +35 -0
  523. data/lib/aws/sns/config.rb +18 -0
  524. data/lib/aws/sns/errors.rb +22 -0
  525. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  526. data/lib/aws/sns/message.rb +204 -0
  527. data/lib/aws/sns/originators/from_auto_scaling.rb +68 -0
  528. data/lib/aws/sns/policy.rb +47 -0
  529. data/lib/aws/sns/subscription.rb +165 -0
  530. data/lib/aws/sns/subscription_collection.rb +78 -0
  531. data/lib/aws/sns/topic.rb +403 -0
  532. data/lib/aws/sns/topic_collection.rb +62 -0
  533. data/lib/aws/sns/topic_subscription_collection.rb +54 -0
  534. data/lib/aws/sqs.rb +80 -0
  535. data/lib/aws/sqs/client.rb +53 -0
  536. data/lib/aws/sqs/config.rb +20 -0
  537. data/lib/aws/sqs/errors.rb +125 -0
  538. data/lib/aws/sqs/policy.rb +48 -0
  539. data/lib/aws/sqs/queue.rb +856 -0
  540. data/lib/aws/sqs/queue_collection.rb +186 -0
  541. data/lib/aws/sqs/received_message.rb +190 -0
  542. data/lib/aws/sqs/received_sns_message.rb +116 -0
  543. data/lib/aws/storage_gateway.rb +72 -0
  544. data/lib/aws/storage_gateway/client.rb +42 -0
  545. data/lib/aws/storage_gateway/config.rb +18 -0
  546. data/lib/aws/storage_gateway/errors.rb +22 -0
  547. data/lib/aws/sts.rb +164 -0
  548. data/lib/aws/sts/client.rb +55 -0
  549. data/lib/aws/sts/config.rb +18 -0
  550. data/lib/aws/sts/errors.rb +22 -0
  551. data/lib/aws/sts/federated_session.rb +56 -0
  552. data/lib/aws/sts/policy.rb +30 -0
  553. data/lib/aws/sts/session.rb +48 -0
  554. data/lib/aws/support.rb +29 -0
  555. data/lib/aws/support/client.rb +35 -0
  556. data/lib/aws/support/config.rb +18 -0
  557. data/lib/aws/support/errors.rb +20 -0
  558. data/lib/aws/version.rb +17 -0
  559. data/rails/init.rb +15 -0
  560. metadata +634 -0
@@ -0,0 +1,639 @@
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
+ require 'set'
15
+ require 'net/http'
16
+ require 'timeout'
17
+ require 'thread'
18
+ require 'time'
19
+ require 'json'
20
+
21
+ module AWS
22
+ module Core
23
+ module CredentialProviders
24
+
25
+ # This module is mixed into the various credential provider
26
+ # classes. It provides a unified interface for getting
27
+ # credentials and refreshing them.
28
+ module Provider
29
+
30
+ # The list of possible keys in the hash returned by {#credentials}.
31
+ KEYS = Set[:access_key_id, :secret_access_key, :session_token]
32
+
33
+ # @return [Hash] Returns a hash of credentials containg at least
34
+ # the `:access_key_id` and `:secret_access_key`. The hash may
35
+ # also contain a `:session_token`.
36
+ #
37
+ # @raise [Errors::MissingCredentialsError] Raised when the
38
+ # `:access_key_id` or the `:secret_access_key` can not be found.
39
+ #
40
+ def credentials
41
+ raise Errors::MissingCredentialsError unless set?
42
+ @cached_credentials.dup
43
+ end
44
+
45
+ # @return [Boolean] Returns true if has credentials and it contains
46
+ # at least the `:access_key_id` and `:secret_access_key`.
47
+ #
48
+ def set?
49
+ @cache_mutex ||= Mutex.new
50
+ unless @cached_credentials
51
+ @cache_mutex.synchronize do
52
+ @cached_credentials ||= get_credentials
53
+ end
54
+ end
55
+ !!(@cached_credentials[:access_key_id] &&
56
+ @cached_credentials[:secret_access_key])
57
+ end
58
+
59
+ # @return [String] Returns the AWS access key id.
60
+ # @raise (see #credentials)
61
+ def access_key_id
62
+ credentials[:access_key_id]
63
+ end
64
+
65
+ # @return [String] Returns the AWS secret access key.
66
+ # @raise (see #credentials)
67
+ def secret_access_key
68
+ credentials[:secret_access_key]
69
+ end
70
+
71
+ # @return [String,nil] Returns the AWS session token or nil if these
72
+ # are not session credentials.
73
+ # @raise (see #credentials)
74
+ def session_token
75
+ credentials[:session_token]
76
+ end
77
+
78
+ # Clears out cached/memoized credentials. Causes the provider
79
+ # to refetch credentials from the source.
80
+ # @return [nil]
81
+ def refresh
82
+ @cached_credentials = nil
83
+ end
84
+
85
+ protected
86
+
87
+ # This method is called on a credential provider to fetch
88
+ # credentials. The credentials hash returned from this
89
+ # method will be cached until the client calls {#refresh}.
90
+ # @return [Hash]
91
+ def get_credentials
92
+ # should be defined in provider classes.
93
+ raise NotImplementedError
94
+ end
95
+
96
+ end
97
+
98
+ # The default credential provider makes a best effort to
99
+ # locate your AWS credentials. It checks a variety of locations
100
+ # in the following order:
101
+ #
102
+ # * Static credentials from AWS.config (e.g. AWS.config.access_key_id,
103
+ # AWS.config.secret_access_key)
104
+ #
105
+ # * The environment (e.g. ENV['AWS_ACCESS_KEY_ID'] or
106
+ # ENV['AMAZON_ACCESS_KEY_ID'])
107
+ #
108
+ # * EC2 metadata service (checks for credentials provided by
109
+ # roles for instances).
110
+ #
111
+ class DefaultProvider
112
+
113
+ include Provider
114
+
115
+ # (see StaticProvider#new)
116
+ def initialize static_credentials = {}
117
+ @providers = []
118
+ @providers << StaticProvider.new(static_credentials)
119
+ @providers << ENVProvider.new('AWS')
120
+ @providers << ENVProvider.new('AWS', :access_key_id => 'ACCESS_KEY', :secret_access_key => 'SECRET_KEY', :session_token => 'SESSION_TOKEN')
121
+ @providers << ENVProvider.new('AMAZON')
122
+ begin
123
+ if Dir.home
124
+ @providers << SharedCredentialFileProvider.new
125
+ end
126
+ rescue ArgumentError, NoMethodError
127
+ end
128
+ @providers << EC2Provider.new
129
+ end
130
+
131
+ # @return [Array<Provider>]
132
+ attr_reader :providers
133
+
134
+ def credentials
135
+ providers.each do |provider|
136
+ if provider.set?
137
+ return provider.credentials
138
+ end
139
+ end
140
+ raise Errors::MissingCredentialsError
141
+ end
142
+
143
+ def set?
144
+ providers.any?(&:set?)
145
+ end
146
+
147
+ def refresh
148
+ providers.each do |provider|
149
+ provider.refresh
150
+ end
151
+ end
152
+ end
153
+
154
+ # Static credentials are provided directly to config via
155
+ # `:access_key_id` and `:secret_access_key` (and optionally
156
+ # `:session_token`).
157
+ # @api private
158
+ class StaticProvider
159
+
160
+ include Provider
161
+
162
+ # @param [Hash] static_credentials
163
+ # @option static_credentials [required,String] :access_key_id
164
+ # @option static_credentials [required,String] :secret_access_key
165
+ # @option static_credentials [String] :session_token
166
+ def initialize static_credentials = {}
167
+
168
+ static_credentials.keys.each do |opt_name|
169
+ unless KEYS.include?(opt_name)
170
+ raise ArgumentError, "invalid option #{opt_name.inspect}"
171
+ end
172
+ end
173
+
174
+ @static_credentials = {}
175
+ KEYS.each do |opt_name|
176
+ if opt_value = static_credentials[opt_name]
177
+ @static_credentials[opt_name] = opt_value
178
+ end
179
+ end
180
+
181
+ end
182
+
183
+ # (see Provider#get_credentials)
184
+ def get_credentials
185
+ @static_credentials
186
+ end
187
+
188
+ end
189
+
190
+ # Fetches credentials from the environment (ENV). You construct
191
+ # an ENV provider with a prefix. Given the prefix "AWS"
192
+ # ENV will be checked for the following keys:
193
+ #
194
+ # * AWS_ACCESS_KEY_ID
195
+ # * AWS_SECRET_ACCESS_KEY
196
+ # * AWS_SESSION_TOKEN (optional)
197
+ #
198
+ class ENVProvider
199
+
200
+ include Provider
201
+
202
+ # @param [String] prefix The prefix to apply to the ENV variable.
203
+ def initialize(prefix, suffixes=Hash[KEYS.map{|key| [key, key.to_s.upcase]}])
204
+ @prefix = prefix
205
+ @suffixes = suffixes
206
+ end
207
+
208
+ # @return [String]
209
+ attr_reader :prefix
210
+
211
+ # (see Provider#get_credentials)
212
+ def get_credentials
213
+ credentials = {}
214
+ KEYS.each do |key|
215
+ if value = ENV["#{@prefix}_#{@suffixes[key]}"]
216
+ credentials[key] = value
217
+ end
218
+ end
219
+
220
+ # Merge in CredentialFileProvider credentials if
221
+ # a #{@prefix}_CREDENTIAL_FILE environment(ENV) variable is set
222
+ if ENV["#{@prefix}_CREDENTIAL_FILE"]
223
+ credentials.merge! CredentialFileProvider.new(ENV["#{@prefix}_CREDENTIAL_FILE"]).get_credentials
224
+ end
225
+
226
+ credentials
227
+ end
228
+
229
+ end
230
+
231
+ # This credential provider gets credentials from a credential file
232
+ # with the following format:
233
+ #
234
+ # AWSAccessKeyId=your_key
235
+ # AWSSecretKey=your_secret
236
+ #
237
+ class CredentialFileProvider
238
+
239
+ include Provider
240
+
241
+ # Map of AWS credential file key names to accepted provider key names
242
+ CREDENTIAL_FILE_KEY_MAP = { "AWSAccessKeyId" => :access_key_id, "AWSSecretKey" => :secret_access_key }
243
+
244
+ attr_reader :credential_file
245
+
246
+ # @param [String] credential_file The file path of a credential file
247
+ def initialize(credential_file)
248
+ @credential_file = credential_file
249
+ end
250
+
251
+ # (see Provider#get_credentials)
252
+ def get_credentials
253
+ credentials = {}
254
+ if File.exist?(credential_file) && File.readable?(credential_file)
255
+ File.open(credential_file, 'r') do |fh|
256
+ fh.each_line do |line|
257
+ key, val = line.strip.split(%r(\s*=\s*))
258
+ if key && val && CREDENTIAL_FILE_KEY_MAP[key] && KEYS.include?(CREDENTIAL_FILE_KEY_MAP[key])
259
+ credentials[CREDENTIAL_FILE_KEY_MAP[key]] = val
260
+ end
261
+ end
262
+ fh.close
263
+ end
264
+ end
265
+ credentials
266
+ end
267
+ end
268
+
269
+ class SharedCredentialFileProvider
270
+
271
+ include Provider
272
+
273
+ def shared_credential_file_path
274
+ if RUBY_VERSION < '1.9'
275
+ raise ArgumentError(
276
+ "Must specify the :path to your shared credential file when using"\
277
+ " Ruby #{RUBY_VERSION}"
278
+ )
279
+ else
280
+ File.join(Dir.home, '.aws', 'credentials')
281
+ end
282
+ end
283
+ # @api private
284
+ KEY_MAP = {
285
+ "aws_access_key_id" => :access_key_id,
286
+ "aws_secret_access_key" => :secret_access_key,
287
+ "aws_session_token" => :session_token,
288
+ }
289
+
290
+ # @option [String] :path
291
+ # @option [String] :profile_name
292
+ def initialize(options = {})
293
+ @path = options[:path] || shared_credential_file_path
294
+ @profile_name = options[:profile_name]
295
+ @profile_name ||= ENV['AWS_PROFILE']
296
+ @profile_name ||= 'default'
297
+ end
298
+
299
+ # @return [String]
300
+ attr_reader :path
301
+
302
+ # @return [String]
303
+ attr_reader :profile_name
304
+
305
+ # (see Provider#get_credentials)
306
+ def get_credentials
307
+ if File.exist?(path) && File.readable?(path)
308
+ load_from_path
309
+ else
310
+ {}
311
+ end
312
+ end
313
+
314
+ private
315
+
316
+ def load_from_path
317
+ profile = load_profile
318
+ KEY_MAP.inject({}) do |credentials, (source, target)|
319
+ credentials[target] = profile[source] if profile.key?(source)
320
+ credentials
321
+ end
322
+ end
323
+
324
+ def load_profile
325
+ ini = IniParser.parse(File.read(path))
326
+ ini[profile_name] || {}
327
+ end
328
+
329
+ end
330
+
331
+ # This credential provider tries to get credentials from the EC2
332
+ # metadata service.
333
+ class EC2Provider
334
+
335
+ # Raised when an http response is recieved with a non 200
336
+ # http status code.
337
+ # @api private
338
+ class FailedRequestError < StandardError; end
339
+
340
+ # These are the errors we trap when attempting to talk to the
341
+ # instance metadata service. Any of these imply the service
342
+ # is not present, no responding or some other non-recoverable
343
+ # error.
344
+ # @api private
345
+ FAILURES = [
346
+ FailedRequestError,
347
+ Errno::EHOSTUNREACH,
348
+ Errno::ECONNREFUSED,
349
+ SocketError,
350
+ Timeout::Error,
351
+ ]
352
+
353
+ include Provider
354
+
355
+ # @param [Hash] options
356
+ # @option options [String] :ip_address ('169.254.169.254')
357
+ # @option options [Integer] :port (80)
358
+ # @option options [Float] :http_open_timeout (1)
359
+ # @option options [Float] :http_read_timeout (1)
360
+ # @option options [Object] :http_debug_output (nil) HTTP wire
361
+ # traces are sent to this object. You can specify something
362
+ # like $stdout.
363
+ def initialize options = {}
364
+ @ip_address = options[:ip_address] || '169.254.169.254'
365
+ @port = options[:port] || 80
366
+ @http_open_timeout = options[:http_open_timeout] || 1
367
+ @http_read_timeout = options[:http_read_timeout] || 1
368
+ @http_debug_output = options[:http_debug_output]
369
+ end
370
+
371
+ # @return [String] Defaults to '169.254.169.254'.
372
+ attr_accessor :ip_address
373
+
374
+ # @return [Integer] Defaults to port 80.
375
+ attr_accessor :port
376
+
377
+ # @return [Float]
378
+ attr_accessor :http_open_timeout
379
+
380
+ # @return [Float]
381
+ attr_accessor :http_read_timeout
382
+
383
+ # @return [Object,nil]
384
+ attr_accessor :http_debug_output
385
+
386
+ # @return [Time,nil]
387
+ attr_accessor :credentials_expiration
388
+
389
+ # Refresh provider if existing credentials will be expired in 5 min
390
+ # @return [Hash] Returns a hash of credentials containg at least
391
+ # the `:access_key_id` and `:secret_access_key`. The hash may
392
+ # also contain a `:session_token`.
393
+ #
394
+ # @raise [Errors::MissingCredentialsError] Raised when the
395
+ # `:access_key_id` or the `:secret_access_key` can not be found.
396
+ #
397
+ def credentials
398
+ if @credentials_expiration && @credentials_expiration.utc <= (Time.now.utc + (15 * 60))
399
+ refresh
400
+ end
401
+ super
402
+ end
403
+
404
+ protected
405
+
406
+ # (see Provider#get_credentials)
407
+ def get_credentials
408
+ begin
409
+
410
+ http = Net::HTTP.new(ip_address, port, nil)
411
+ http.open_timeout = http_open_timeout
412
+ http.read_timeout = http_read_timeout
413
+ http.set_debug_output(http_debug_output) if
414
+ http_debug_output
415
+ http.start
416
+
417
+ # get the first/default instance profile name
418
+ path = '/latest/meta-data/iam/security-credentials/'
419
+ profile_name = get(http, path).lines.map(&:strip).first
420
+
421
+ # get the session details from the instance profile name
422
+ path << profile_name
423
+ session = JSON.parse(get(http, path))
424
+
425
+ http.finish
426
+
427
+ credentials = {}
428
+ credentials[:access_key_id] = session['AccessKeyId']
429
+ credentials[:secret_access_key] = session['SecretAccessKey']
430
+ credentials[:session_token] = session['Token']
431
+ @credentials_expiration = Time.parse(session['Expiration'])
432
+
433
+ credentials
434
+
435
+ rescue *FAILURES => e
436
+ {}
437
+ end
438
+ end
439
+
440
+ # Makes an HTTP Get request with the given path. If a non-200
441
+ # response is received, then a FailedRequestError is raised.
442
+ # a {FailedRequestError} is raised.
443
+ # @param [Net::HTTPSession] session
444
+ # @param [String] path
445
+ # @raise [FailedRequestError]
446
+ # @return [String] Returns the http response body.
447
+ def get session, path
448
+ response = session.request(Net::HTTP::Get.new(path))
449
+ if response.code.to_i == 200
450
+ response.body
451
+ else
452
+ raise FailedRequestError
453
+ end
454
+ end
455
+
456
+ end
457
+
458
+ # # Session Credential Provider
459
+ #
460
+ # The session provider consumes long term credentials (`:access_key_id`
461
+ # and `:secret_access_key`) and requests a session from STS.
462
+ # It then returns the short term credential set from STS.
463
+ #
464
+ # Calling {#refresh} causes the session provider to request a new
465
+ # set of credentials.
466
+ #
467
+ # This session provider is currently only used for DynamoDB which
468
+ # requires session credentials.
469
+ class SessionProvider
470
+
471
+ include Provider
472
+
473
+ @create_mutex = Mutex.new
474
+
475
+ class << self
476
+
477
+ # @param [Hash] long_term_credentials A hash of credentials with
478
+ # `:access_key_id` and `:secret_access_key` (but not
479
+ # `:session_token`).
480
+ def for long_term_credentials
481
+ @create_mutex.synchronize do
482
+ @session_providers ||= {}
483
+ @session_providers[long_term_credentials[:access_key_id]] =
484
+ self.new(long_term_credentials)
485
+ end
486
+ end
487
+
488
+ # Creation of SessionProviders *must* happen behind the mutex and
489
+ # we want to reuse session providers for the same access key id.
490
+ protected :new
491
+
492
+ end
493
+
494
+ # @param [Hash] long_term_credentials A hash of credentials with
495
+ # `:access_key_id` and `:secret_access_key` (but not
496
+ # `:session_token`).
497
+ def initialize long_term_credentials
498
+ @static = StaticProvider.new(long_term_credentials)
499
+ if @static.session_token
500
+ raise ArgumentError, 'invalid option :session_token'
501
+ end
502
+ @session_mutex = Mutex.new
503
+ end
504
+
505
+ # Aliasing the refresh method so we can call it from the refresh
506
+ # method defined in this class.
507
+ alias_method :orig_refresh, :refresh
508
+ protected :orig_refresh
509
+
510
+ # (see Provider#refresh)
511
+ def refresh
512
+ refresh_session
513
+ orig_refresh
514
+ end
515
+
516
+ protected
517
+
518
+ # (see Provider#get_credentials)
519
+ def get_credentials
520
+ session = cached_session
521
+ if session.nil?
522
+ refresh_session
523
+ session = cached_session
524
+ end
525
+ session.credentials
526
+ end
527
+
528
+ # Replaces the cached STS session with a new one.
529
+ # @return [nil]
530
+ def refresh_session
531
+ sts = AWS::STS.new(@static.credentials.merge(:use_ssl => true))
532
+ @session_mutex.synchronize do
533
+ @session = sts.new_session
534
+ end
535
+ nil
536
+ end
537
+
538
+ # @return [nil,STS::Session] Returns nil if a session has not
539
+ # already been started.
540
+ def cached_session
541
+ local_session = nil
542
+ @session_mutex.synchronize do
543
+ local_session = @session
544
+ end
545
+ local_session
546
+ end
547
+
548
+ end
549
+
550
+ # An auto-refreshing credential provider that works by assuming
551
+ # a role via {AWS::STS#assume_role}.
552
+ #
553
+ # provider = AWS::Core::CredentialProviders::AssumeRoleProvider.new(
554
+ # sts: AWS::STS.new(access_key_id:'AKID', secret_access_key:'SECRET'),
555
+ # # assume role options:
556
+ # role_arn: "linked::account::arn",
557
+ # role_session_name: "session-name"
558
+ # )
559
+ #
560
+ # ec2 = AWS::EC2.new(credential_provider:provider)
561
+ #
562
+ # If you omit the `:sts` option, a new {STS} service object will be
563
+ # constructed and it will use the default credential provider
564
+ # from {Aws.config}.
565
+ #
566
+ class AssumeRoleProvider
567
+
568
+ include Provider
569
+
570
+ # @option options [AWS::STS] :sts (STS.new) An instance of {AWS::STS}.
571
+ # This is used to make the API call to assume role.
572
+ # @option options [required, String] :role_arn
573
+ # @option options [required, String] :role_session_name
574
+ # @option options [String] :policy
575
+ # @option options [Integer] :duration_seconds
576
+ # @option options [String] :external_id
577
+ def initialize(options = {})
578
+ @options = options.dup
579
+ @sts = @options.delete(:sts) || STS.new
580
+ end
581
+
582
+ def credentials
583
+ refresh if near_expiration?
584
+ super
585
+ end
586
+
587
+ private
588
+
589
+ def near_expiration?
590
+ @expiration && @expiration.utc <= Time.now.utc + 5 * 60
591
+ end
592
+
593
+ def get_credentials
594
+ role = @sts.assume_role(@options)
595
+ @expiration = role[:credentials][:expiration]
596
+ role[:credentials]
597
+ end
598
+
599
+ end
600
+
601
+ # Returns a set of fake credentials, should only be used for testing.
602
+ class FakeProvider < StaticProvider
603
+
604
+ # @param [Hash] options
605
+ # @option options [Boolean] :with_session_token (false) When `true` a
606
+ # fake session token will also be provided.
607
+ def initialize options = {}
608
+ options[:access_key_id] ||= fake_access_key_id
609
+ options[:secret_access_key] ||= fake_secret_access_key
610
+ if options.delete(:with_session_token)
611
+ options[:session_token] ||= fake_session_token
612
+ end
613
+ super
614
+ end
615
+
616
+ protected
617
+
618
+ def fake_access_key_id
619
+ "AKIA" + random_chars(16).upcase
620
+ end
621
+
622
+ def fake_secret_access_key
623
+ random_chars(40)
624
+ end
625
+
626
+ def fake_session_token
627
+ random_chars(260)
628
+ end
629
+
630
+ def random_chars count
631
+ chars = ('0'..'9').to_a + ('a'..'z').to_a + ('A'..'Z').to_a
632
+ (1..count).map{ chars[rand(chars.size)] }.join
633
+ end
634
+
635
+ end
636
+
637
+ end
638
+ end
639
+ end