miam 0.1.4 → 0.2.0.beta
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 +4 -4
- data/README.md +6 -1
- data/bin/miam +0 -1
- data/lib/miam.rb +0 -1
- data/lib/miam/exporter.rb +41 -85
- data/lib/miam/version.rb +1 -1
- data/miam.gemspec +0 -1
- data/spec/spec_helper.rb +1 -2
- metadata +4 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93e592c9821a09f0eb8dee36c98f1ab14cbd9185
|
4
|
+
data.tar.gz: 06c463a3aa71249eaf5371fadcf5df506afe1c67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebbb9ef86252c3240575445f3afe68690b53fe6c6a9bd7de7de95368d6a1b87bde63b2d22eb37942c7f83eea5f5215defc21b766ab67af42c9bfbf01df722cb8
|
7
|
+
data.tar.gz: ffabc21c6da3fa8ffa0c23308b90c2c2f7aec0bc0fecf90c29b6363014fd80974eed9a25018b4b80fff448c09f1987301d7f597d6c550aa5976a34b1d9b8c37a
|
data/README.md
CHANGED
@@ -8,6 +8,12 @@ It defines the state of IAM using DSL, and updates IAM according to DSL.
|
|
8
8
|
[](https://travis-ci.org/winebarrel/miam)
|
9
9
|
[](https://coveralls.io/r/winebarrel/miam?branch=master)
|
10
10
|
|
11
|
+
** Notice **
|
12
|
+
|
13
|
+
* `>= 0.2.0`
|
14
|
+
* Use [get_account_authorization_details](http://docs.aws.amazon.com/sdkforruby/api/Aws/IAM/Client.html#get_account_authorization_details-instance_method).
|
15
|
+
* Remove progress bar.
|
16
|
+
|
11
17
|
## Installation
|
12
18
|
|
13
19
|
Add this line to your application's Gemfile:
|
@@ -56,7 +62,6 @@ Usage: miam [options]
|
|
56
62
|
--export-concurrency N
|
57
63
|
--target REGEXP
|
58
64
|
--no-color
|
59
|
-
--no-progress
|
60
65
|
--debug
|
61
66
|
```
|
62
67
|
|
data/bin/miam
CHANGED
@@ -46,7 +46,6 @@ ARGV.options do |opt|
|
|
46
46
|
opt.on('' , '--export-concurrency N', Integer) {|v| options[:export_concurrency] = v }
|
47
47
|
opt.on('' , '--target REGEXP') {|v| options[:target] = Regexp.new(v) }
|
48
48
|
opt.on('' , '--no-color') { options[:color] = false }
|
49
|
-
opt.on('' , '--no-progress') { options[:no_progress] = true }
|
50
49
|
opt.on('' , '--debug') { options[:debug] = true }
|
51
50
|
opt.parse!
|
52
51
|
|
data/lib/miam.rb
CHANGED
data/lib/miam/exporter.rb
CHANGED
@@ -11,18 +11,15 @@ class Miam::Exporter
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def export
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
account_authorization_details = get_account_authorization_details
|
15
|
+
|
16
|
+
users = account_authorization_details[:user_detail_list]
|
17
|
+
groups = account_authorization_details[:group_detail_list]
|
18
|
+
roles = account_authorization_details[:role_detail_list]
|
17
19
|
instance_profiles = list_instance_profiles
|
18
20
|
group_users = {}
|
19
21
|
instance_profile_roles = {}
|
20
22
|
|
21
|
-
unless @options[:no_progress]
|
22
|
-
progress_total = users.length + groups.length + roles.length + instance_profiles.length
|
23
|
-
@progressbar = ProgressBar.create(:title => "Loading", :total => progress_total, :output => $stderr)
|
24
|
-
end
|
25
|
-
|
26
23
|
expected = {
|
27
24
|
:users => export_users(users, group_users),
|
28
25
|
:groups => export_groups(groups),
|
@@ -40,8 +37,8 @@ class Miam::Exporter
|
|
40
37
|
|
41
38
|
Parallel.each(users, :in_threads => @concurrency) do |user|
|
42
39
|
user_name = user.user_name
|
43
|
-
groups =
|
44
|
-
policies = export_user_policies(
|
40
|
+
groups = user.group_list
|
41
|
+
policies = export_user_policies(user)
|
45
42
|
login_profile = export_login_profile(user_name)
|
46
43
|
|
47
44
|
@mutex.synchronize do
|
@@ -59,31 +56,18 @@ class Miam::Exporter
|
|
59
56
|
if login_profile
|
60
57
|
result[user_name][:login_profile] = login_profile
|
61
58
|
end
|
62
|
-
|
63
|
-
progress
|
64
59
|
end
|
65
60
|
end
|
66
61
|
|
67
62
|
result
|
68
63
|
end
|
69
64
|
|
70
|
-
def
|
71
|
-
@iam.list_groups_for_user(:user_name => user_name).map {|resp|
|
72
|
-
resp.groups.map do |group|
|
73
|
-
group.group_name
|
74
|
-
end
|
75
|
-
}.flatten
|
76
|
-
end
|
77
|
-
|
78
|
-
def export_user_policies(user_name)
|
65
|
+
def export_user_policies(user)
|
79
66
|
result = {}
|
80
67
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
document = CGI.unescape(policy.policy_document)
|
85
|
-
result[policy_name] = JSON.parse(document)
|
86
|
-
end
|
68
|
+
user.user_policy_list.each do |policy|
|
69
|
+
document = CGI.unescape(policy.policy_document)
|
70
|
+
result[policy.policy_name] = JSON.parse(document)
|
87
71
|
end
|
88
72
|
|
89
73
|
result
|
@@ -103,30 +87,25 @@ class Miam::Exporter
|
|
103
87
|
|
104
88
|
Parallel.each(groups, :in_threads => @concurrency) do |group|
|
105
89
|
group_name = group.group_name
|
106
|
-
policies = export_group_policies(
|
90
|
+
policies = export_group_policies(group)
|
107
91
|
|
108
92
|
@mutex.synchronize do
|
109
93
|
result[group_name] = {
|
110
94
|
:path => group.path,
|
111
95
|
:policies => policies,
|
112
96
|
}
|
113
|
-
|
114
|
-
progress
|
115
97
|
end
|
116
98
|
end
|
117
99
|
|
118
100
|
result
|
119
101
|
end
|
120
102
|
|
121
|
-
def export_group_policies(
|
103
|
+
def export_group_policies(group)
|
122
104
|
result = {}
|
123
105
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
document = CGI.unescape(policy.policy_document)
|
128
|
-
result[policy_name] = JSON.parse(document)
|
129
|
-
end
|
106
|
+
group.group_policy_list.each do |policy|
|
107
|
+
document = CGI.unescape(policy.policy_document)
|
108
|
+
result[policy.policy_name] = JSON.parse(document)
|
130
109
|
end
|
131
110
|
|
132
111
|
result
|
@@ -137,8 +116,8 @@ class Miam::Exporter
|
|
137
116
|
|
138
117
|
Parallel.each(roles, :in_threads => @concurrency) do |role|
|
139
118
|
role_name = role.role_name
|
140
|
-
instance_profiles =
|
141
|
-
policies = export_role_policies(
|
119
|
+
instance_profiles = role.instance_profile_list.map {|i| i.instance_profile_name }
|
120
|
+
policies = export_role_policies(role)
|
142
121
|
|
143
122
|
@mutex.synchronize do
|
144
123
|
instance_profiles.each do |instance_profile_name|
|
@@ -154,31 +133,18 @@ class Miam::Exporter
|
|
154
133
|
:instance_profiles => instance_profiles,
|
155
134
|
:policies => policies,
|
156
135
|
}
|
157
|
-
|
158
|
-
progress
|
159
136
|
end
|
160
137
|
end
|
161
138
|
|
162
139
|
result
|
163
140
|
end
|
164
141
|
|
165
|
-
def
|
166
|
-
@iam.list_instance_profiles_for_role(:role_name => role_name).map {|resp|
|
167
|
-
resp.instance_profiles.map do |instance_profile|
|
168
|
-
instance_profile.instance_profile_name
|
169
|
-
end
|
170
|
-
}.flatten
|
171
|
-
end
|
172
|
-
|
173
|
-
def export_role_policies(role_name)
|
142
|
+
def export_role_policies(role)
|
174
143
|
result = {}
|
175
144
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
document = CGI.unescape(policy.policy_document)
|
180
|
-
result[policy_name] = JSON.parse(document)
|
181
|
-
end
|
145
|
+
role.role_policy_list.each do |policy|
|
146
|
+
document = CGI.unescape(policy.policy_document)
|
147
|
+
result[policy.policy_name] = JSON.parse(document)
|
182
148
|
end
|
183
149
|
|
184
150
|
result
|
@@ -194,47 +160,37 @@ class Miam::Exporter
|
|
194
160
|
result[instance_profile_name] = {
|
195
161
|
:path => instance_profile.path,
|
196
162
|
}
|
197
|
-
|
198
|
-
progress
|
199
163
|
end
|
200
164
|
end
|
201
165
|
|
202
166
|
result
|
203
167
|
end
|
204
168
|
|
205
|
-
def
|
206
|
-
@iam.
|
207
|
-
resp.instance_profiles.
|
208
|
-
instance_profile.instance_profile_name
|
209
|
-
end
|
169
|
+
def list_instance_profiles
|
170
|
+
@iam.list_instance_profiles.map {|resp|
|
171
|
+
resp.instance_profiles.to_a
|
210
172
|
}.flatten
|
211
173
|
end
|
212
174
|
|
213
|
-
def
|
214
|
-
|
215
|
-
resp.users.to_a
|
216
|
-
}.flatten
|
217
|
-
end
|
175
|
+
def get_account_authorization_details
|
176
|
+
account_authorization_details = {}
|
218
177
|
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
178
|
+
keys = [
|
179
|
+
:user_detail_list,
|
180
|
+
:group_detail_list,
|
181
|
+
:role_detail_list,
|
182
|
+
]
|
224
183
|
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
}.flatten
|
229
|
-
end
|
184
|
+
keys.each do |key|
|
185
|
+
account_authorization_details[key] = []
|
186
|
+
end
|
230
187
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
188
|
+
@iam.get_account_authorization_details.each do |resp|
|
189
|
+
keys.each do |key|
|
190
|
+
account_authorization_details[key].concat(resp[key])
|
191
|
+
end
|
192
|
+
end
|
236
193
|
|
237
|
-
|
238
|
-
@progressbar.increment if @progressbar
|
194
|
+
account_authorization_details
|
239
195
|
end
|
240
196
|
end
|
data/lib/miam/version.rb
CHANGED
data/miam.gemspec
CHANGED
@@ -21,7 +21,6 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
23
|
spec.add_dependency 'aws-sdk-core', '~> 2.0.3'
|
24
|
-
spec.add_dependency 'ruby-progressbar'
|
25
24
|
spec.add_dependency 'parallel'
|
26
25
|
spec.add_dependency 'term-ansicolor'
|
27
26
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
data/spec/spec_helper.rb
CHANGED
@@ -29,7 +29,6 @@ end
|
|
29
29
|
def client(user_options = {})
|
30
30
|
options = {
|
31
31
|
logger: Logger.new('/dev/null'),
|
32
|
-
no_progress: true
|
33
32
|
}
|
34
33
|
|
35
34
|
options[:password_manager] = Miam::PasswordManager.new('/dev/null', options)
|
@@ -76,7 +75,7 @@ def apply(cli = client)
|
|
76
75
|
end
|
77
76
|
|
78
77
|
def export(options = {})
|
79
|
-
options = {
|
78
|
+
options = {}.merge(options)
|
80
79
|
cli = options.delete(:client) || Aws::IAM::Client.new
|
81
80
|
Miam::Exporter.export(cli, options)[0]
|
82
81
|
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.
|
4
|
+
version: 0.2.0.beta
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-core
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 2.0.3
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: ruby-progressbar
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '>='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - '>='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: parallel
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -189,9 +175,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
189
175
|
version: '0'
|
190
176
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
177
|
requirements:
|
192
|
-
- - '
|
178
|
+
- - '>'
|
193
179
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
180
|
+
version: 1.3.1
|
195
181
|
requirements: []
|
196
182
|
rubyforge_project:
|
197
183
|
rubygems_version: 2.0.14
|