From 0767c3437930547c7efdf02bb9c5325bdf805804 Mon Sep 17 00:00:00 2001 From: Molly Struve Date: Wed, 24 Jun 2020 14:13:37 -0500 Subject: [PATCH] [deploy] Feature: Setup Vault and AppSecrets Wrapper Class (#8891) --- Envfile | 6 ++++ Gemfile | 1 + Gemfile.lock | 3 ++ app/lib/app_secrets.rb | 19 ++++++++++ config/initializers/vault.rb | 40 +++++++++++++++++++++ spec/lib/app_secrets_spec.rb | 64 ++++++++++++++++++++++++++++++++++ vendor/cache/vault-0.14.0.gem | Bin 0 -> 50688 bytes 7 files changed, 133 insertions(+) create mode 100644 app/lib/app_secrets.rb create mode 100644 config/initializers/vault.rb create mode 100644 spec/lib/app_secrets_spec.rb create mode 100644 vendor/cache/vault-0.14.0.gem diff --git a/Envfile b/Envfile index 05c2a4945..c980e1c3b 100644 --- a/Envfile +++ b/Envfile @@ -164,6 +164,12 @@ variable :TWITCH_WEBHOOK_SECRET, :String, default: "Optional" # (https://api.stackexchange.com/docs) variable :STACK_EXCHANGE_APP_KEY, :String, default: "" +# Vault for storing secrets +# (https://learn.hashicorp.com/vault) +variable :VAULT_ADDR, :String, default: "http://127.0.0.1:8200" +variable :VAULT_TOKEN, :String, default: "" +variable :VAULT_SSL_VERIFY, :Boolean, default: true + group :production do variable :SECRET_KEY_BASE, :String diff --git a/Gemfile b/Gemfile index fb99296df..e04d0e3be 100644 --- a/Gemfile +++ b/Gemfile @@ -107,6 +107,7 @@ gem "twitter", "~> 7.0" # A Ruby interface to the Twitter API gem "uglifier", "~> 4.2" # Uglifier minifies JavaScript files gem "ulid", "~> 1.2" # Universally Unique Lexicographically Sortable Identifier implementation for Ruby gem "validate_url", "~> 1.0" # Library for validating urls in Rails +gem "vault", "~> 0.14" # Used to store secrets gem "webpacker", "~> 5.1.1" # Use webpack to manage app-like JavaScript modules in Rails group :development do diff --git a/Gemfile.lock b/Gemfile.lock index 2726c831f..ff0df4761 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -837,6 +837,8 @@ GEM validate_url (1.0.11) activemodel (>= 3.0.0) public_suffix + vault (0.14.0) + aws-sigv4 vcr (6.0.0) virtus (1.0.5) axiom-types (~> 0.1) @@ -1023,6 +1025,7 @@ DEPENDENCIES uglifier (~> 4.2) ulid (~> 1.2) validate_url (~> 1.0) + vault (~> 0.14) vcr (~> 6.0) web-console (~> 4.0) webdrivers (~> 4.4) diff --git a/app/lib/app_secrets.rb b/app/lib/app_secrets.rb new file mode 100644 index 000000000..99e1110c6 --- /dev/null +++ b/app/lib/app_secrets.rb @@ -0,0 +1,19 @@ +class AppSecrets + def self.[](key) + result = Vault.kv(namespace).read(key)&.data&.fetch(:value) if ApplicationConfig["VAULT_TOKEN"].present? + result ||= ApplicationConfig[key] + + result + rescue Vault::VaultError + ApplicationConfig[key] + end + + def self.[]=(key, value) + Vault.kv(namespace).write(key, value: value) + end + + def self.namespace + ENV["VAULT_SECRET_NAMESPACE"] + end + private_class_method :namespace +end diff --git a/config/initializers/vault.rb b/config/initializers/vault.rb new file mode 100644 index 000000000..70b92c57a --- /dev/null +++ b/config/initializers/vault.rb @@ -0,0 +1,40 @@ +Vault.configure do |config| + # The address of the Vault server, also read as + config.address = ApplicationConfig["VAULT_ADDR"] + + # The policy token to authenticate with Vault + # Each app will get its own policy https://learn.hashicorp.com/vault/getting-started/policies#overview + # Each policy comes with its own token to give the app access to ONLY its secrets + config.token = ApplicationConfig["VAULT_TOKEN"] + + # Mimic Paths for communities + + # Optional - if using the Namespace enterprise feature + # config.namespace = ENV["VAULT_NAMESPACE"] + + # Proxy connection information, also read as ENV["VAULT_PROXY_(thing)"] + # config.proxy_address = "..." + # config.proxy_port = "..." + # config.proxy_username = "..." + # config.proxy_password = "..." + + # Custom SSL PEM, also read as ENV["VAULT_SSL_CERT"] + # config.ssl_pem_file = "/path/on/disk.pem" + + # As an alternative to a pem file, you can provide the raw PEM string, also read in the following order of preference: + # ENV["VAULT_SSL_PEM_CONTENTS_BASE64"] then ENV["VAULT_SSL_PEM_CONTENTS"] + # config.ssl_pem_contents = "-----BEGIN ENCRYPTED..." + + # Use SSL verification, also read as ENV["VAULT_SSL_VERIFY"] + config.ssl_verify = ApplicationConfig["VAULT_SSL_VERIFY"] + + # Timeout the connection after a certain amount of time (seconds), also read + # as ENV["VAULT_TIMEOUT"] + config.timeout = 30 + + # It is also possible to have finer-grained controls over the timeouts, these + # may also be read as environment variables + config.ssl_timeout = 5 + config.open_timeout = 5 + config.read_timeout = 30 +end diff --git a/spec/lib/app_secrets_spec.rb b/spec/lib/app_secrets_spec.rb new file mode 100644 index 000000000..9202de842 --- /dev/null +++ b/spec/lib/app_secrets_spec.rb @@ -0,0 +1,64 @@ +require "rails_helper" + +RSpec.describe AppSecrets, type: :lib do + let(:namespace) { "secret-namespace" } + let(:key) { "SECRET_KEY" } + let(:secret_stub) { instance_double("Vault::Kv", data: { value: 1 }) } + let(:vault_stub) { instance_double("Vault::Kv", read: secret_stub) } + + before do + allow(described_class).to receive(:namespace).and_return(namespace) + allow(Vault).to receive(:kv) { vault_stub } + allow(ApplicationConfig).to receive(:[]) + end + + describe "[]" do + context "with VAULT_TOKEN present" do + before do + allow(ApplicationConfig).to receive(:[]).with("VAULT_TOKEN").and_return("present") + end + + it "fetches keys from Vault" do + described_class[key] + expect(Vault).to have_received(:kv).with(namespace) + expect(vault_stub).to have_received(:read).with(key) + end + + it "fetches keys from ApplicationConfig if not in Vault" do + allow(Vault).to receive(:kv) { instance_double("Vault::Kv", read: nil) } + + described_class[key] + expect(ApplicationConfig).to have_received(:[]).with(key) + end + + it "fetches keys from ApplicationConfig if Vault raises an error" do + allow(Vault).to receive(:kv).and_raise(Vault::VaultError) + + described_class[key] + expect(ApplicationConfig).to have_received(:[]).with(key) + end + end + + context "without VAULT_TOKEN present" do + before { allow(ApplicationConfig).to receive(:[]).with("VAULT_TOKEN").and_return("") } + + it "fetches keys from ApplicationConfig" do + allow(Vault).to receive(:kv) { instance_double("Vault::Kv", read: nil) } + + described_class[key] + expect(ApplicationConfig).to have_received(:[]).with(key) + expect(Vault).not_to have_received(:kv).with(namespace) + end + end + end + + describe "[]=" do + it "sets keys in Vault" do + write_stub = instance_double("Vault::Kv", write: nil) + allow(Vault).to receive(:kv) { write_stub } + + described_class[key] = "secret-value" + expect(write_stub).to have_received(:write).with(key, value: "secret-value") + end + end +end diff --git a/vendor/cache/vault-0.14.0.gem b/vendor/cache/vault-0.14.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..0387a5a31da37197313f079111fe5082062ce007 GIT binary patch literal 50688 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�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