aws-rotate 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +19 -0
- data/lib/aws_rotate/base.rb +1 -1
- data/lib/aws_rotate/key.rb +18 -5
- data/lib/aws_rotate/keys.rb +1 -8
- data/lib/aws_rotate/old_key.rb +3 -0
- data/lib/aws_rotate/version.rb +1 -1
- data/spec/lib/key_spec.rb +1 -1
- metadata +2 -2
- data/lib/aws_rotate/cache_key.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 207cf2ce3e4f6e03f138a2757ba3d64cad3dc825793db640cb90505a0890b077
|
4
|
+
data.tar.gz: f5990b39c5d8ffc3c1a53a93b91e8fd0dfe194dfdaadd7080fc32b8ba3c61770
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0b8b7ccbc346a5453af992b8134cf35038cda8bf996d936b73255c2af46dd9ddf29b1ddaf0b940d2cc98ae3919311a2d88b1c5c79545565855548381118a583
|
7
|
+
data.tar.gz: 7a9df313347d41310662b9c7896f962d42dd7992c4fa443710b363e211f33c2fe6942c2daf444ce0648da561d8c075162767d6d99b39e794f3caaca9e5b756f6
|
data/CHANGELOG.md
CHANGED
@@ -3,5 +3,9 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
5
5
|
|
6
|
+
## [0.2.0]
|
7
|
+
- continue rotating when hit max keys limit on a profile
|
8
|
+
- improve GetIamUserError message for key command
|
9
|
+
|
6
10
|
## [0.1.0]
|
7
11
|
- Initial release.
|
data/README.md
CHANGED
@@ -17,6 +17,25 @@ IMPORTANT: The `aws-rotate keys` command will update **all** the profiles found
|
|
17
17
|
|
18
18
|
aws-rotate keys --noop
|
19
19
|
|
20
|
+
Example output:
|
21
|
+
|
22
|
+
$ aws-rotate keys
|
23
|
+
Backed up credentials file at: /home/ec2-user/.aws/credentials.bak-2019-08-14-16:45:36
|
24
|
+
Updating access key for AWS_PROFILE=profile1
|
25
|
+
Created new access key: AKIAXZ6ODJLQWYW3575A
|
26
|
+
Updated profile profile1 in /home/ec2-user/.aws/credentials with new key: AKIAXZ6ODJLQWYW3575A
|
27
|
+
Old access key deleted: AKIAXZ6ODJLQ3Q5TJUHN
|
28
|
+
Please note, it sometimes take a few seconds or even minutes before the new IAM access key is usable.
|
29
|
+
Updating access key for AWS_PROFILE=default
|
30
|
+
Updated profile default in /home/ec2-user/.aws/credentials with new key: AKIAXZ6ODJLQWYW3575A
|
31
|
+
Please note, it sometimes take a few seconds or even minutes before the new IAM access key is usable.
|
32
|
+
Updating access key for AWS_PROFILE=profile2
|
33
|
+
Created new access key: AKIAXCGZM5KIS35XPH5R
|
34
|
+
Updated profile profile2 in /home/ec2-user/.aws/credentials with new key: AKIAXCGZM5KIS35XPH5R
|
35
|
+
Old access key deleted: AKIAXCGZM5KI63JFCKFD
|
36
|
+
Please note, it sometimes take a few seconds or even minutes before the new IAM access key is usable.
|
37
|
+
$
|
38
|
+
|
20
39
|
### select filter option
|
21
40
|
|
22
41
|
If you would like to selectively update profiles, you can use the `--select` option. The `-s` option is also shorthand for the `--select` option. Example:
|
data/lib/aws_rotate/base.rb
CHANGED
data/lib/aws_rotate/key.rb
CHANGED
@@ -11,7 +11,9 @@ module AwsRotate
|
|
11
11
|
@user = get_iam_user # will only rotate keys that belong to an actual IAM user
|
12
12
|
return unless @user
|
13
13
|
|
14
|
-
check_max_keys_limit
|
14
|
+
at_max = check_max_keys_limit
|
15
|
+
return false if at_max
|
16
|
+
|
15
17
|
message = "Updating access key for AWS_PROFILE=#{@profile}"
|
16
18
|
message = "NOOP: #{message}" if @options[:noop]
|
17
19
|
puts message.color(:green)
|
@@ -25,10 +27,18 @@ module AwsRotate
|
|
25
27
|
true
|
26
28
|
end
|
27
29
|
|
30
|
+
def get_iam_user
|
31
|
+
get_iam_user!
|
32
|
+
rescue GetIamUserError
|
33
|
+
message = @options[:noop] ? "Will not be able to update key" : "Unable to update key"
|
34
|
+
puts "WARN: #{message} for AWS_PROFILE=#{@profile}".color(:yellow)
|
35
|
+
return false
|
36
|
+
end
|
37
|
+
|
28
38
|
# Returns IAM username.
|
29
39
|
# Returns nil unless this profile is actually associated with an user.
|
30
40
|
# Skips assume role profiles.
|
31
|
-
def get_iam_user
|
41
|
+
def get_iam_user!
|
32
42
|
resp = sts.get_caller_identity
|
33
43
|
arn = resp.arn
|
34
44
|
# Example arns:
|
@@ -55,15 +65,18 @@ module AwsRotate
|
|
55
65
|
|
56
66
|
# Check if there are 2 keys, cannot rotate if there are 2 keys already.
|
57
67
|
# Raise error if there are 2 keys.
|
68
|
+
# Returns false if not at max limit
|
58
69
|
MAX_KEYS = 2
|
59
70
|
def check_max_keys_limit!
|
60
71
|
resp = iam.list_access_keys(user_name: @user)
|
61
|
-
return if resp.access_key_metadata.size < MAX_KEYS
|
72
|
+
return false if resp.access_key_metadata.size < MAX_KEYS # not at max limit
|
62
73
|
raise MaxKeysError
|
63
74
|
end
|
64
75
|
|
65
76
|
# Check if there are 2 keys, cannot rotate if there are 2 keys already.
|
66
77
|
# Display info message for user to reduce it to 1 key.
|
78
|
+
# Returns false if not at max limit
|
79
|
+
# Returns true if at max limit
|
67
80
|
def check_max_keys_limit
|
68
81
|
check_max_keys_limit!
|
69
82
|
rescue MaxKeysError
|
@@ -71,7 +84,7 @@ module AwsRotate
|
|
71
84
|
This user #{@user} in the AWS_PROFILE=#{@profile} has 2 access keys. This is the max number of keys allowed.
|
72
85
|
Please remove at least one of the keys so aws-rotate can rotate the key.
|
73
86
|
EOL
|
74
|
-
|
87
|
+
true # at max limit
|
75
88
|
end
|
76
89
|
|
77
90
|
@@cache = {}
|
@@ -96,7 +109,7 @@ module AwsRotate
|
|
96
109
|
|
97
110
|
# store in cache to help with multiple profiles using the same aws access key
|
98
111
|
old_key_id = aws_configure_get(:aws_access_key_id)
|
99
|
-
@@cache[old_key_id] =
|
112
|
+
@@cache[old_key_id] = OldKey.new(old_key_id, key.access_key_id, key.secret_access_key)
|
100
113
|
|
101
114
|
puts "Created new access key: #{key.access_key_id}"
|
102
115
|
key
|
data/lib/aws_rotate/keys.rb
CHANGED
@@ -6,7 +6,7 @@ module AwsRotate
|
|
6
6
|
next unless filter_match?(profile)
|
7
7
|
|
8
8
|
ENV['AWS_PROFILE'] = profile
|
9
|
-
|
9
|
+
Key.new(@options).run
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -31,12 +31,5 @@ module AwsRotate
|
|
31
31
|
end
|
32
32
|
selected
|
33
33
|
end
|
34
|
-
|
35
|
-
def update_key
|
36
|
-
Key.new(@options).run
|
37
|
-
rescue Key::GetIamUserError
|
38
|
-
message = @options[:noop] ? "Will not be able to update key" : "Unable to update key"
|
39
|
-
puts "WARN: #{message} for AWS_PROFILE=#{@profile}".color(:yellow)
|
40
|
-
end
|
41
34
|
end
|
42
35
|
end
|
data/lib/aws_rotate/version.rb
CHANGED
data/spec/lib/key_spec.rb
CHANGED
@@ -3,7 +3,7 @@ describe AwsRotate::Key do
|
|
3
3
|
rotater = AwsRotate::Key.new
|
4
4
|
# The methods that are commented out have stubs at lower-levels.
|
5
5
|
# allow(rotater).to receive(:get_iam_user).and_return('tung')
|
6
|
-
allow(rotater).to receive(:check_max_keys_limit).and_return(
|
6
|
+
allow(rotater).to receive(:check_max_keys_limit).and_return(false)
|
7
7
|
allow(rotater).to receive(:cache_access_key).and_return(cache_access_key)
|
8
8
|
# allow(rotater).to receive(:create_access_key).and_return(create_access_key)
|
9
9
|
allow(rotater).to receive(:update_aws_credentials_file).and_return(null)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-rotate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
@@ -189,7 +189,6 @@ files:
|
|
189
189
|
- lib/aws_rotate/aws_services.rb
|
190
190
|
- lib/aws_rotate/backup.rb
|
191
191
|
- lib/aws_rotate/base.rb
|
192
|
-
- lib/aws_rotate/cache_key.rb
|
193
192
|
- lib/aws_rotate/cli.rb
|
194
193
|
- lib/aws_rotate/command.rb
|
195
194
|
- lib/aws_rotate/completer.rb
|
@@ -204,6 +203,7 @@ files:
|
|
204
203
|
- lib/aws_rotate/key.rb
|
205
204
|
- lib/aws_rotate/keys.rb
|
206
205
|
- lib/aws_rotate/list.rb
|
206
|
+
- lib/aws_rotate/old_key.rb
|
207
207
|
- lib/aws_rotate/version.rb
|
208
208
|
- spec/fixtures/home/.aws/config
|
209
209
|
- spec/fixtures/home/.aws/credentials
|
data/lib/aws_rotate/cache_key.rb
DELETED