miam 0.2.3 → 0.2.4.beta6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bb232253b3506a0387caa0817c099a76b0d5ec5f
4
- data.tar.gz: e10d873066aef538049bb703bf2977064c1ab586
3
+ metadata.gz: e1c150b030553f7b4eefb432270b89335915eec8
4
+ data.tar.gz: 39f678345ea0954fa1cc1aa1b31a0d216a077daa
5
5
  SHA512:
6
- metadata.gz: d07415f6abcf2efa6d0572bf61302ee6d5334cc76f2a7739dbde62cf8b3b0cc0ceece4cf9613bbcc66776e0ad3758bfb5cf75196a286cfe47d95de467f02fa33
7
- data.tar.gz: eb2ecd520a5d43173249082dfdb29dd0b31fa36acc254cb356a57b04d9dd2befc4caaae70f4a7376189ffda32395b425195f7f014c0f223501dc1ac96d324f9b
6
+ metadata.gz: f9afc6853fada3dd41deff6cbc304a339c56cc6e7b92b940ef69cac3e1a32b79910d9897a8b33c51d29f7c2674cb0809bc94808872ff3696aff70d518c4a207d
7
+ data.tar.gz: 2545494db13024cc827de64cc57a9f0addf14f8113567f967917ae0197a979e6067573b51614027c2ed269e960b43223829715fecee64cc98a20dcd39e5a17f3
data/lib/miam/client.rb CHANGED
@@ -452,7 +452,7 @@ class Miam::Client
452
452
  log(:warn, "ManagedPolicy `#{policy_name}`: 'path' cannot be updated", :color => :yellow)
453
453
  end
454
454
 
455
- updated = walk_managed_policy(policy_name, expected_attrs[:document], actual_attrs[:document]) || updated
455
+ updated = walk_managed_policy(policy_name, actual_attrs[:path], expected_attrs[:document], actual_attrs[:document]) || updated
456
456
  else
457
457
  @driver.create_managed_policy(policy_name, expected_attrs)
458
458
  updated = true
@@ -462,13 +462,13 @@ class Miam::Client
462
462
  updated
463
463
  end
464
464
 
465
- def walk_managed_policy(policy_name, expected_document, actual_document)
465
+ def walk_managed_policy(policy_name, policy_path, expected_document, actual_document)
466
466
  updated = false
467
467
  expected_document.sort_array!
468
468
  actual_document.sort_array!
469
469
 
470
470
  if expected_document != actual_document
471
- @driver.update_managed_policy(policy_name, expected_document, actual_document)
471
+ @driver.update_managed_policy(policy_name, policy_path, expected_document, actual_document)
472
472
  updated = true
473
473
  end
474
474
 
@@ -479,7 +479,7 @@ class Miam::Client
479
479
  updated = false
480
480
 
481
481
  actual.each do |policy_name, actual_attrs|
482
- @driver.delete_managed_policy(policy_name)
482
+ @driver.delete_managed_policy(policy_name, actual_attrs[:path])
483
483
  updated = true
484
484
  end
485
485
 
data/lib/miam/driver.rb CHANGED
@@ -67,6 +67,14 @@ class Miam::Driver
67
67
  @iam.delete_signing_certificate(:user_name => user_name, :certificate_id => certificate_id)
68
68
  end
69
69
 
70
+ mfa_devices = @iam.list_mfa_devices(:user_name => user_name).map {|resp|
71
+ resp.mfa_devices
72
+ }.flatten
73
+
74
+ mfa_devices.each do |md|
75
+ @iam.deactivate_mfa_device(:user_name => user_name, :serial_number => md.serial_number)
76
+ end
77
+
70
78
  @iam.delete_user(:user_name => user_name)
71
79
  end
72
80
  end
@@ -377,12 +385,12 @@ class Miam::Driver
377
385
  end
378
386
  end
379
387
 
380
- def delete_managed_policy(policy_name)
388
+ def delete_managed_policy(policy_name, policy_path)
381
389
  log(:info, "Delete ManagedPolicy `#{policy_name}`", :color => :red)
382
390
 
383
391
  unless_dry_run do
384
392
  policy_versions = @iam.list_policy_versions(
385
- :policy_arn => policy_arn(policy_name),
393
+ :policy_arn => policy_arn(policy_name, policy_path),
386
394
  :max_items => MAX_POLICY_VERSIONS
387
395
  )
388
396
 
@@ -390,24 +398,24 @@ class Miam::Driver
390
398
  pv.is_default_version
391
399
  }.each {|pv|
392
400
  @iam.delete_policy_version(
393
- :policy_arn => policy_arn(policy_name),
401
+ :policy_arn => policy_arn(policy_name, policy_path),
394
402
  :version_id => pv.version_id
395
403
  )
396
404
  }
397
405
 
398
406
  @iam.delete_policy(
399
- :policy_arn => policy_arn(policy_name)
407
+ :policy_arn => policy_arn(policy_name, policy_path)
400
408
  )
401
409
  end
402
410
  end
403
411
 
404
- def update_managed_policy(policy_name, policy_document, old_policy_document)
412
+ def update_managed_policy(policy_name, policy_path, policy_document, old_policy_document)
405
413
  log(:info, "Update ManagedPolicy `#{policy_name}`", :color => :green)
406
414
  log(:info, Miam::Utils.diff(old_policy_document, policy_document, :color => @options[:color]), :color => false)
407
415
 
408
416
  unless_dry_run do
409
417
  policy_versions = @iam.list_policy_versions(
410
- :policy_arn => policy_arn(policy_name),
418
+ :policy_arn => policy_arn(policy_name, policy_path),
411
419
  :max_items => MAX_POLICY_VERSIONS
412
420
  )
413
421
 
@@ -417,13 +425,13 @@ class Miam::Driver
417
425
  }.sort_by {|pv| pv.version_id[1..-1].to_i }.first
418
426
 
419
427
  @iam.delete_policy_version(
420
- :policy_arn => policy_arn(policy_name),
428
+ :policy_arn => policy_arn(policy_name, policy_path),
421
429
  :version_id => delete_policy_version.version_id
422
430
  )
423
431
  end
424
432
 
425
433
  @iam.create_policy_version(
426
- :policy_arn => policy_arn(policy_name),
434
+ :policy_arn => policy_arn(policy_name, policy_path),
427
435
  :policy_document => encode_document(policy_document),
428
436
  set_as_default: true
429
437
  )
@@ -455,11 +463,12 @@ class Miam::Driver
455
463
  yield unless @options[:dry_run]
456
464
  end
457
465
 
458
- def user_id
459
- @user_id ||= @iam.get_user.user.user_id
466
+ def account_id
467
+ # https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html
468
+ @account_id ||= @iam.get_user.user.arn.split(':').fetch(4)
460
469
  end
461
470
 
462
- def policy_arn(policy_name)
463
- "arn:aws:iam::#{user_id}:policy/#{policy_name}"
471
+ def policy_arn(policy_name, policy_path)
472
+ File.join("arn:aws:iam::#{account_id}:policy", policy_path, policy_name)
464
473
  end
465
474
  end
data/lib/miam/exporter.rb CHANGED
@@ -255,12 +255,19 @@ class Miam::Exporter
255
255
  :policies,
256
256
  ]
257
257
 
258
- keys.each do |key|
258
+ key_by_filter = {
259
+ 'User' => :user_detail_list,
260
+ 'Role' => :role_detail_list,
261
+ 'Group' => :group_detail_list,
262
+ 'LocalManagedPolicy' => :policies
263
+ }
264
+
265
+ key_by_filter.values.each do |key|
259
266
  account_authorization_details[key] = []
260
267
  end
261
268
 
262
- @iam.get_account_authorization_details.each do |resp|
263
- keys.each do |key|
269
+ Parallel.each(key_by_filter, :in_threads => @concurrency) do |filter, key|
270
+ @iam.get_account_authorization_details(:filter => [filter]).each do |resp|
264
271
  account_authorization_details[key].concat(resp[key])
265
272
 
266
273
  unless @options[:no_progress]
data/lib/miam/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Miam
2
- VERSION = '0.2.3'
2
+ VERSION = '0.2.4.beta6'
3
3
  end
data/miam.gemspec CHANGED
@@ -8,8 +8,6 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Miam::VERSION
9
9
  spec.authors = ['Genki Sugawara']
10
10
  spec.email = ['sgwr_dts@yahoo.co.jp']
11
- spec.summary = %q{TODO: Write a short summary. Required.}
12
- spec.description = %q{TODO: Write a longer description. Optional.}
13
11
  spec.summary = %q{Miam is a tool to manage IAM.}
14
12
  spec.description = %q{Miam is a tool to manage IAM. It defines the state of IAM using DSL, and updates IAM according to DSL.}
15
13
  spec.homepage = 'http://miam.codenize.tools/'
@@ -31,4 +29,5 @@ Gem::Specification.new do |spec|
31
29
  spec.add_development_dependency 'rspec', '>= 3.0.0'
32
30
  spec.add_development_dependency 'rspec-instafail'
33
31
  spec.add_development_dependency 'coveralls'
32
+ spec.add_development_dependency 'nokogiri'
34
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miam
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4.beta6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-29 00:00:00.000000000 Z
11
+ date: 2016-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: nokogiri
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
167
181
  description: Miam is a tool to manage IAM. It defines the state of IAM using DSL,
168
182
  and updates IAM according to DSL.
169
183
  email:
@@ -224,12 +238,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
224
238
  version: '0'
225
239
  required_rubygems_version: !ruby/object:Gem::Requirement
226
240
  requirements:
227
- - - ">="
241
+ - - ">"
228
242
  - !ruby/object:Gem::Version
229
- version: '0'
243
+ version: 1.3.1
230
244
  requirements: []
231
245
  rubyforge_project:
232
- rubygems_version: 2.4.5.1
246
+ rubygems_version: 2.5.1
233
247
  signing_key:
234
248
  specification_version: 4
235
249
  summary: Miam is a tool to manage IAM.