settings_reader-vault_resolver 0.4.10 → 0.5.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: e80770a5709f4c47de9c79c771e2174749ad345d5f59584d83d406fd44b9d8cb
4
- data.tar.gz: 78d265a099e0a191bf01882cb666acfeecc802e1211fa097fe5588107720e90c
3
+ metadata.gz: f3e683be3539c3e3fd46bf0de60c78f11c7aeda4bbc321246298ec19b068fa84
4
+ data.tar.gz: 80a0bae40ee7bef3f22ac77761685fa89a53eeb21311295590dea2378c2b0a9b
5
5
  SHA512:
6
- metadata.gz: 900237697adf7ee9984e912bde5c1a8433ef345084db65d76d03d39fd1d904fc4f5859a9a7205634e2c1ccb5f9a807f1f2ba066b147ade86febb1695bd7ff9d7
7
- data.tar.gz: 7ff9538f5d886b99ace02d7eed050df0e017abba45de586d8c91e0c20bd7b505074545317df3b7a7f223728ea32dc39adf76a214f0f938e5ad9a3fbaf63b8e49
6
+ metadata.gz: 3c957e71f2730a18abe2b8a21e10d4fd93f1f0efcf779d7ca1f4cca791363a5bc5a2daeee83510b9a03b71045c7b8700957ce571ca5462355976e2fd203bd71a
7
+ data.tar.gz: ce4d399a56ec38e4bf39f87ecb759a0f5a77b7269f84de42a8d32b0ef477e25b38522513c03bcd92f60a47eeb43867a69af797a751f1e108ab071fb0f0a6cebf
@@ -18,28 +18,39 @@ jobs:
18
18
  runs-on: ubuntu-latest
19
19
  strategy:
20
20
  matrix:
21
- ruby: [ '2.5', '2.6', '2.7', '3.0' ]
22
- services:
23
- vault:
24
- image: hashicorp/vault
25
- ports:
26
- - "8200:8200"
27
- env:
28
- VAULT_DEV_ROOT_TOKEN_ID: vault_root_token
29
- SKIP_SETCAP: true
30
- database:
31
- image: postgres:14.1-alpine
32
- ports:
33
- - "5432:5432"
34
- env:
35
- POSTGRES_USER: 'vault_root'
36
- POSTGRES_PASSWORD: 'root_password'
37
- POSTGRES_DB: 'app_db'
38
- options: >-
39
- --health-cmd pg_isready
40
- --health-interval 10s
41
- --health-timeout 5s
42
- --health-retries 5
21
+ ruby: [ '2.7', '3.0', '3.3' ]
22
+ # services:
23
+ # vault:
24
+ # image: hashicorp/vault
25
+ # ports:
26
+ # - "8200:8200"
27
+ # env:
28
+ # VAULT_DEV_ROOT_TOKEN_ID: vault_root_token
29
+ # SKIP_SETCAP: true
30
+ # database:
31
+ # image: postgres:14.1-alpine
32
+ # ports:
33
+ # - "5432:5432"
34
+ # env:
35
+ # POSTGRES_USER: 'vault_root'
36
+ # POSTGRES_PASSWORD: 'root_password'
37
+ # POSTGRES_DB: 'app_db'
38
+ # options: >-
39
+ # --health-cmd pg_isready
40
+ # --health-interval 10s
41
+ # --health-timeout 5s
42
+ # --health-retries 5
43
+ # aws:
44
+ # image: localstack/localstack
45
+ # ports:
46
+ # - "127.0.0.1:4566:4566" # LocalStack Gateway
47
+ # - "127.0.0.1:4510-4559:4510-4559" # external services port range
48
+ # env:
49
+ # DEBUG: 0
50
+ # volumes:
51
+ # - '/home/runner/work/settings_reader-vault_resolver/local/localstack/app-access-policy.json:/etc/localstack/init/ready.d/app-access-policy.json'
52
+ # - '/home/runner/work/settings_reader-vault_resolver/local/localstack/app-assume-policy.json:/etc/localstack/init/ready.d/app-assume-policy.json'
53
+ # - '/home/runner/work/settings_reader-vault_resolver/local/localstack/init-aws.sh:/etc/localstack/init/ready.d/init-aws.sh'
43
54
  steps:
44
55
  - name: Checkout
45
56
  uses: actions/checkout@v1
@@ -50,8 +61,11 @@ jobs:
50
61
  ruby-version: ${{ matrix.ruby }}
51
62
  bundler-cache: true
52
63
 
53
- - name: Set up Vault
54
- run: sh local/vault/setup.sh
64
+ - name: Start Dependencies
65
+ run: |
66
+ docker-compose up -d
67
+ echo "Waiting 15 seconds for initial configuraiton"
68
+ sleep 15
55
69
 
56
70
  - name: Run specs
57
71
  env:
data/Gemfile.lock CHANGED
@@ -58,7 +58,7 @@ GEM
58
58
  simplecov-html (~> 0.11)
59
59
  simplecov_json_formatter (~> 0.1)
60
60
  simplecov-html (0.12.3)
61
- simplecov_json_formatter (0.1.3)
61
+ simplecov_json_formatter (0.1.4)
62
62
  timecop (0.9.4)
63
63
  unicode-display_width (2.1.0)
64
64
  vault (0.16.0)
@@ -78,4 +78,4 @@ DEPENDENCIES
78
78
  timecop
79
79
 
80
80
  BUNDLED WITH
81
- 2.1.4
81
+ 2.2.32
data/docker-compose.yml CHANGED
@@ -2,12 +2,20 @@
2
2
  version: '3'
3
3
  services:
4
4
  vault:
5
- image: vault
5
+ image: hashicorp/vault
6
6
  ports:
7
7
  - "8200:8200"
8
8
  environment:
9
9
  VAULT_DEV_ROOT_TOKEN_ID: 'vault_root_token'
10
10
  SKIP_SETCAP: 'true'
11
+ # playground:
12
+ # image: hashicorp/vault
13
+ # command:
14
+ # - sleep
15
+ # - '10000000000'
16
+ # environment:
17
+ # VAULT_ADDR: 'http://aws:8200'
18
+ # VAULT_TOKEN: 'vault_root_token'
11
19
  db:
12
20
  image: postgres:14.1-alpine
13
21
  ports:
@@ -16,11 +24,24 @@ services:
16
24
  POSTGRES_USER: 'vault_root'
17
25
  POSTGRES_PASSWORD: 'root_password'
18
26
  POSTGRES_DB: 'app_db'
27
+ aws:
28
+ image: localstack/localstack
29
+ ports:
30
+ - "127.0.0.1:4566:4566" # LocalStack Gateway
31
+ - "127.0.0.1:4510-4559:4510-4559" # external services port range
32
+ environment:
33
+ # LocalStack configuration: https://docs.localstack.cloud/references/configuration/
34
+ - DEBUG=${DEBUG:-0}
35
+ volumes:
36
+ - './local/localstack/app-access-policy.json:/etc/localstack/init/ready.d/app-access-policy.json'
37
+ - './local/localstack/app-assume-policy.json:/etc/localstack/init/ready.d/app-assume-policy.json'
38
+ - './local/localstack/init-aws.sh:/etc/localstack/init/ready.d/init-aws.sh'
19
39
  init:
20
40
  image: curlimages/curl
21
41
  depends_on:
22
42
  - vault
23
43
  - db
44
+ - aws
24
45
  volumes:
25
46
  - './local/vault/setup.sh:/etc/vault/setup.sh'
26
47
  environment:
@@ -23,8 +23,8 @@ module SettingsReader
23
23
  end
24
24
 
25
25
  def fetch(address, &block)
26
- if !address.no_cache? && (exiting_entry = retrieve(address))
27
- exiting_entry
26
+ if !address.no_cache? && (existing_entry = retrieve(address))
27
+ existing_entry
28
28
  else
29
29
  new_entry = block.call(address)
30
30
  save(new_entry) if new_entry
@@ -70,6 +70,7 @@ module SettingsReader
70
70
  @vault_engines ||= [
71
71
  SettingsReader::VaultResolver::Engines::KV2.new(self),
72
72
  SettingsReader::VaultResolver::Engines::Database.new(self),
73
+ SettingsReader::VaultResolver::Engines::Aws.new(self),
73
74
  SettingsReader::VaultResolver::Engines::Auth.new(self)
74
75
  ]
75
76
  end
@@ -24,7 +24,7 @@ module SettingsReader
24
24
  end
25
25
 
26
26
  def renew(entry)
27
- return unless entry.leased?
27
+ return unless entry.renewable?
28
28
 
29
29
  new_secret = renew_and_retry_auth(entry)
30
30
  entry.update_renewed(new_secret)
@@ -0,0 +1,29 @@
1
+ module SettingsReader
2
+ module VaultResolver
3
+ module Engines
4
+ # Adapter to retrieve / renew secret from database engine
5
+ class Aws < Abstract
6
+ MOUNT = 'aws'.freeze
7
+
8
+ def retrieves?(address)
9
+ address.mount == MOUNT
10
+ end
11
+
12
+ private
13
+
14
+ def get_secret(address)
15
+ debug { "Fetching new aws secret at: #{address}" }
16
+ Vault.logical.read(address.full_path)
17
+ rescue Vault::HTTPClientError => e
18
+ return nil if e.message.match?('Role ".*" not found')
19
+
20
+ raise e
21
+ end
22
+
23
+ def renew_lease(entry)
24
+ Vault.sys.renew(entry.lease_id)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -13,10 +13,14 @@ module SettingsReader
13
13
  @lease_started = Time.now
14
14
  end
15
15
 
16
- def leased?
16
+ def renewable?
17
17
  @secret.renewable?
18
18
  end
19
19
 
20
+ def leased?
21
+ renewable? || @secret.lease_duration&.positive?
22
+ end
23
+
20
24
  def expired?
21
25
  return false unless leased?
22
26
 
@@ -19,7 +19,7 @@ module SettingsReader
19
19
  def refresh
20
20
  info { 'Performing Vault leases refresh' }
21
21
  promises = cache.active_entries.map do |entry|
22
- debug { "Checking lease for #{entry}. Leased?: #{entry.leased?}. Expires in: #{entry.expires_in}s" }
22
+ debug { "Checking lease for #{entry}. Renewable?: #{entry.renewable?}. Expires in: #{entry.expires_in}s" }
23
23
  refresh_entry(entry)
24
24
  end.compact
25
25
  promises.each(&:wait)
@@ -1,5 +1,5 @@
1
1
  module SettingsReader
2
2
  module VaultResolver
3
- VERSION = '0.4.10'.freeze
3
+ VERSION = '0.5.0'.freeze
4
4
  end
5
5
  end
@@ -11,6 +11,7 @@ require_relative 'vault_resolver/engines/abstract'
11
11
  require_relative 'vault_resolver/engines/auth'
12
12
  require_relative 'vault_resolver/engines/kv2'
13
13
  require_relative 'vault_resolver/engines/database'
14
+ require_relative 'vault_resolver/engines/aws'
14
15
  require_relative 'vault_resolver/cache'
15
16
  require_relative 'vault_resolver/refresher'
16
17
  require_relative 'vault_resolver/refresher_observer'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: settings_reader-vault_resolver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.10
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Volodymyr Mykhailyk
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-07-11 00:00:00.000000000 Z
11
+ date: 2024-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -85,6 +85,7 @@ files:
85
85
  - lib/settings_reader/vault_resolver/configuration.rb
86
86
  - lib/settings_reader/vault_resolver/engines/abstract.rb
87
87
  - lib/settings_reader/vault_resolver/engines/auth.rb
88
+ - lib/settings_reader/vault_resolver/engines/aws.rb
88
89
  - lib/settings_reader/vault_resolver/engines/database.rb
89
90
  - lib/settings_reader/vault_resolver/engines/kv2.rb
90
91
  - lib/settings_reader/vault_resolver/entry.rb