aws-sdk 1.0.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.
- data/.yardopts +6 -0
- data/LICENSE.txt +171 -0
- data/NOTICE.txt +2 -0
- data/README.rdoc +189 -0
- data/lib/aws-sdk.rb +14 -0
- data/lib/aws.rb +63 -0
- data/lib/aws/api_config.rb +45 -0
- data/lib/aws/api_config/.document +0 -0
- data/lib/aws/api_config/EC2-2011-02-28.yml +2314 -0
- data/lib/aws/api_config/SNS-2010-03-31.yml +171 -0
- data/lib/aws/api_config/SQS-2009-02-01.yml +161 -0
- data/lib/aws/api_config/SimpleDB-2009-04-15.yml +278 -0
- data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +147 -0
- data/lib/aws/api_config_transform.rb +32 -0
- data/lib/aws/async_handle.rb +90 -0
- data/lib/aws/authorize_v2.rb +37 -0
- data/lib/aws/authorize_v3.rb +37 -0
- data/lib/aws/base_client.rb +524 -0
- data/lib/aws/cacheable.rb +92 -0
- data/lib/aws/common.rb +228 -0
- data/lib/aws/configurable.rb +36 -0
- data/lib/aws/configuration.rb +272 -0
- data/lib/aws/configured_client_methods.rb +81 -0
- data/lib/aws/configured_grammars.rb +65 -0
- data/lib/aws/configured_option_grammars.rb +46 -0
- data/lib/aws/configured_xml_grammars.rb +47 -0
- data/lib/aws/default_signer.rb +38 -0
- data/lib/aws/ec2.rb +321 -0
- data/lib/aws/ec2/attachment.rb +149 -0
- data/lib/aws/ec2/attachment_collection.rb +57 -0
- data/lib/aws/ec2/availability_zone.rb +80 -0
- data/lib/aws/ec2/availability_zone_collection.rb +47 -0
- data/lib/aws/ec2/block_device_mappings.rb +53 -0
- data/lib/aws/ec2/client.rb +54 -0
- data/lib/aws/ec2/client/xml.rb +127 -0
- data/lib/aws/ec2/collection.rb +39 -0
- data/lib/aws/ec2/config_transform.rb +63 -0
- data/lib/aws/ec2/elastic_ip.rb +107 -0
- data/lib/aws/ec2/elastic_ip_collection.rb +85 -0
- data/lib/aws/ec2/errors.rb +29 -0
- data/lib/aws/ec2/filtered_collection.rb +65 -0
- data/lib/aws/ec2/has_permissions.rb +46 -0
- data/lib/aws/ec2/image.rb +245 -0
- data/lib/aws/ec2/image_collection.rb +235 -0
- data/lib/aws/ec2/instance.rb +515 -0
- data/lib/aws/ec2/instance_collection.rb +276 -0
- data/lib/aws/ec2/key_pair.rb +86 -0
- data/lib/aws/ec2/key_pair_collection.rb +102 -0
- data/lib/aws/ec2/permission_collection.rb +177 -0
- data/lib/aws/ec2/region.rb +81 -0
- data/lib/aws/ec2/region_collection.rb +55 -0
- data/lib/aws/ec2/request.rb +27 -0
- data/lib/aws/ec2/reserved_instances.rb +50 -0
- data/lib/aws/ec2/reserved_instances_collection.rb +44 -0
- data/lib/aws/ec2/reserved_instances_offering.rb +55 -0
- data/lib/aws/ec2/reserved_instances_offering_collection.rb +43 -0
- data/lib/aws/ec2/resource.rb +340 -0
- data/lib/aws/ec2/resource_tag_collection.rb +218 -0
- data/lib/aws/ec2/security_group.rb +246 -0
- data/lib/aws/ec2/security_group/ip_permission.rb +70 -0
- data/lib/aws/ec2/security_group/ip_permission_collection.rb +59 -0
- data/lib/aws/ec2/security_group_collection.rb +132 -0
- data/lib/aws/ec2/snapshot.rb +138 -0
- data/lib/aws/ec2/snapshot_collection.rb +90 -0
- data/lib/aws/ec2/tag.rb +88 -0
- data/lib/aws/ec2/tag_collection.rb +114 -0
- data/lib/aws/ec2/tagged_collection.rb +48 -0
- data/lib/aws/ec2/tagged_item.rb +87 -0
- data/lib/aws/ec2/volume.rb +190 -0
- data/lib/aws/ec2/volume_collection.rb +95 -0
- data/lib/aws/errors.rb +129 -0
- data/lib/aws/http/builtin_handler.rb +69 -0
- data/lib/aws/http/curb_handler.rb +123 -0
- data/lib/aws/http/handler.rb +77 -0
- data/lib/aws/http/httparty_handler.rb +61 -0
- data/lib/aws/http/request.rb +136 -0
- data/lib/aws/http/request_param.rb +63 -0
- data/lib/aws/http/response.rb +75 -0
- data/lib/aws/ignore_result_element.rb +38 -0
- data/lib/aws/indifferent_hash.rb +86 -0
- data/lib/aws/inflection.rb +46 -0
- data/lib/aws/lazy_error_classes.rb +64 -0
- data/lib/aws/meta_utils.rb +43 -0
- data/lib/aws/model.rb +57 -0
- data/lib/aws/naming.rb +32 -0
- data/lib/aws/option_grammar.rb +544 -0
- data/lib/aws/policy.rb +912 -0
- data/lib/aws/rails.rb +209 -0
- data/lib/aws/record.rb +79 -0
- data/lib/aws/record/attribute.rb +94 -0
- data/lib/aws/record/attribute_macros.rb +288 -0
- data/lib/aws/record/attributes/boolean.rb +49 -0
- data/lib/aws/record/attributes/datetime.rb +86 -0
- data/lib/aws/record/attributes/float.rb +48 -0
- data/lib/aws/record/attributes/integer.rb +68 -0
- data/lib/aws/record/attributes/sortable_float.rb +60 -0
- data/lib/aws/record/attributes/sortable_integer.rb +95 -0
- data/lib/aws/record/attributes/string.rb +69 -0
- data/lib/aws/record/base.rb +728 -0
- data/lib/aws/record/conversion.rb +38 -0
- data/lib/aws/record/dirty_tracking.rb +286 -0
- data/lib/aws/record/errors.rb +153 -0
- data/lib/aws/record/exceptions.rb +48 -0
- data/lib/aws/record/finder_methods.rb +262 -0
- data/lib/aws/record/naming.rb +31 -0
- data/lib/aws/record/scope.rb +157 -0
- data/lib/aws/record/validations.rb +653 -0
- data/lib/aws/record/validator.rb +237 -0
- data/lib/aws/record/validators/acceptance.rb +51 -0
- data/lib/aws/record/validators/block.rb +38 -0
- data/lib/aws/record/validators/confirmation.rb +43 -0
- data/lib/aws/record/validators/count.rb +108 -0
- data/lib/aws/record/validators/exclusion.rb +43 -0
- data/lib/aws/record/validators/format.rb +57 -0
- data/lib/aws/record/validators/inclusion.rb +56 -0
- data/lib/aws/record/validators/length.rb +107 -0
- data/lib/aws/record/validators/numericality.rb +138 -0
- data/lib/aws/record/validators/presence.rb +45 -0
- data/lib/aws/resource_cache.rb +39 -0
- data/lib/aws/response.rb +113 -0
- data/lib/aws/response_cache.rb +50 -0
- data/lib/aws/s3.rb +109 -0
- data/lib/aws/s3/access_control_list.rb +252 -0
- data/lib/aws/s3/acl_object.rb +266 -0
- data/lib/aws/s3/bucket.rb +320 -0
- data/lib/aws/s3/bucket_collection.rb +122 -0
- data/lib/aws/s3/bucket_version_collection.rb +85 -0
- data/lib/aws/s3/client.rb +999 -0
- data/lib/aws/s3/client/xml.rb +190 -0
- data/lib/aws/s3/data_options.rb +99 -0
- data/lib/aws/s3/errors.rb +43 -0
- data/lib/aws/s3/multipart_upload.rb +318 -0
- data/lib/aws/s3/multipart_upload_collection.rb +78 -0
- data/lib/aws/s3/object_collection.rb +159 -0
- data/lib/aws/s3/object_metadata.rb +67 -0
- data/lib/aws/s3/object_upload_collection.rb +83 -0
- data/lib/aws/s3/object_version.rb +141 -0
- data/lib/aws/s3/object_version_collection.rb +78 -0
- data/lib/aws/s3/paginated_collection.rb +94 -0
- data/lib/aws/s3/policy.rb +76 -0
- data/lib/aws/s3/prefix_and_delimiter_collection.rb +56 -0
- data/lib/aws/s3/prefixed_collection.rb +84 -0
- data/lib/aws/s3/presigned_post.rb +504 -0
- data/lib/aws/s3/request.rb +198 -0
- data/lib/aws/s3/s3_object.rb +794 -0
- data/lib/aws/s3/tree.rb +116 -0
- data/lib/aws/s3/tree/branch_node.rb +71 -0
- data/lib/aws/s3/tree/child_collection.rb +108 -0
- data/lib/aws/s3/tree/leaf_node.rb +99 -0
- data/lib/aws/s3/tree/node.rb +22 -0
- data/lib/aws/s3/tree/parent.rb +90 -0
- data/lib/aws/s3/uploaded_part.rb +82 -0
- data/lib/aws/s3/uploaded_part_collection.rb +86 -0
- data/lib/aws/service_interface.rb +60 -0
- data/lib/aws/simple_db.rb +202 -0
- data/lib/aws/simple_db/attribute.rb +159 -0
- data/lib/aws/simple_db/attribute_collection.rb +227 -0
- data/lib/aws/simple_db/client.rb +52 -0
- data/lib/aws/simple_db/client/options.rb +34 -0
- data/lib/aws/simple_db/client/xml.rb +68 -0
- data/lib/aws/simple_db/consistent_read_option.rb +42 -0
- data/lib/aws/simple_db/delete_attributes.rb +64 -0
- data/lib/aws/simple_db/domain.rb +118 -0
- data/lib/aws/simple_db/domain_collection.rb +116 -0
- data/lib/aws/simple_db/domain_metadata.rb +112 -0
- data/lib/aws/simple_db/errors.rb +46 -0
- data/lib/aws/simple_db/expect_condition_option.rb +45 -0
- data/lib/aws/simple_db/item.rb +84 -0
- data/lib/aws/simple_db/item_collection.rb +594 -0
- data/lib/aws/simple_db/item_data.rb +70 -0
- data/lib/aws/simple_db/put_attributes.rb +62 -0
- data/lib/aws/simple_db/request.rb +27 -0
- data/lib/aws/simple_email_service.rb +373 -0
- data/lib/aws/simple_email_service/client.rb +39 -0
- data/lib/aws/simple_email_service/client/options.rb +24 -0
- data/lib/aws/simple_email_service/client/xml.rb +38 -0
- data/lib/aws/simple_email_service/email_address_collection.rb +66 -0
- data/lib/aws/simple_email_service/errors.rb +29 -0
- data/lib/aws/simple_email_service/quotas.rb +64 -0
- data/lib/aws/simple_email_service/request.rb +27 -0
- data/lib/aws/sns.rb +69 -0
- data/lib/aws/sns/client.rb +37 -0
- data/lib/aws/sns/client/options.rb +24 -0
- data/lib/aws/sns/client/xml.rb +38 -0
- data/lib/aws/sns/errors.rb +29 -0
- data/lib/aws/sns/policy.rb +49 -0
- data/lib/aws/sns/request.rb +27 -0
- data/lib/aws/sns/subscription.rb +100 -0
- data/lib/aws/sns/subscription_collection.rb +84 -0
- data/lib/aws/sns/topic.rb +384 -0
- data/lib/aws/sns/topic_collection.rb +70 -0
- data/lib/aws/sns/topic_subscription_collection.rb +58 -0
- data/lib/aws/sqs.rb +70 -0
- data/lib/aws/sqs/client.rb +38 -0
- data/lib/aws/sqs/client/xml.rb +36 -0
- data/lib/aws/sqs/errors.rb +33 -0
- data/lib/aws/sqs/policy.rb +50 -0
- data/lib/aws/sqs/queue.rb +507 -0
- data/lib/aws/sqs/queue_collection.rb +105 -0
- data/lib/aws/sqs/received_message.rb +184 -0
- data/lib/aws/sqs/received_sns_message.rb +112 -0
- data/lib/aws/sqs/request.rb +44 -0
- data/lib/aws/xml_grammar.rb +923 -0
- data/rails/init.rb +15 -0
- metadata +298 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# Copyright 2011 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 'aws/ec2/resource'
|
|
15
|
+
require 'aws/ec2/tagged_item'
|
|
16
|
+
require 'aws/ec2/security_group/ip_permission'
|
|
17
|
+
require 'aws/ec2/security_group/ip_permission_collection'
|
|
18
|
+
|
|
19
|
+
module AWS
|
|
20
|
+
class EC2
|
|
21
|
+
|
|
22
|
+
# Represents a security group in EC2.
|
|
23
|
+
class SecurityGroup < Resource
|
|
24
|
+
|
|
25
|
+
include TaggedItem
|
|
26
|
+
|
|
27
|
+
def initialize id, options = {}
|
|
28
|
+
@id = id
|
|
29
|
+
@name = options[:name]
|
|
30
|
+
@description = options[:description]
|
|
31
|
+
@owner_id = options[:owner_id]
|
|
32
|
+
super
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# @return [String] The id of the security group.
|
|
36
|
+
attr_reader :id
|
|
37
|
+
|
|
38
|
+
alias_method :group_id, :id
|
|
39
|
+
|
|
40
|
+
# @return [Boolean] True if the security group exists.
|
|
41
|
+
def exists?
|
|
42
|
+
client.describe_security_groups(:filters =>
|
|
43
|
+
[{ :name => "group-id",
|
|
44
|
+
:values => [id] }]).
|
|
45
|
+
security_group_index.key?(id)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# @return [String] The name of the security group.
|
|
49
|
+
def name; end
|
|
50
|
+
describe_call_attribute :group_name, :getter => :name, :memoize => true
|
|
51
|
+
|
|
52
|
+
# @return [String] The id of the owner for this security group.
|
|
53
|
+
def owner_id; end
|
|
54
|
+
describe_call_attribute :owner_id, :memoize => true
|
|
55
|
+
|
|
56
|
+
# @return [String] The short informal description given when the
|
|
57
|
+
# group was created.
|
|
58
|
+
def description; end
|
|
59
|
+
describe_call_attribute :group_description, :getter => :description, :memoize => true
|
|
60
|
+
|
|
61
|
+
describe_call_attribute :ip_permissions, :getter => :ip_permissions_list
|
|
62
|
+
|
|
63
|
+
# @return [SecurityGroup::IpPermissionCollection] Returns a
|
|
64
|
+
# collection of {IpPermission} objects that represents all of
|
|
65
|
+
# the permissions this security group has authorizations for.
|
|
66
|
+
def ip_permissions
|
|
67
|
+
IpPermissionCollection.new(self, :config => config)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Adds ingress rules for ICMP pings. Defaults to 0.0.0.0/0 for
|
|
71
|
+
# the list of allowed IP ranges the ping can come from.
|
|
72
|
+
#
|
|
73
|
+
# security_group.allow_ping # anyone can ping servers in this group
|
|
74
|
+
#
|
|
75
|
+
# # only allow ping from a particular address
|
|
76
|
+
# security_group.allow_ping('123.123.123.123/0')
|
|
77
|
+
#
|
|
78
|
+
# @param [String] ip_ranges One or more IP ranges to allow ping from.
|
|
79
|
+
# Defaults to 0.0.0.0/0
|
|
80
|
+
def allow_ping *sources
|
|
81
|
+
sources << '0.0.0.0/0' if sources.empty?
|
|
82
|
+
authorize_ingress('icmp', -1, *sources)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Removes ingress rules for ICMP pings. Defaults to 0.0.0.0/0 for
|
|
86
|
+
# the list of IP ranges to revoke.
|
|
87
|
+
#
|
|
88
|
+
# @param [String] ip_ranges One or more IP ranges to allow ping from.
|
|
89
|
+
# Defaults to 0.0.0.0/0
|
|
90
|
+
def disallow_ping *sources
|
|
91
|
+
sources << '0.0.0.0/0' if sources.empty?
|
|
92
|
+
revoke_ingress('icmp', -1, *sources)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Adds an ingress rules to a security group.
|
|
96
|
+
#
|
|
97
|
+
# Each ingress exception is comprised of a protocol a port range
|
|
98
|
+
# and a list of sources.
|
|
99
|
+
#
|
|
100
|
+
#
|
|
101
|
+
# This example grants the whole internet (0.0.0.0/0) access to port 80
|
|
102
|
+
# over TCP (HTTP web traffic).
|
|
103
|
+
#
|
|
104
|
+
# security_groups['websrv'].authorize_ingress(:tcp, 80)
|
|
105
|
+
#
|
|
106
|
+
# In the following example we grant SSH access from a list of
|
|
107
|
+
# IP address.
|
|
108
|
+
#
|
|
109
|
+
# security_groups['appsrv'].authorize_ingress(:tcp, 22,
|
|
110
|
+
# '111.111.111.111/0', '222.222.222.222/0')
|
|
111
|
+
#
|
|
112
|
+
# You can also grant privileges to other security groups. This
|
|
113
|
+
# is a convenient shortcut for granting permissions to all EC2
|
|
114
|
+
# servers in a particular security group access.
|
|
115
|
+
#
|
|
116
|
+
# web = security_groups['httpservers']
|
|
117
|
+
# db = security_groups['dbservers']
|
|
118
|
+
#
|
|
119
|
+
# db.authorize_ingress(:tcp, 3306, web)
|
|
120
|
+
#
|
|
121
|
+
# You can specify port ranges as well:
|
|
122
|
+
#
|
|
123
|
+
# security_groups['ftpsvr'].authorize_ingress(:tcp, 20..21)
|
|
124
|
+
#
|
|
125
|
+
# You can even mix and match IP address and security groups.
|
|
126
|
+
#
|
|
127
|
+
# @param [String, Symbol] protocol Should be :tcp, :udp or :icmp
|
|
128
|
+
# or the string equivalent.
|
|
129
|
+
#
|
|
130
|
+
# @param [Integer, Range] ports The port (or port range) to allow
|
|
131
|
+
# ingress traffic over. You can pass a single integer (like 80)
|
|
132
|
+
# or a range (like 20..21).
|
|
133
|
+
#
|
|
134
|
+
# @param [Mixed] sources One or more CIDR IP addresses,
|
|
135
|
+
# security groups, or hashes. Hash values should
|
|
136
|
+
# have :group_id and :user_id keys/values. This is useful
|
|
137
|
+
# for when the security group belongs to another account. The
|
|
138
|
+
# user id should be the owner_id (account id) of the security
|
|
139
|
+
# group.
|
|
140
|
+
#
|
|
141
|
+
# @return [nil]
|
|
142
|
+
def authorize_ingress protocol, ports, *sources
|
|
143
|
+
permissions = format_permission(protocol, ports, sources)
|
|
144
|
+
client.authorize_security_group_ingress(
|
|
145
|
+
:group_id => id,
|
|
146
|
+
:ip_permissions => permissions)
|
|
147
|
+
nil
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# @param see #authorize_ingress
|
|
151
|
+
# @return [nil]
|
|
152
|
+
def revoke_ingress protocol, ports, *sources
|
|
153
|
+
permissions = format_permission(protocol, ports, sources)
|
|
154
|
+
client.revoke_security_group_ingress(
|
|
155
|
+
:group_id => id,
|
|
156
|
+
:ip_permissions => permissions)
|
|
157
|
+
nil
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Deletes this security group.
|
|
161
|
+
#
|
|
162
|
+
# If you attempt to delete a security group that contains
|
|
163
|
+
# instances, or attempt to delete a security group that is referenced
|
|
164
|
+
# by another security group, an error is raised. For example, if
|
|
165
|
+
# security group B has a rule that allows access from security
|
|
166
|
+
# group A, security group A cannot be deleted until the rule is
|
|
167
|
+
# removed.
|
|
168
|
+
# @return [nil]
|
|
169
|
+
def delete
|
|
170
|
+
client.delete_security_group(:group_id => id)
|
|
171
|
+
nil
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# @private
|
|
175
|
+
def resource_type
|
|
176
|
+
'security-group'
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# @private
|
|
180
|
+
def inflected_name
|
|
181
|
+
"group"
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
# @private
|
|
185
|
+
def self.describe_call_name
|
|
186
|
+
:describe_security_groups
|
|
187
|
+
end
|
|
188
|
+
def describe_call_name; self.class.describe_call_name; end
|
|
189
|
+
|
|
190
|
+
# @private
|
|
191
|
+
protected
|
|
192
|
+
def find_in_response(resp)
|
|
193
|
+
resp.security_group_index[id]
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
# @private
|
|
197
|
+
protected
|
|
198
|
+
def format_permission protocol, ports, sources
|
|
199
|
+
|
|
200
|
+
permission = {}
|
|
201
|
+
permission[:ip_protocol] = protocol.to_s.downcase
|
|
202
|
+
permission[:from_port] = Array(ports).first.to_i
|
|
203
|
+
permission[:to_port] = Array(ports).last.to_i
|
|
204
|
+
|
|
205
|
+
ip_ranges = []
|
|
206
|
+
groups = []
|
|
207
|
+
|
|
208
|
+
# default to 0.0.0.0/0
|
|
209
|
+
sources << '0.0.0.0/0' if sources.empty?
|
|
210
|
+
|
|
211
|
+
sources.each do |where|
|
|
212
|
+
case where
|
|
213
|
+
|
|
214
|
+
when String
|
|
215
|
+
ip_ranges << where
|
|
216
|
+
|
|
217
|
+
when SecurityGroup
|
|
218
|
+
groups << {:group_id => where.id, :user_id => where.owner_id}
|
|
219
|
+
|
|
220
|
+
when Hash
|
|
221
|
+
if where.has_key?(:group_id) and where.has_key?(:user_id)
|
|
222
|
+
groups << where
|
|
223
|
+
else
|
|
224
|
+
raise ArgumentError, 'invalid ingress ip permission, hashes ' +
|
|
225
|
+
'must have :group_id and :user_id key/values'
|
|
226
|
+
end
|
|
227
|
+
else
|
|
228
|
+
raise ArgumentError, 'invalid ingress ip permission, ' +
|
|
229
|
+
'expected CIDR IP addres or SecurityGroup'
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
unless ip_ranges.empty?
|
|
234
|
+
permission[:ip_ranges] = ip_ranges.collect{|ip| { :cidr_ip => ip } }
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
unless groups.empty?
|
|
238
|
+
permission[:user_id_group_pairs] = groups
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
[permission]
|
|
242
|
+
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Copyright 2011 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 'aws/model'
|
|
15
|
+
|
|
16
|
+
module AWS
|
|
17
|
+
class EC2
|
|
18
|
+
class SecurityGroup < Resource
|
|
19
|
+
class IpPermission
|
|
20
|
+
|
|
21
|
+
include Model
|
|
22
|
+
|
|
23
|
+
# @param protocol [:tcp, :udp, :icmp]
|
|
24
|
+
# @param port [Range,Integer] An integer or a range of integers
|
|
25
|
+
# to open ports for.
|
|
26
|
+
# @param [Hash] options
|
|
27
|
+
# @option options [Array] :ip_ranges An array of CIDR ip address
|
|
28
|
+
# to grant permission to.
|
|
29
|
+
# @option options [Array] :groups An array of SecurityGroup objects to
|
|
30
|
+
# grant permission to.
|
|
31
|
+
def initialize security_group, protocol, ports, options = {}
|
|
32
|
+
@security_group = security_group
|
|
33
|
+
@protocol = protocol.to_s.downcase.to_sym
|
|
34
|
+
@port_range = (Array(ports).first..Array(ports).last)
|
|
35
|
+
@ip_ranges = Array(options[:ip_ranges])
|
|
36
|
+
@groups = Array(options[:groups])
|
|
37
|
+
super
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# @return [SecurityGroup] The security group this permission is
|
|
41
|
+
# authorized for.
|
|
42
|
+
attr_reader :security_group
|
|
43
|
+
|
|
44
|
+
# @return [Symbol] The protocol (:tcp, :udp, :icmp)
|
|
45
|
+
attr_reader :protocol
|
|
46
|
+
|
|
47
|
+
# @return [Range] The port range (e.g. 80..80, 4000..4010, etc)
|
|
48
|
+
attr_reader :port_range
|
|
49
|
+
|
|
50
|
+
# @return [Array] An array if string CIDR ip addresses.
|
|
51
|
+
attr_reader :ip_ranges
|
|
52
|
+
|
|
53
|
+
# @return [Array] An array of security groups that have been
|
|
54
|
+
# granted access with this permission.
|
|
55
|
+
attr_reader :groups
|
|
56
|
+
|
|
57
|
+
def authorize
|
|
58
|
+
sources = groups + ip_ranges
|
|
59
|
+
security_group.authorize_ingress(protocol, port_range, *sources)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def revoke
|
|
63
|
+
sources = groups + ip_ranges
|
|
64
|
+
security_group.revoke_ingress(protocol, port_range, *sources)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Copyright 2011 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 'aws/model'
|
|
15
|
+
|
|
16
|
+
module AWS
|
|
17
|
+
class EC2
|
|
18
|
+
class SecurityGroup < Resource
|
|
19
|
+
|
|
20
|
+
class IpPermissionCollection
|
|
21
|
+
|
|
22
|
+
include Model
|
|
23
|
+
include Enumerable
|
|
24
|
+
|
|
25
|
+
attr_reader :security_group
|
|
26
|
+
|
|
27
|
+
def initialize(security_group, opts = {})
|
|
28
|
+
super
|
|
29
|
+
@security_group = security_group
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def each
|
|
33
|
+
security_group.ip_permissions_list.each do |p|
|
|
34
|
+
|
|
35
|
+
groups = p.groups.collect do |group|
|
|
36
|
+
SecurityGroup.new(group.group_id,
|
|
37
|
+
:name => group.group_name,
|
|
38
|
+
:owner_id => group.user_id,
|
|
39
|
+
:config => config)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
ip_ranges = p.ip_ranges.collect{|ip| ip.cidr_ip }
|
|
43
|
+
|
|
44
|
+
permission =
|
|
45
|
+
IpPermission.new(self, p.ip_protocol, [p.from_port, p.to_port],
|
|
46
|
+
:ip_ranges => ip_ranges,
|
|
47
|
+
:groups => groups,
|
|
48
|
+
:config => config)
|
|
49
|
+
|
|
50
|
+
yield(permission)
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Copyright 2011 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 'aws/model'
|
|
15
|
+
require 'aws/ec2/collection'
|
|
16
|
+
require 'aws/ec2/tagged_collection'
|
|
17
|
+
require 'aws/ec2/security_group'
|
|
18
|
+
|
|
19
|
+
module AWS
|
|
20
|
+
class EC2
|
|
21
|
+
|
|
22
|
+
# Represents all EC2 security groups in an AWS account.
|
|
23
|
+
class SecurityGroupCollection < Collection
|
|
24
|
+
|
|
25
|
+
include TaggedCollection
|
|
26
|
+
|
|
27
|
+
# Creates a new
|
|
28
|
+
# @param [String] name The name of the security group to create.
|
|
29
|
+
# @param [Hash] options
|
|
30
|
+
# @option options [String] :description An informal description
|
|
31
|
+
# of this security group. Accepts alphanumeric characters, spaces,
|
|
32
|
+
# dashes, and underscores. If left blank the description will be set
|
|
33
|
+
# to the name.
|
|
34
|
+
# @return [SecurityGroup]
|
|
35
|
+
def create name, options = {}
|
|
36
|
+
|
|
37
|
+
description = options[:description] || name
|
|
38
|
+
|
|
39
|
+
response = client.create_security_group(
|
|
40
|
+
:group_name => name,
|
|
41
|
+
:description => description)
|
|
42
|
+
|
|
43
|
+
SecurityGroup.new(response.group_id, {
|
|
44
|
+
:name => name,
|
|
45
|
+
:description => description,
|
|
46
|
+
:config => config })
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# @param [String] group_id The group id of a security group.
|
|
51
|
+
# @return [SecurityGroup] The group with the given id.
|
|
52
|
+
def [] group_id
|
|
53
|
+
super
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Specify one or more criteria to filter security groups by.
|
|
57
|
+
# A subsequent call to #each will limit the security groups returned
|
|
58
|
+
# by the set of filters.
|
|
59
|
+
#
|
|
60
|
+
# If you supply multiple values to #filter then these values are
|
|
61
|
+
# treated as an OR condition. To return security groups named
|
|
62
|
+
# 'test' or 'fake':
|
|
63
|
+
#
|
|
64
|
+
# security_groups.filter('group-name', 'test', 'fake')
|
|
65
|
+
#
|
|
66
|
+
# If you want to and conditions together you need to chain calls to
|
|
67
|
+
# filter. To limit security groups to those with a name like
|
|
68
|
+
# 'test' and like 'ruby':
|
|
69
|
+
#
|
|
70
|
+
# security_groups.
|
|
71
|
+
# filter('group-name', '*test*').
|
|
72
|
+
# filter('group-name', '*ruby*').each do |group|
|
|
73
|
+
# #...
|
|
74
|
+
# end
|
|
75
|
+
#
|
|
76
|
+
# Note that * matches one or more characters and ? matches any one
|
|
77
|
+
# character.
|
|
78
|
+
#
|
|
79
|
+
# === Valid Filters
|
|
80
|
+
#
|
|
81
|
+
# * description - Description of the security group.
|
|
82
|
+
# * group-id - ID of the security group.
|
|
83
|
+
# * group-name - Name of the security group.
|
|
84
|
+
# * ip-permission.cidr - CIDR range that has been granted the
|
|
85
|
+
# permission.
|
|
86
|
+
# * ip-permission.from-port - Start of port range for the TCP and UDP
|
|
87
|
+
# protocols, or an ICMP type number.
|
|
88
|
+
# * ip-permission.group-name - Name of security group that has been
|
|
89
|
+
# granted the permission.
|
|
90
|
+
# * ip-permission.protocol - IP protocol for the permission. Valid
|
|
91
|
+
# values include 'tcp', 'udp', 'icmp' or a protocol number.
|
|
92
|
+
# * ip-permission.to-port - End of port range for the TCP and UDP
|
|
93
|
+
# protocols, or an ICMP code.
|
|
94
|
+
# * ip-permission.user-id - ID of AWS account that has been granted
|
|
95
|
+
# the permission.
|
|
96
|
+
# * owner-id - AWS account ID of the owner of the security group.
|
|
97
|
+
# * tag-key - Key of a tag assigned to the security group.
|
|
98
|
+
# * tag-value - Value of a tag assigned to the security group.
|
|
99
|
+
#
|
|
100
|
+
# @return [SecurityGroupCollection] A new collection that represents
|
|
101
|
+
# a subset of the security groups associated with this account.
|
|
102
|
+
|
|
103
|
+
# Yields once for each security group in this account.
|
|
104
|
+
#
|
|
105
|
+
# @yield [group]
|
|
106
|
+
# @yieldparam [SecurityGroup] group
|
|
107
|
+
# @return [nil]
|
|
108
|
+
def each &block
|
|
109
|
+
|
|
110
|
+
response = filtered_request(:describe_security_groups)
|
|
111
|
+
response.security_group_info.each do |info|
|
|
112
|
+
|
|
113
|
+
group = SecurityGroup.new(info.group_id,
|
|
114
|
+
:name => info.group_name,
|
|
115
|
+
:description => info.group_description,
|
|
116
|
+
:owner_id => info.owner_id,
|
|
117
|
+
:config => config)
|
|
118
|
+
|
|
119
|
+
yield(group)
|
|
120
|
+
|
|
121
|
+
end
|
|
122
|
+
nil
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
protected
|
|
126
|
+
def member_class
|
|
127
|
+
SecurityGroup
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|