awskeyring 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf00f602f71d488e5786047871727580791f3805cf53055c9d720801bae6b75b
4
- data.tar.gz: be06827683d764c13767a1cda773b81dd1bcfa5e4c09958119a1b8b63698ec9c
3
+ metadata.gz: 30c8d91672aa45d4ed0bdf0500ce5ba053f510cd170958a785854ff10b5f0477
4
+ data.tar.gz: fc3e66624ea7712eedcba77119b09be088e06a5f4efd2c9d4c92388d26a2f4b0
5
5
  SHA512:
6
- metadata.gz: 1adf1d2f3a8e3791494fb473a91ccebf471390120cebcbb0d1372824407637077eec4dbab37fcd4036b7f88488ba0e12e185169723144db4f5dad9222ab354b0
7
- data.tar.gz: 2d829ba0a4fd623b52364f9b4b1e7918240722da89062f23e14c21d797bf2a7f55943579c39ae09f42933515f0ea476dfe23e6090dd98de6669da34aeda4b329
6
+ metadata.gz: 61d4e71bec6c42d350c3f3b3915c07dc70cc90c86c219774ac85bb5bc6aff7e6b09800c6efeff06ee50dbb44cb13219e6ffee2974addc3f95be480065f1d8b6e
7
+ data.tar.gz: d6b3489c866531e8c0c24cc3ed9a140ec734d88ae417e76610990170d08aa69c465b182c3c8dc45a131c3d10e2c80b909ee926ecfce9d83ad1e70eb6df00519b
@@ -1,6 +1,19 @@
1
1
  # Changelog
2
2
 
3
- ## [v1.3.0](https://github.com/servian/awskeyring/tree/v1.3.0) (2020-02-20)
3
+ ## [v1.3.1](https://github.com/servian/awskeyring/tree/v1.3.1) (2020-03-20)
4
+
5
+ [Full Changelog](https://github.com/servian/awskeyring/compare/v1.3.0...v1.3.1)
6
+
7
+ **Implemented enhancements:**
8
+
9
+ - Markdown linting changes and removed Rubocop-MD. [\#61](https://github.com/servian/awskeyring/pull/61) ([tristanmorgan](https://github.com/tristanmorgan))
10
+ - Removed some redundant code. [\#60](https://github.com/servian/awskeyring/pull/60) ([tristanmorgan](https://github.com/tristanmorgan))
11
+
12
+ **Merged pull requests:**
13
+
14
+ - Update Ronn code and PR template. [\#59](https://github.com/servian/awskeyring/pull/59) ([tristanmorgan](https://github.com/tristanmorgan))
15
+
16
+ ## [v1.3.0](https://github.com/servian/awskeyring/tree/v1.3.0) (2020-02-19)
4
17
 
5
18
  [Full Changelog](https://github.com/servian/awskeyring/compare/v1.2.0...v1.3.0)
6
19
 
@@ -35,7 +35,7 @@ A friendly `README.md` written for many audiences.
35
35
 
36
36
  The [wiki].
37
37
 
38
- ### API documentation
38
+ ### API documentation
39
39
 
40
40
  API documentation is written as [YARD] docblocks in the Ruby code.
41
41
 
data/Gemfile CHANGED
@@ -11,7 +11,6 @@ group :development do
11
11
  gem 'ronn'
12
12
  gem 'rspec'
13
13
  gem 'rubocop'
14
- gem 'rubocop-md'
15
14
  gem 'rubocop-performance'
16
15
  gem 'rubocop-rake'
17
16
  gem 'rubocop-rspec'
data/README.md CHANGED
@@ -44,7 +44,9 @@ Now your keys are stored safely in the macOS keychain. To print environment vari
44
44
 
45
45
  awskeyring env personal-aws
46
46
 
47
- Alternatively you can create a profile using the credential_process config variable. See the [AWS CLI Config docs](https://docs.aws.amazon.com/cli/latest/topic/config-vars.html#cli-aws-help-config-vars) for more details on this config option.
47
+ Alternatively you can create a profile using the credential_process config variable. See the
48
+ [AWS CLI Config docs](https://docs.aws.amazon.com/cli/latest/topic/config-vars.html#cli-aws-help-config-vars) for
49
+ more details on this config option.
48
50
 
49
51
  [profile personal]
50
52
  region = us-west-1
@@ -87,22 +89,28 @@ To set your environment easily the following bash function helps:
87
89
 
88
90
  ## Development
89
91
 
90
- After checking out the repo, run `bundle update` to install dependencies. Then, run `bundle exec rake` to run the tests. Run `bundle exec awskeyring` to use the gem in this directory, ignoring other installed copies of this gem. Awskeyring is tested against the last two versions of Ruby shipped with macOS.
92
+ After checking out the repo, run `bundle update` to install dependencies. Then, run `bundle exec rake` to run the
93
+ tests. Run `bundle exec awskeyring` to use the gem in this directory, ignoring other installed copies of this gem.
94
+ Awskeyring is tested against the last two versions of Ruby shipped with macOS.
91
95
 
92
96
  To install this gem onto your local machine, run `bundle exec rake install`.
93
97
 
94
98
  ## Security
95
99
 
96
- If you believe you have found a security issue in Awskeyring, please responsibly disclose by contacting me at [tristan@vibrato.com.au](mailto:tristan@vibrato.com.au). Awskeyring is a Ruby script and as such Ruby is whitelisted to access your "awskeyring" keychain. Use a strong password and keep the unlock time short.
100
+ If you believe you have found a security issue in Awskeyring, please responsibly disclose by contacting me at
101
+ [tristan@vibrato.com.au](mailto:tristan@vibrato.com.au). Awskeyring is a Ruby script and as such Ruby is whitelisted
102
+ to access your "awskeyring" keychain. Use a strong password and keep the unlock time short.
97
103
 
98
104
  ## Contributing
99
105
 
100
- Bug reports and pull requests are welcome on GitHub at https://github.com/servian/awskeyring. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](https://contributor-covenant.org) code of conduct.
106
+ Bug reports and pull requests are welcome on GitHub at [https://github.com/servian/awskeyring](https://github.com/servian/awskeyring).
107
+ This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to
108
+ the [Contributor Covenant](https://contributor-covenant.org) code of conduct.
101
109
 
102
110
  ### Contributors
103
111
 
104
- * Tristan [tristanmorgan](https://github.com/tristanmorgan)
105
- * Adam Sir [AzySir](https://github.com/AzySir)
112
+ * Tristan [tristanmorgan](https://github.com/tristanmorgan)
113
+ * Adam Sir [AzySir](https://github.com/AzySir)
106
114
 
107
115
  ## License
108
116
 
data/Rakefile CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
5
  require 'rubocop/rake_task'
6
+ require 'ronn'
6
7
  require 'github_changelog_generator/task'
7
8
  require 'yard'
8
9
 
@@ -15,6 +16,10 @@ end
15
16
 
16
17
  RuboCop::RakeTask.new do |rubocop|
17
18
  rubocop.options = ['-D']
19
+ rubocop.requires << 'rubocop-performance'
20
+ rubocop.requires << 'rubocop-rake'
21
+ rubocop.requires << 'rubocop-rspec'
22
+ rubocop.requires << 'rubocop-rubycw'
18
23
  end
19
24
 
20
25
  RSpec::Core::RakeTask.new(:spec)
@@ -37,8 +42,10 @@ end
37
42
 
38
43
  desc 'generate manpage'
39
44
  task :ronn do
40
- system('ronn -w -r man/awskeyring.5.ronn')
41
- puts
45
+ puts 'Writing manpage'
46
+ roff_text = Ronn::Document.new('man/awskeyring.5.ronn').to_roff
47
+ File.write('man/awskeyring.5', roff_text)
48
+ puts "done\n\n"
42
49
  end
43
50
 
44
51
  YARD::Rake::YardocTask.new do |t|
@@ -24,6 +24,7 @@ module Awskeyring
24
24
 
25
25
  # AWS Env vars
26
26
  AWS_ENV_VARS = %w[
27
+ AWS_ACCOUNT_NAME
27
28
  AWS_ACCESS_KEY_ID
28
29
  AWS_ACCESS_KEY
29
30
  AWS_SECRET_ACCESS_KEY
@@ -116,29 +117,23 @@ module Awskeyring
116
117
  # Generates Environment Variables for the AWS CLI
117
118
  #
118
119
  # @param [Hash] params including
119
- # [String] account The aws_access_key_id
120
+ # [String] account The aws account name
121
+ # [String] key The aws_access_key_id
120
122
  # [String] secret The aws_secret_access_key
121
123
  # [String] token The aws_session_token
122
124
  # @return [Hash] env_var hash
123
125
  def self.get_env_array(params = {})
124
126
  env_var = {}
125
127
  env_var['AWS_DEFAULT_REGION'] = 'us-east-1' unless region
126
- env_var['AWS_ACCOUNT_NAME'] = params[:account] if params[:account]
127
128
 
128
- if params[:key]
129
- env_var['AWS_ACCESS_KEY_ID'] = params[:key]
130
- env_var['AWS_ACCESS_KEY'] = params[:key]
131
- end
132
-
133
- if params[:secret]
134
- env_var['AWS_SECRET_ACCESS_KEY'] = params[:secret]
135
- env_var['AWS_SECRET_KEY'] = params[:secret]
129
+ params.each_key do |param_name|
130
+ AWS_ENV_VARS.each do |var_name|
131
+ if var_name.include?(param_name.to_s.upcase) && !params[param_name].nil?
132
+ env_var[var_name] = params[param_name]
133
+ end
134
+ end
136
135
  end
137
136
 
138
- if params[:token]
139
- env_var['AWS_SECURITY_TOKEN'] = params[:token]
140
- env_var['AWS_SESSION_TOKEN'] = params[:token]
141
- end
142
137
  env_var
143
138
  end
144
139
 
@@ -166,30 +161,22 @@ module Awskeyring
166
161
  # @param [String] user The local username
167
162
  # @param [String] path within the Console to access
168
163
  # @return [String] login_url to access
169
- def self.get_login_url(key:, secret:, token:, path:, user:) # rubocop:disable Metrics/MethodLength
164
+ def self.get_login_url(key:, secret:, token:, path:, user:)
170
165
  console_url = "https://console.aws.amazon.com/#{path}/home"
171
166
 
172
- if token
173
- session_json = {
174
- sessionId: key,
175
- sessionKey: secret,
176
- sessionToken: token
177
- }.to_json
178
- else
179
- ENV['AWS_DEFAULT_REGION'] = 'us-east-1' unless region
180
- sts = Aws::STS::Client.new(access_key_id: key,
181
- secret_access_key: secret)
182
-
183
- session = sts.get_federation_token(name: user,
184
- policy: ADMIN_POLICY,
185
- duration_seconds: TWELVE_HOUR)
186
- session_json = {
187
- sessionId: session.credentials[:access_key_id],
188
- sessionKey: session.credentials[:secret_access_key],
189
- sessionToken: session.credentials[:session_token]
190
- }.to_json
167
+ unless token
168
+ cred = get_token({ key: key, secret: secret, user: user, duration: TWELVE_HOUR })
169
+ key = cred[:key]
170
+ secret = cred[:secret]
171
+ token = cred[:token]
191
172
  end
192
173
 
174
+ session_json = {
175
+ sessionId: key,
176
+ sessionKey: secret,
177
+ sessionToken: token
178
+ }.to_json
179
+
193
180
  destination_param = '&Destination=' + CGI.escape(console_url)
194
181
 
195
182
  AWS_SIGNIN_URL + '?Action=login' + token_param(session_json: session_json) + destination_param
@@ -235,10 +222,10 @@ module Awskeyring
235
222
  exit 1
236
223
  end
237
224
 
238
- new_key = iam.create_access_key
225
+ new_key = iam.create_access_key[:access_key]
239
226
  iam = Aws::IAM::Client.new(
240
- access_key_id: new_key[:access_key][:access_key_id],
241
- secret_access_key: new_key[:access_key][:secret_access_key]
227
+ access_key_id: new_key[:access_key_id],
228
+ secret_access_key: new_key[:secret_access_key]
242
229
  )
243
230
  retry_backoff do
244
231
  iam.delete_access_key(
@@ -247,8 +234,8 @@ module Awskeyring
247
234
  end
248
235
  {
249
236
  account: account,
250
- key: new_key[:access_key][:access_key_id],
251
- secret: new_key[:access_key][:secret_access_key]
237
+ key: new_key[:access_key_id],
238
+ secret: new_key[:secret_access_key]
252
239
  }
253
240
  end
254
241
 
@@ -6,7 +6,7 @@ require 'json'
6
6
  # Version const and query of latest.
7
7
  module Awskeyring
8
8
  # The Gem's version number
9
- VERSION = '1.3.0'
9
+ VERSION = '1.3.1'
10
10
  # The Gem's homepage
11
11
  HOMEPAGE = 'https://github.com/servian/awskeyring'
12
12
 
@@ -289,7 +289,7 @@ class AwskeyringCommand < Thor # rubocop:disable Metrics/ClassLength
289
289
  method_option :code, type: :string, aliases: '-c', desc: I18n.t('method_option.code')
290
290
  method_option :duration, type: :string, aliases: '-d', desc: I18n.t('method_option.duration')
291
291
  # generate a sessiopn token
292
- def token(account = nil, role = nil, code = nil) # rubocop:disable all
292
+ def token(account = nil, role = nil, code = nil) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
293
293
  account = ask_check(
294
294
  existing: account,
295
295
  message: I18n.t('message.account'),
@@ -309,19 +309,13 @@ class AwskeyringCommand < Thor # rubocop:disable Metrics/ClassLength
309
309
  existing: code, message: I18n.t('message.code'), validator: Awskeyring::Validate.method(:mfa_code)
310
310
  )
311
311
  end
312
- duration = options[:duration]
313
- duration ||= Awskeyring::Awsapi::ONE_HOUR.to_s if role
314
- duration ||= Awskeyring::Awsapi::TWELVE_HOUR.to_s if code
315
- duration ||= Awskeyring::Awsapi::ONE_HOUR.to_s
316
-
317
312
  item_hash = age_check_and_get(account: account, no_token: true)
318
- role_arn = Awskeyring.get_role_arn(role_name: role) if role
319
313
 
320
314
  begin
321
315
  new_creds = Awskeyring::Awsapi.get_token(
322
316
  code: code,
323
- role_arn: role_arn,
324
- duration: duration,
317
+ role_arn: (Awskeyring.get_role_arn(role_name: role) if role),
318
+ duration: default_duration(options[:duration], role, code),
325
319
  mfa: item_hash[:mfa],
326
320
  key: item_hash[:key],
327
321
  secret: item_hash[:secret],
@@ -471,6 +465,12 @@ class AwskeyringCommand < Thor # rubocop:disable Metrics/ClassLength
471
465
  Awskeyring::Awsapi::AWS_ENV_VARS.each { |key| puts "unset #{key}" unless env_var.key?(key) }
472
466
  end
473
467
 
468
+ def default_duration(duration, role, code)
469
+ duration ||= Awskeyring::Awsapi::ONE_HOUR.to_s if role
470
+ duration ||= Awskeyring::Awsapi::TWELVE_HOUR.to_s if code
471
+ duration || Awskeyring::Awsapi::ONE_HOUR.to_s
472
+ end
473
+
474
474
  def ask_check(existing:, message:, flags: nil, validator: nil, limited_to: nil) # rubocop:disable Metrics/MethodLength
475
475
  retries ||= 3
476
476
  begin
@@ -1,10 +1,10 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "AWSKEYRING" "5" "February 2020" "" ""
4
+ .TH "AWSKEYRING" "5" "March 2020" "" ""
5
5
  .
6
6
  .SH "NAME"
7
- \fBAwskeyring\fR \- is a small tool to manage AWS account keys in the macOS Keychain\.
7
+ \fBAwskeyring\fR \- is a small tool to manage AWS account keys in the macOS Keychain
8
8
  .
9
9
  .SH "SYNOPSIS"
10
10
  awskeyring COMMAND [ACCOUNT|ROLE] [OPTIONS]
@@ -13,7 +13,7 @@ awskeyring COMMAND [ACCOUNT|ROLE] [OPTIONS]
13
13
  awskeyring help COMMAND
14
14
  .
15
15
  .SH "DESCRIPTION"
16
- The Awskeyring utility stores and manages AWS access keys and provides the facailty to generate access tokens with combinations of assumed roles and multi\-factor\-authentication codes\. It includes autocompletion features and multiple validation checks for input parsing\. It also includes the ability for the AWS CLI to call it directly to provide authentication\.
16
+ The Awskeyring utility stores and manages AWS access keys and provides the facility to generate access tokens with combinations of assumed roles and multi\-factor\-authentication codes\. It includes autocompletion features and multiple validation checks for input parsing\. It also includes the ability for the AWS CLI to call it directly to provide authentication\.
17
17
  .
18
18
  .P
19
19
  The commands are as follows:
@@ -1,4 +1,4 @@
1
- # Awskeyring -- is a small tool to manage AWS account keys in the macOS Keychain.
1
+ # Awskeyring -- is a small tool to manage AWS account keys in the macOS Keychain
2
2
 
3
3
  ## SYNOPSIS
4
4
 
@@ -8,81 +8,84 @@ awskeyring help COMMAND
8
8
 
9
9
  ## DESCRIPTION
10
10
 
11
- The Awskeyring utility stores and manages AWS access keys and provides the facailty to generate access tokens with combinations of assumed roles and multi-factor-authentication codes. It includes autocompletion features and multiple validation checks for input parsing. It also includes the ability for the AWS CLI to call it directly to provide authentication.
11
+ The Awskeyring utility stores and manages AWS access keys and provides the facility to generate access tokens with
12
+ combinations of assumed roles and multi-factor-authentication codes. It includes autocompletion features and multiple
13
+ validation checks for input parsing. It also includes the ability for the AWS CLI to call it directly to provide authentication.
12
14
 
13
15
  The commands are as follows:
14
16
 
15
- * --version, -v:
17
+ * --version, -v:
16
18
 
17
19
  Prints the version
18
20
 
19
- * add ACCOUNT:
21
+ * add ACCOUNT:
20
22
 
21
23
  Adds an ACCOUNT to the keyring
22
24
 
23
- * add-role ROLE:
25
+ * add-role ROLE:
24
26
 
25
27
  Adds a ROLE to the keyring
26
28
 
27
- * console ACCOUNT:
29
+ * console ACCOUNT:
28
30
 
29
31
  Open the AWS Console for the ACCOUNT
30
32
 
31
- * env ACCOUNT:
33
+ * env ACCOUNT:
32
34
 
33
35
  Outputs bourne shell environment exports for an ACCOUNT
34
36
 
35
- * exec ACCOUNT command...:
37
+ * exec ACCOUNT command...:
36
38
 
37
39
  Execute a COMMAND with the environment set for an ACCOUNT
38
40
 
39
- * help [COMMAND]:
41
+ * help [COMMAND]:
40
42
 
41
43
  Describe available commands or one specific command
42
44
 
43
- * initialise:
45
+ * initialise:
44
46
 
45
47
  Initialises a new KEYCHAIN
46
48
 
47
- * json ACCOUNT:
49
+ * json ACCOUNT:
48
50
 
49
51
  Outputs AWS CLI compatible JSON for an ACCOUNT
50
52
 
51
- * list:
53
+ * list:
52
54
 
53
55
  Prints a list of accounts in the keyring
54
56
 
55
- * list-role:
57
+ * list-role:
56
58
 
57
59
  Prints a list of roles in the keyring
58
60
 
59
- * remove ACCOUNT:
61
+ * remove ACCOUNT:
60
62
 
61
63
  Removes an ACCOUNT from the keyring
62
64
 
63
- * remove-role ROLE:
65
+ * remove-role ROLE:
64
66
 
65
67
  Removes a ROLE from the keyring
66
68
 
67
- * remove-token ACCOUNT:
69
+ * remove-token ACCOUNT:
68
70
 
69
71
  Removes a token for ACCOUNT from the keyring
70
72
 
71
- * rotate ACCOUNT:
73
+ * rotate ACCOUNT:
72
74
 
73
75
  Rotate access keys for an ACCOUNT
74
76
 
75
- * token ACCOUNT [ROLE] [MFA]:
77
+ * token ACCOUNT [ROLE] [MFA]:
76
78
 
77
79
  Create an STS Token from a ROLE or an MFA code
78
80
 
79
- * update ACCOUNT:
81
+ * update ACCOUNT:
80
82
 
81
83
  Updates an ACCOUNT in the keyring
82
84
 
83
85
  ## ENVIRONMENT
84
86
 
85
- The AWS_DEFAULT_REGION environment variable will be used for AWS API calls where specified or fall back to us-east-1 when not.
87
+ The AWS_DEFAULT_REGION environment variable will be used for AWS API calls where specified or fall back to us-east-1
88
+ when not.
86
89
 
87
90
  ## EXIT STATUS
88
91
 
@@ -113,7 +116,9 @@ like [HashiCorp Vault](https://vaultproject.io/).
113
116
 
114
117
  ## SECURITY
115
118
 
116
- If you believe you have found a security issue in Awskeyring, please responsibly disclose by contacting me at [tristan@vibrato.com.au](mailto:tristan@vibrato.com.au). Awskeyring is a Ruby script and as such Ruby is whitelisted to access your "awskeyring" keychain. Use a strong password and keep the unlock time short.
119
+ If you believe you have found a security issue in Awskeyring, please responsibly disclose by contacting me at
120
+ [tristan@vibrato.com.au](mailto:tristan@vibrato.com.au). Awskeyring is a Ruby script and as such Ruby is whitelisted to
121
+ access your "awskeyring" keychain. Use a strong password and keep the unlock time short.
117
122
 
118
123
  ## AUTHOR
119
124
 
@@ -121,8 +126,8 @@ Tristan Morgan <tristan@vibrato.com.au> is the maintainer of Awskeyring.
121
126
 
122
127
  ## CONTRIBUTORS
123
128
 
124
- * Tristan [tristanmorgan](https://github.com/tristanmorgan)
125
- * Adam Sir [AzySir](https://github.com/AzySir)
129
+ * Tristan [tristanmorgan](https://github.com/tristanmorgan)
130
+ * Adam Sir [AzySir](https://github.com/AzySir)
126
131
 
127
132
  ## LICENSE
128
133
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awskeyring
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tristan Morgan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-19 00:00:00.000000000 Z
11
+ date: 2020-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-iam