yaml_vault 0.2.0 → 0.3.0

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
  SHA1:
3
- metadata.gz: 2a0bdfb9602aac1932efba9fd68eab1083ed2c32
4
- data.tar.gz: 2e8f8caede77d7f49d50f0354a39d9809b9cfbe5
3
+ metadata.gz: 69e1a7131d0d79028214fbc73d520ab3389dabc0
4
+ data.tar.gz: a6a1c6c272c99df46d821ddbfc5a7e67c2750a7b
5
5
  SHA512:
6
- metadata.gz: 1b994e252cb2d603a1bc69944a0d5d575ad1c10e51b10ff834024f6ffe939c935a7483bc8cdd258651b734fcddc394e193f957d351021de0b8ca0f9372daaeec
7
- data.tar.gz: 7e2893a031100688009d2a71ac912b816cd85cc45c2bc802bd581aa29728a5f69d6a436d7d3b86515cdb3f065fcdbfae4471aa3431fed61e2912ed15d2ced025
6
+ metadata.gz: 33938873fd2529c5cc4cf98692e4d8238acddc05a99d03b5df7f8b918600cc8c29ea180c6c4380f8ec61d80a68c574055c07eb646121b78914fde77d7079e64a
7
+ data.tar.gz: 9018d7ea4c777f25afeb8c1f0dc891086a4af8c9204b18f6c119339766210ad6d4413cc75f43ae8042fcd2ef31a9aa467eb644ae5c17637ab17ee056c6303c30
data/Dockerfile ADDED
@@ -0,0 +1,5 @@
1
+ FROM ruby:2.3-alpine
2
+
3
+ RUN gem install yaml_vault aws-sdk --no-document
4
+
5
+ ENTRYPOINT ["yaml_vault"]
data/README.md CHANGED
@@ -90,6 +90,20 @@ vault:
90
90
  - four: 4
91
91
  ```
92
92
 
93
+ #### AWS KMS Encryption
94
+
95
+ Max encryptable size is 4096 bytes. (value size as encoded by Base64)
96
+
97
+ ```
98
+ % yaml_vault encrypt secrets.yml -o encrypted_secrets.yml --cryptor=aws-kms \
99
+ --aws-region=ap-northeast-1 \
100
+ --aws-kms-key-id=<kms-cms-key-id> \
101
+ --aws-access-key-id=<AWS_ACCESS_KEY_ID> \
102
+ --aws-secret-access-key=<AWS_SECRET_ACCESS_KEY>
103
+ ```
104
+
105
+ If region, access_key_id, secret_access_key is not set, use `ENV["AWS_REGION"]`, `ENV["AWS_ACCESS_KEY_ID"]`, `ENV["AWS_SECRET_ACCESS_KEY"]`.
106
+
93
107
  ### Decrypt
94
108
 
95
109
  ```
@@ -99,6 +113,48 @@ Enter passphrase: <enter your passphrase>
99
113
 
100
114
  If `ENV["YAML_VAULT_PASSPHRASE"]`, use it as passphrase
101
115
 
116
+ #### AWS KMS Decryption
117
+
118
+ ```
119
+ % yaml_vault decrypt encrypted_secrets.yml -o secrets.yml --cryptor=aws-kms \
120
+ --aws-region=ap-northeast-1 \
121
+ --aws-access-key-id=<AWS_ACCESS_KEY_ID> \
122
+ --aws-secret-access-key=<AWS_SECRET_ACCESS_KEY>
123
+ ```
124
+
125
+ ### Direct Assignment
126
+
127
+ ```ruby
128
+ # decrypt `configs['vault']` and `configs['production']['password']`
129
+
130
+ # Simple Encryption
131
+ configs = YamlVault::Main.from_file(
132
+ File.expand_path("../encrypted_sample.yml", __FILE__),
133
+ [["vault"], ["production", "password"]],
134
+ passphrase: ENV["YAML_VAULT_PASSPHRASE"], sign_passphrase: ENV["YAML_VAULT_SIGN_PASSPHRASE"]
135
+ ).decrypt
136
+
137
+ # KMS
138
+ configs = YamlVault::Main.from_file(
139
+ File.expand_path("../encrypted_sample.yml", __FILE__),
140
+ [["vault"], ["production", "password"]],
141
+ "kms",
142
+ aws_kms_key_id: ENV["AWS_KMS_KEY_ID"],
143
+ aws_region: ENV["AWS_REGION"], # optional
144
+ aws_access_key_id: "xxxxxxx", # optional
145
+ aws_secret_access_key: "xxxxxxx", # optional
146
+ ).decrypt
147
+ ```
148
+
149
+ ## How to use with docker
150
+
151
+ ```bash
152
+ docker run -it \
153
+ -v `pwd`/:/vol \
154
+ joker1007/yaml_vault \
155
+ encrypt /vol/secrets.yml -o /vol/encrypted_secrets.yml
156
+ ```
157
+
102
158
  ## Development
103
159
 
104
160
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. Run `bundle exec yaml_vault` to use the gem in this directory, ignoring other installed copies of this gem.
data/exe/yaml_vault CHANGED
@@ -24,7 +24,7 @@ class YamlVault::Cli < Thor
24
24
  method_option :output, aliases: "-o", type: :string, required: true
25
25
  def encrypt(yaml_file)
26
26
  passphrase, sign_passphrase = get_passphrase
27
- encrypted_yaml = YamlVault::Main.new(
27
+ encrypted_yaml = YamlVault::Main.from_file(
28
28
  yaml_file,
29
29
  target_keys,
30
30
  options[:cryptor],
@@ -44,7 +44,7 @@ class YamlVault::Cli < Thor
44
44
  method_option :output, aliases: "-o", type: :string, required: true
45
45
  def decrypt(yaml_file)
46
46
  passphrase, sign_passphrase = get_passphrase
47
- decrypted_yaml = YamlVault::Main.new(
47
+ decrypted_yaml = YamlVault::Main.from_file(
48
48
  yaml_file,
49
49
  target_keys,
50
50
  options[:cryptor],
data/lib/yaml_vault.rb CHANGED
@@ -6,12 +6,21 @@ require 'active_support'
6
6
 
7
7
  module YamlVault
8
8
  class Main
9
+ class << self
10
+ def from_file(filename, keys, cryptor_name = nil, **options)
11
+ yaml_content = ERB.new(File.read(filename)).result
12
+ new(yaml_content, keys, cryptor_name, **options)
13
+ end
14
+
15
+ alias :from_content :new
16
+ end
17
+
9
18
  def initialize(
10
- yaml, keys, cryptor_name = nil,
19
+ yaml_content, keys, cryptor_name = nil,
11
20
  passphrase: nil, sign_passphrase: nil, salt: nil, cipher: "aes-256-cbc", digest: "SHA256",
12
21
  aws_kms_key_id: nil, aws_region: nil, aws_access_key_id: nil, aws_secret_access_key: nil
13
22
  )
14
- @yaml = yaml
23
+ @data = YAML.load(yaml_content)
15
24
  @keys = keys
16
25
 
17
26
  @passphrase = passphrase
@@ -28,24 +37,33 @@ module YamlVault
28
37
  @cryptor = get_cryptor(cryptor_name)
29
38
  end
30
39
 
31
- def encrypt_yaml
40
+ def encrypt
32
41
  process_yaml do |data|
33
42
  do_process(data, :encrypt)
34
43
  end
35
44
  end
36
45
 
37
- def decrypt_yaml
46
+ def decrypt
38
47
  process_yaml do |data|
39
48
  do_process(data, :decrypt)
40
49
  end
41
50
  end
42
51
 
52
+ def encrypt_yaml
53
+ encrypt.to_yaml
54
+ end
55
+
56
+ def decrypt_yaml
57
+ decrypt.to_yaml
58
+ end
59
+
43
60
  private
44
61
 
45
62
  def get_cryptor(name)
46
- if name == "simple"
63
+ case name
64
+ when "simple"
47
65
  ValueCryptor::Simple.new(@passphrase, @sign_passphrase, @salt, @cipher, @digest)
48
- elsif name == "aws-kms"
66
+ when "aws-kms", "kms"
49
67
  ValueCryptor::KMS.new(@aws_kms_key_id, region: @aws_region, aws_access_key_id: @aws_access_key_id, aws_secret_access_key: @aws_secret_access_key)
50
68
  else
51
69
  ValueCryptor::Simple.new(@passphrase, @sign_passphrase, @salt, @cipher, @digest)
@@ -53,20 +71,19 @@ module YamlVault
53
71
  end
54
72
 
55
73
  def process_yaml
56
- data = YAML.load(ERB.new(File.read(@yaml)).result)
57
74
  @keys.each do |key|
58
- target = key.inject(data) do |t, part|
75
+ target = key.inject(@data) do |t, part|
59
76
  t[part]
60
77
  end
61
78
 
62
79
  vault_data = yield target
63
80
 
64
- target_parent = key[0..-2].inject(data) do |t, part|
81
+ target_parent = key[0..-2].inject(@data) do |t, part|
65
82
  t[part]
66
83
  end
67
84
  target_parent[key[-1]] = vault_data
68
85
  end
69
- data.to_yaml
86
+ @data
70
87
  end
71
88
 
72
89
  def do_process(data, method)
@@ -0,0 +1,25 @@
1
+ module YamlVault
2
+ module Rails
3
+ class << self
4
+ def override_secrets(keys, cryptor_name = nil, **options)
5
+ config = ::Rails.application.config
6
+ ::Rails.application.secrets = begin
7
+ secrets = ActiveSupport::OrderedOptions.new
8
+ yaml = config.paths["config/secrets"].first
9
+ if File.exist?(yaml)
10
+ all_secrets = YamlVault::Main.from_content(IO.read(yaml), keys, cryptor_name, **options).decrypt
11
+ env_secrets = all_secrets[::Rails.env]
12
+ secrets.merge!(env_secrets.symbolize_keys) if env_secrets
13
+ end
14
+
15
+ # Fallback to config.secret_key_base if secrets.secret_key_base isn't set
16
+ secrets.secret_key_base ||= config.secret_key_base
17
+ # Fallback to config.secret_token if secrets.secret_token isn't set
18
+ secrets.secret_token ||= config.secret_token
19
+
20
+ secrets
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module YamlVault
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yaml_vault
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
  - joker1007
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-24 00:00:00.000000000 Z
11
+ date: 2016-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -105,6 +105,7 @@ files:
105
105
  - ".gitignore"
106
106
  - ".rspec"
107
107
  - ".travis.yml"
108
+ - Dockerfile
108
109
  - Gemfile
109
110
  - README.md
110
111
  - Rakefile
@@ -112,6 +113,7 @@ files:
112
113
  - bin/setup
113
114
  - exe/yaml_vault
114
115
  - lib/yaml_vault.rb
116
+ - lib/yaml_vault/rails.rb
115
117
  - lib/yaml_vault/version.rb
116
118
  - yaml_vault.gemspec
117
119
  homepage: https://github.com/joker1007/yaml_vault