Class: Miam::Driver

Inherits:
Object
  • Object
show all
Includes:
Logger::Helper
Defined in:
lib/miam/driver.rb

Constant Summary collapse

MAX_POLICY_SIZE =
2048

Instance Method Summary collapse

Methods included from Logger::Helper

#log

Constructor Details

#initialize(iam, options = {}) ⇒ Driver

Returns a new instance of Driver.



6
7
8
9
# File 'lib/miam/driver.rb', line 6

def initialize(iam, options = {})
  @iam = iam
  @options = options
end

Instance Method Details

#add_role_to_instance_profiles(role_name, instance_profile_names) ⇒ Object



194
195
196
197
198
199
200
201
202
203
# File 'lib/miam/driver.rb', line 194

def add_role_to_instance_profiles(role_name, instance_profile_names)
  log(:info, "Update Role `#{role_name}`", :color => :green)
  log(:info, "  add instance_profiles=#{instance_profile_names.join(',')}", :color => :green)

  unless_dry_run do
    instance_profile_names.each do |instance_profile_name|
      @iam.add_role_to_instance_profile(:instance_profile_name => instance_profile_name, :role_name => role_name)
    end
  end
end

#add_user_to_groups(user_name, group_names) ⇒ Object



102
103
104
105
106
107
108
109
110
111
# File 'lib/miam/driver.rb', line 102

def add_user_to_groups(user_name, group_names)
  log(:info, "Update User `#{user_name}`", :color => :green)
  log(:info, "  add groups=#{group_names.join(',')}", :color => :green)

  unless_dry_run do
    group_names.each do |group_name|
      @iam.add_user_to_group(:group_name => group_name, :user_name => user_name)
    end
  end
end

#create_access_key(user_name) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/miam/driver.rb', line 25

def create_access_key(user_name)
  log(:info, "Create access key for User `#{user_name}`", :color => :cyan)
  access_key = nil

  unless_dry_run do
    resp = @iam.create_access_key(:user_name => user_name)

    access_key = {
      :access_key_id => resp.access_key.access_key_id,
      :secret_access_key => resp.access_key.secret_access_key,
    }
  end

  access_key
end

#create_group(group_name, attrs) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/miam/driver.rb', line 124

def create_group(group_name, attrs)
  log(:info, "Create Group `#{group_name}`", :color => :cyan)

  unless_dry_run do
    params = {:group_name => group_name}
    params[:path] = attrs[:path] if attrs[:path]
    @iam.create_group(params)
  end

  new_group_attrs = {:policies => {}}
  new_group_attrs[:path] = attrs[:path] if attrs[:path]
  new_group_attrs
end

#create_instance_profile(instance_profile_name, attrs) ⇒ Object



228
229
230
231
232
233
234
235
236
237
238
239
240
# File 'lib/miam/driver.rb', line 228

def create_instance_profile(instance_profile_name, attrs)
  log(:info, "Create InstanceIrofile `#{instance_profile_name}`", :color => :cyan)

  unless_dry_run do
    params = {:instance_profile_name => instance_profile_name}
    params[:path] = attrs[:path] if attrs[:path]
    @iam.create_instance_profile(params)
  end

  new_instance_profile_attrs = {}
  new_instance_profile_attrs[:path] = attrs[:path] if attrs[:path]
  new_instance_profile_attrs
end

#create_login_profile(user_name, attrs) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/miam/driver.rb', line 69

def (user_name, attrs)
  log_attrs = attrs.dup
  log_attrs.delete(:password)

  log(:info, "Update User `#{user_name}`", :color => :green)
  log(:info, "  create login profile: #{log_attrs.inspect}", :color => :green)

  unless_dry_run do
    @iam.(attrs.merge(:user_name => user_name))
  end
end

#create_policy(type, user_or_group_name, policy_name, policy_document) ⇒ Object



273
274
275
276
277
# File 'lib/miam/driver.rb', line 273

def create_policy(type, user_or_group_name, policy_name, policy_document)
  log(:info, "Create #{Miam::Utils.camelize(type.to_s)} `#{user_or_group_name}` > Policy `#{policy_name}`", :color => :cyan)
  log(:info, "  #{policy_document.pretty_inspect.gsub("\n", "\n  ").strip}", :color => :cyan)
  put_policy(type, user_or_group_name, policy_name, policy_document)
end

#create_role(role_name, attrs) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'lib/miam/driver.rb', line 154

def create_role(role_name, attrs)
  log(:info, "Create Role `#{role_name}`", :color => :cyan)
  assume_role_policy_document = attrs.fetch(:assume_role_policy_document)

  unless_dry_run do
    params = {
      :role_name => role_name,
      :assume_role_policy_document => encode_document(assume_role_policy_document),
    }

    params[:path] = attrs[:path] if attrs[:path]
    @iam.create_role(params)
  end

  new_role_attrs = {
    :instance_profiles => [],
    :assume_role_policy_document => assume_role_policy_document,
    :policies => {}
  }

  new_role_attrs[:path] = attrs[:path] if attrs[:path]
  new_role_attrs
end

#create_user(user_name, attrs) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/miam/driver.rb', line 11

def create_user(user_name, attrs)
  log(:info, "Create User `#{user_name}`", :color => :cyan)

  unless_dry_run do
    params = {:user_name => user_name}
    params[:path] = attrs[:path] if attrs[:path]
    @iam.create_user(params)
  end

  new_user_attrs = {:groups => [], :policies => {}}
  new_user_attrs[:path] = attrs[:path] if attrs[:path]
  new_user_attrs
end

#delete_group(group_name, attrs, users_in_group) ⇒ Object



138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/miam/driver.rb', line 138

def delete_group(group_name, attrs, users_in_group)
  log(:info, "Delete Group `#{group_name}`", :color => :red)

  unless_dry_run do
    attrs[:policies].keys.each do |policy_name|
      @iam.delete_group_policy(:group_name => group_name, :policy_name => policy_name)
    end

    users_in_group.each do |user_name|
      @iam.remove_user_from_group(:group_name => group_name, :user_name => user_name)
    end

    @iam.delete_group(:group_name => group_name)
  end
end

#delete_instance_profile(instance_profile_name, attrs, roles_in_instance_profile) ⇒ Object



242
243
244
245
246
247
248
249
250
251
252
# File 'lib/miam/driver.rb', line 242

def delete_instance_profile(instance_profile_name, attrs, roles_in_instance_profile)
  log(:info, "Delete InstanceProfile `#{instance_profile_name}`", :color => :red)

  unless_dry_run do
    roles_in_instance_profile.each do |role_name|
      @iam.remove_role_from_instance_profile(:instance_profile_name => instance_profile_name, :role_name => role_name)
    end

    @iam.delete_instance_profile(:instance_profile_name => instance_profile_name)
  end
end

#delete_login_profile(user_name) ⇒ Object



81
82
83
84
85
86
87
88
# File 'lib/miam/driver.rb', line 81

def (user_name)
  log(:info, "Update User `#{user_name}`", :color => :green)
  log(:info, "  delete login profile", :color => :green)

  unless_dry_run do
    @iam.(:user_name => user_name)
  end
end

#delete_policy(type, user_or_group_name, policy_name) ⇒ Object



285
286
287
288
289
290
291
292
293
294
# File 'lib/miam/driver.rb', line 285

def delete_policy(type, user_or_group_name, policy_name)
  logmsg = "Delete #{Miam::Utils.camelize(type.to_s)} `#{user_or_group_name}` > Policy `#{policy_name}`"
  log(:info, logmsg, :color => :red)

  unless_dry_run do
    params = {:policy_name => policy_name}
    params["#{type}_name".to_sym] = user_or_group_name
    @iam.send("delete_#{type}_policy", params)
  end
end

#delete_role(role_name, instance_profile_names, attrs) ⇒ Object



178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
# File 'lib/miam/driver.rb', line 178

def delete_role(role_name, instance_profile_names, attrs)
  log(:info, "Delete Role `#{role_name}`", :color => :red)

  unless_dry_run do
    attrs[:policies].keys.each do |policy_name|
      @iam.delete_role_policy(:role_name => role_name, :policy_name => policy_name)
    end

    instance_profile_names.each do |instance_profile_name|
      @iam.remove_role_from_instance_profile(:instance_profile_name => instance_profile_name, :role_name => role_name)
    end

    @iam.delete_role(:role_name => role_name)
  end
end

#delete_user(user_name, attrs) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/miam/driver.rb', line 41

def delete_user(user_name, attrs)
  log(:info, "Delete User `#{user_name}`", :color => :red)

  unless_dry_run do
    if attrs[:login_profile]
      @iam.(:user_name => user_name)
    end

    attrs[:policies].keys.each do |policy_name|
      @iam.delete_user_policy(:user_name => user_name, :policy_name => policy_name)
    end

    attrs[:groups].each do |group_name|
      @iam.remove_user_from_group(:group_name => group_name, :user_name => user_name)
    end

    list_access_key_ids(user_name).each do |access_key_id|
      @iam.delete_access_key(:user_name => user_name, :access_key_id => access_key_id)
    end

    list_signing_certificate_ids(user_name).each do |certificate_id|
      @iam.delete_signing_certificate(:user_name => user_name, :certificate_id => certificate_id)
    end

    @iam.delete_user(:user_name => user_name)
  end
end

#list_access_key_ids(user_name) ⇒ Object



308
309
310
311
312
313
314
# File 'lib/miam/driver.rb', line 308

def list_access_key_ids(user_name)
  @iam.list_access_keys(:user_name => user_name).map {|resp|
    resp..map do ||
      .access_key_id
    end
  }.flatten
end

#list_signing_certificate_ids(user_name) ⇒ Object



316
317
318
319
320
321
322
# File 'lib/miam/driver.rb', line 316

def list_signing_certificate_ids(user_name)
  @iam.list_signing_certificates(:user_name => user_name).map {|resp|
    resp.certificates.map do |cert|
      cert.certificate_id
    end
  }.flatten
end

#put_policy(type, user_or_group_name, policy_name, policy_document) ⇒ Object



296
297
298
299
300
301
302
303
304
305
306
# File 'lib/miam/driver.rb', line 296

def put_policy(type, user_or_group_name, policy_name, policy_document)
  unless_dry_run do
    params = {
      :policy_name => policy_name,
      :policy_document => encode_document(policy_document),
    }

    params["#{type}_name".to_sym] = user_or_group_name
    @iam.send("put_#{type}_policy", params)
  end
end

#remove_role_from_instance_profiles(role_name, instance_profile_names) ⇒ Object



205
206
207
208
209
210
211
212
213
214
# File 'lib/miam/driver.rb', line 205

def remove_role_from_instance_profiles(role_name, instance_profile_names)
  log(:info, "Update Role `#{role_name}`", :color => :green)
  log(:info, "  remove instance_profiles=#{instance_profile_names.join(',')}", :color => :green)

  unless_dry_run do
    instance_profile_names.each do |instance_profile_name|
      @iam.remove_role_from_instance_profile(:instance_profile_name => instance_profile_name, :role_name => role_name)
    end
  end
end

#remove_user_from_groups(user_name, group_names) ⇒ Object



113
114
115
116
117
118
119
120
121
122
# File 'lib/miam/driver.rb', line 113

def remove_user_from_groups(user_name, group_names)
  log(:info, "Update User `#{user_name}`", :color => :green)
  log(:info, "  remove groups=#{group_names.join(',')}", :color => :green)

  unless_dry_run do
    group_names.each do |group_name|
      @iam.remove_user_from_group(:group_name => group_name, :user_name => user_name)
    end
  end
end

#update_assume_role_policy(role_name, policy_document) ⇒ Object



216
217
218
219
220
221
222
223
224
225
226
# File 'lib/miam/driver.rb', line 216

def update_assume_role_policy(role_name, policy_document)
  log(:info, "Update Role `#{role_name}` > AssumeRolePolicy", :color => :green)
  log(:info, "  #{policy_document.pretty_inspect.gsub("\n", "\n  ").strip}", :color => :green)

  unless_dry_run do
    @iam.update_assume_role_policy(
      :role_name => role_name,
      :policy_document => encode_document(policy_document),
    )
  end
end

#update_login_profile(user_name, attrs) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
# File 'lib/miam/driver.rb', line 90

def (user_name, attrs)
  log_attrs = attrs.dup
  log_attrs.delete(:password)

  log(:info, "Update User `#{user_name}`", :color => :green)
  log(:info, "  update login profile: #{log_attrs.inspect}", :color => :green)

  unless_dry_run do
    @iam.(attrs.merge(:user_name => user_name))
  end
end

#update_name(type, user_or_group_name, new_name) ⇒ Object



254
255
256
257
258
# File 'lib/miam/driver.rb', line 254

def update_name(type, user_or_group_name, new_name)
  log(:info, "Update #{Miam::Utils.camelize(type.to_s)} `#{user_or_group_name}`", :color => :green)
  log(:info, "  set name=#{new_name}", :color => :green)
  update_user_or_group(type, user_or_group_name, "new_#{type}_name".to_sym => new_name)
end

#update_path(type, user_or_group_name, new_path) ⇒ Object



260
261
262
263
264
# File 'lib/miam/driver.rb', line 260

def update_path(type, user_or_group_name, new_path)
  log(:info, "Update #{Miam::Utils.camelize(type.to_s)} `#{user_or_group_name}`", :color => :green)
  log(:info, "  set path=#{new_path}", :color => :green)
  update_user_or_group(type, user_or_group_name, :new_path => new_path)
end

#update_policy(type, user_or_group_name, policy_name, policy_document) ⇒ Object



279
280
281
282
283
# File 'lib/miam/driver.rb', line 279

def update_policy(type, user_or_group_name, policy_name, policy_document)
  log(:info, "Update #{Miam::Utils.camelize(type.to_s)} `#{user_or_group_name}` > Policy `#{policy_name}`", :color => :green)
  log(:info, "  #{policy_document.pretty_inspect.gsub("\n", "\n  ").strip}", :color => :green)
  put_policy(type, user_or_group_name, policy_name, policy_document)
end

#update_user_or_group(type, user_or_group_name, params) ⇒ Object



266
267
268
269
270
271
# File 'lib/miam/driver.rb', line 266

def update_user_or_group(type, user_or_group_name, params)
  unless_dry_run do
    params["#{type}_name".to_sym] = user_or_group_name
    @iam.send("update_#{type}", params)
  end
end