aws-rotate 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 207cf2ce3e4f6e03f138a2757ba3d64cad3dc825793db640cb90505a0890b077
4
- data.tar.gz: f5990b39c5d8ffc3c1a53a93b91e8fd0dfe194dfdaadd7080fc32b8ba3c61770
3
+ metadata.gz: 6a8227dbc10aa515ededb79a5640969eac1315f8d2ff5e606d403bf03b82d402
4
+ data.tar.gz: d9422bf3540a31c35aae40aa856fd2686649bfeca4e05658616033f2c22b640b
5
5
  SHA512:
6
- metadata.gz: c0b8b7ccbc346a5453af992b8134cf35038cda8bf996d936b73255c2af46dd9ddf29b1ddaf0b940d2cc98ae3919311a2d88b1c5c79545565855548381118a583
7
- data.tar.gz: 7a9df313347d41310662b9c7896f962d42dd7992c4fa443710b363e211f33c2fe6942c2daf444ce0648da561d8c075162767d6d99b39e794f3caaca9e5b756f6
6
+ metadata.gz: 1d07348115dd82167e285edda3f314ec51315497bd12d61064aa74db87977e49a07da92bbad2d97be0e7aeb4f4f8a3da1178911c28538c9c8c5a74de3e398b1a
7
+ data.tar.gz: 7b2860846d492a8998b842002c15e8ae2cc8c25a5bce9ae4625733d774f7544e7e37616d041fb0f771873f909c7afb53b7e8545aabf6ea828e6ea1d7011a9e8a
data/.gitignore CHANGED
@@ -14,3 +14,4 @@ spec/reports
14
14
  test/tmp
15
15
  test/version_tmp
16
16
  tmp
17
+ Gemfile.lock
@@ -3,6 +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.3.0]
7
+ - only rotate profiles with keys. skip profiles using assumed role.
8
+
6
9
  ## [0.2.0]
7
10
  - continue rotating when hit max keys limit on a profile
8
11
  - improve GetIamUserError message for key command
data/README.md CHANGED
@@ -29,11 +29,6 @@ Example output:
29
29
  Updating access key for AWS_PROFILE=default
30
30
  Updated profile default in /home/ec2-user/.aws/credentials with new key: AKIAXZ6ODJLQWYW3575A
31
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
32
  $
38
33
 
39
34
  ### select filter option
@@ -98,16 +93,16 @@ You can add something like this:
98
93
 
99
94
  30 20 * * * bash -l -c 'aws-rotate keys --select dev-aws-profile test-aws-profile --no-backup >> /var/log/cron-aws-rotate.log 2>&1' # rotate AWS keys daily
100
95
 
101
- Create a `/var/log/cron/aws-rotate.log` that is writable with your user:
96
+ Create a `/var/log/cron-aws-rotate.log` that is writable with your user:
102
97
 
103
98
  sudo touch /var/log/cron-aws-rotate.log
104
99
  sudo chown `whoami`:`whoami` /var/log/cron-aws-rotate.log
105
100
 
106
101
  ## Installation
107
102
 
108
- Add this line to your application's Gemfile:
103
+ You can install the tool with:
109
104
 
110
- gem "aws-rotate"
105
+ gem install aws-rotate
111
106
 
112
107
  ## Requirements
113
108
 
@@ -8,6 +8,7 @@ module AwsRotate
8
8
  # and report errors early on. The noop check happens after this initial check.
9
9
  # Also with this we can filter for only the keys thats that have associated users and will be updated.
10
10
  # Only the profiles with IAM users will be shown as "Updating..."
11
+ puts "AWS_PROFILE=#{ENV['AWS_PROFILE']}"
11
12
  @user = get_iam_user # will only rotate keys that belong to an actual IAM user
12
13
  return unless @user
13
14
 
@@ -61,6 +62,10 @@ module AwsRotate
61
62
  puts "The AWS_PROFILE=#{@profile} profile seems to have invalid secret keys. Please double check it.".color(:red)
62
63
  puts "#{e.class} #{e.message}"
63
64
  raise GetIamUserError
65
+ rescue Aws::Errors::NoSourceProfileError => e
66
+ puts "WARN: The AWS_PROFILE=#{@profile} profile does not have have access keys.".color(:yellow)
67
+ puts "#{e.class} #{e.message}"
68
+ raise GetIamUserError
64
69
  end
65
70
 
66
71
  # Check if there are 2 keys, cannot rotate if there are 2 keys already.
@@ -1,20 +1,45 @@
1
1
  module AwsRotate
2
2
  class List < Base
3
+ def initialize(options={})
4
+ super
5
+ @lines = IO.readlines(@credentials_path)
6
+ end
7
+
3
8
  def run
4
9
  puts "AWS Profiles:"
5
10
  puts profiles
11
+ profiles
6
12
  end
7
13
 
14
+ # Only returns profiles that have aws_access_key_id associated
8
15
  def profiles
9
- lines = IO.readlines(@credentials_path)
10
- profiles = []
11
- lines.each do |line|
16
+ has_key, within_profile, profiles = false, false, []
17
+ all_profiles.each do |profile|
18
+ @lines.each do |line|
19
+ line = line.strip
20
+ within_profile = false if line =~ /^\[/ # on the next profile section, reset flag
21
+ within_profile ||= line == "[#{profile}]" # enable checking
22
+ if within_profile
23
+ has_key = line =~ /^aws_access_key_id/
24
+ if has_key
25
+ profiles << profile
26
+ break
27
+ end
28
+ end
29
+ end
30
+ end
31
+ profiles
32
+ end
33
+
34
+ def all_profiles
35
+ all_profiles = []
36
+ @lines.each do |line|
12
37
  next if line =~ /^\s*#/ # ignore comments
13
38
 
14
39
  md = line.match(/\[(.*)\]/)
15
- profiles << md[1] if md
40
+ all_profiles << md[1] if md
16
41
  end
17
- profiles
42
+ all_profiles
18
43
  end
19
44
  end
20
45
  end
@@ -1,3 +1,3 @@
1
1
  module AwsRotate
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -0,0 +1,12 @@
1
+ describe AwsRotate::List do
2
+ let(:list) do
3
+ AwsRotate::List.new
4
+ end
5
+
6
+ context "list" do
7
+ it "only profiles with credentials" do
8
+ profiles = list.run
9
+ expect(profiles).to eq %w[parent-account iam-account]
10
+ end
11
+ end
12
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-rotate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-14 00:00:00.000000000 Z
11
+ date: 2019-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -176,7 +176,6 @@ files:
176
176
  - ".rspec"
177
177
  - CHANGELOG.md
178
178
  - Gemfile
179
- - Gemfile.lock
180
179
  - Guardfile
181
180
  - LICENSE.txt
182
181
  - README.md
@@ -210,6 +209,7 @@ files:
210
209
  - spec/lib/cli_spec.rb
211
210
  - spec/lib/key_spec.rb
212
211
  - spec/lib/keys_spec.rb
212
+ - spec/lib/list_spec.rb
213
213
  - spec/spec_helper.rb
214
214
  homepage: https://github.com/tongueroo/aws-rotate
215
215
  licenses:
@@ -230,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
230
230
  - !ruby/object:Gem::Version
231
231
  version: '0'
232
232
  requirements: []
233
- rubygems_version: 3.0.3
233
+ rubygems_version: 3.0.6
234
234
  signing_key:
235
235
  specification_version: 4
236
236
  summary: Easy way to rotate all your AWS keys in your ~/.aws/credentials
@@ -240,4 +240,5 @@ test_files:
240
240
  - spec/lib/cli_spec.rb
241
241
  - spec/lib/key_spec.rb
242
242
  - spec/lib/keys_spec.rb
243
+ - spec/lib/list_spec.rb
243
244
  - spec/spec_helper.rb
@@ -1,95 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- aws-rotate (0.1.0)
5
- activesupport
6
- aws-sdk-core
7
- aws-sdk-iam
8
- rainbow
9
- thor
10
- zeitwerk
11
-
12
- GEM
13
- remote: https://rubygems.org/
14
- specs:
15
- activesupport (5.2.3)
16
- concurrent-ruby (~> 1.0, >= 1.0.2)
17
- i18n (>= 0.7, < 2)
18
- minitest (~> 5.1)
19
- tzinfo (~> 1.1)
20
- addressable (2.6.0)
21
- public_suffix (>= 2.0.2, < 4.0)
22
- aws-eventstream (1.0.3)
23
- aws-partitions (1.201.0)
24
- aws-sdk-core (3.62.0)
25
- aws-eventstream (~> 1.0, >= 1.0.2)
26
- aws-partitions (~> 1.0)
27
- aws-sigv4 (~> 1.1)
28
- jmespath (~> 1.0)
29
- aws-sdk-iam (1.29.0)
30
- aws-sdk-core (~> 3, >= 3.61.1)
31
- aws-sigv4 (~> 1.1)
32
- aws-sigv4 (1.1.0)
33
- aws-eventstream (~> 1.0, >= 1.0.2)
34
- byebug (11.0.1)
35
- cli_markdown (0.1.0)
36
- codeclimate-test-reporter (1.0.9)
37
- simplecov (<= 0.13)
38
- concurrent-ruby (1.1.5)
39
- crack (0.4.3)
40
- safe_yaml (~> 1.0.0)
41
- diff-lcs (1.3)
42
- docile (1.1.5)
43
- hashdiff (1.0.0)
44
- i18n (1.6.0)
45
- concurrent-ruby (~> 1.0)
46
- jmespath (1.4.0)
47
- json (2.2.0)
48
- minitest (5.11.3)
49
- public_suffix (3.1.1)
50
- rainbow (3.0.0)
51
- rake (12.3.3)
52
- rspec (3.8.0)
53
- rspec-core (~> 3.8.0)
54
- rspec-expectations (~> 3.8.0)
55
- rspec-mocks (~> 3.8.0)
56
- rspec-core (3.8.2)
57
- rspec-support (~> 3.8.0)
58
- rspec-expectations (3.8.4)
59
- diff-lcs (>= 1.2.0, < 2.0)
60
- rspec-support (~> 3.8.0)
61
- rspec-mocks (3.8.1)
62
- diff-lcs (>= 1.2.0, < 2.0)
63
- rspec-support (~> 3.8.0)
64
- rspec-support (3.8.2)
65
- safe_yaml (1.0.5)
66
- simplecov (0.13.0)
67
- docile (~> 1.1.0)
68
- json (>= 1.8, < 3)
69
- simplecov-html (~> 0.10.0)
70
- simplecov-html (0.10.2)
71
- thor (0.20.3)
72
- thread_safe (0.3.6)
73
- tzinfo (1.2.5)
74
- thread_safe (~> 0.1)
75
- webmock (3.6.2)
76
- addressable (>= 2.3.6)
77
- crack (>= 0.3.2)
78
- hashdiff (>= 0.4.0, < 2.0.0)
79
- zeitwerk (2.1.9)
80
-
81
- PLATFORMS
82
- ruby
83
-
84
- DEPENDENCIES
85
- aws-rotate!
86
- bundler
87
- byebug
88
- cli_markdown
89
- codeclimate-test-reporter
90
- rake
91
- rspec
92
- webmock
93
-
94
- BUNDLED WITH
95
- 2.0.2