keystore 0.1
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 +7 -0
 - data/bin/keystore.rb +50 -0
 - data/lib/keystore.rb +32 -0
 - metadata +86 -0
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA1:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: ad74a93a05ef9aeb9ced232bea509de0eecb3eab
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: f9f142c30653d0f6dee86f8d8dc808a56402dcb5
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 94ac6e846818166f9b083bc2dea775790246607ada08495381cf77d9083f17d1e04eeb0df2cfabcfaefd757e87978ae12da3d6c7b5b3a8d4558c5a8ed8056c3b
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 54651c88bf02fbf88a04faed881d80f338b45c730e241ae59f47dc04033a0274cfaee4cf61ecff00147d056d69e02f8d48ee0cf4c922d2cd8245f870b18afcdc
         
     | 
    
        data/bin/keystore.rb
    ADDED
    
    | 
         @@ -0,0 +1,50 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'keystore'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'aws-sdk-core'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'trollop'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            SUB_COMMANDS = %w(store retrieve)
         
     | 
| 
      
 6 
     | 
    
         
            +
            global_opts = Trollop.options do
         
     | 
| 
      
 7 
     | 
    
         
            +
              opt :region, 'The region to look for the dynamodb in', default: 'us-east-1'
         
     | 
| 
      
 8 
     | 
    
         
            +
              banner 'utility for storing and retrieving encrypted values
         
     | 
| 
      
 9 
     | 
    
         
            +
              available commands:
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                store -- store a value in keystore
         
     | 
| 
      
 12 
     | 
    
         
            +
                retrieve -- retrieve a value from keystore
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              use --help with either command for more information.
         
     | 
| 
      
 15 
     | 
    
         
            +
              '
         
     | 
| 
      
 16 
     | 
    
         
            +
              stop_on SUB_COMMANDS
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            cmd = ARGV.shift
         
     | 
| 
      
 20 
     | 
    
         
            +
            cmd_opts =
         
     | 
| 
      
 21 
     | 
    
         
            +
              case cmd
         
     | 
| 
      
 22 
     | 
    
         
            +
              when 'store'
         
     | 
| 
      
 23 
     | 
    
         
            +
                Trollop.options do
         
     | 
| 
      
 24 
     | 
    
         
            +
                  opt :value, 'the value to be inserted into the keystore (required for store)', required: true, type: String
         
     | 
| 
      
 25 
     | 
    
         
            +
                  opt :kmsid, 'the kms key id to use to encrypt the data (required for store)', required: true, type: String
         
     | 
| 
      
 26 
     | 
    
         
            +
                  opt :keyname, 'the name of the key associated with the value', required: true, type: String
         
     | 
| 
      
 27 
     | 
    
         
            +
                  opt :table, 'the name of the table to perform the lookup on', required: true, type: String
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
              when 'retrieve'
         
     | 
| 
      
 30 
     | 
    
         
            +
                Trollop.options do
         
     | 
| 
      
 31 
     | 
    
         
            +
                  opt :keyname, 'the name of the key associated with the value', required: true, type: String
         
     | 
| 
      
 32 
     | 
    
         
            +
                  opt :table, 'the name of the table to perform the lookup on', required: true, type: String
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
              else
         
     | 
| 
      
 35 
     | 
    
         
            +
                Trollop.die "usage: keystore.rb [store|retrieve] [parameters]"
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            dynamo = Aws::DynamoDB::Client.new region: global_opts[:region]
         
     | 
| 
      
 39 
     | 
    
         
            +
            kms = Aws::KMS::Client.new region: global_opts[:region]
         
     | 
| 
      
 40 
     | 
    
         
            +
            keystore = Keystore.new dynamo: dynamo, table_name: cmd_opts[:table], kms: kms, key_id: cmd_opts[:kmsid]
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            case cmd
         
     | 
| 
      
 43 
     | 
    
         
            +
            when 'store'
         
     | 
| 
      
 44 
     | 
    
         
            +
              keystore.store key: cmd_opts[:keyname], value: cmd_opts[:value]
         
     | 
| 
      
 45 
     | 
    
         
            +
            when 'retrieve'
         
     | 
| 
      
 46 
     | 
    
         
            +
              result = keystore.retrieve key: cmd_opts[:keyname]
         
     | 
| 
      
 47 
     | 
    
         
            +
              puts result
         
     | 
| 
      
 48 
     | 
    
         
            +
            else
         
     | 
| 
      
 49 
     | 
    
         
            +
              fail "unknown subcommand #{cmd}"
         
     | 
| 
      
 50 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/keystore.rb
    ADDED
    
    | 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'aws-sdk-core'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'base64'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            # utility to use AWS services to handle encryption and storage of secret data.
         
     | 
| 
      
 5 
     | 
    
         
            +
            class Keystore
         
     | 
| 
      
 6 
     | 
    
         
            +
              def initialize(params = {})
         
     | 
| 
      
 7 
     | 
    
         
            +
                @options = params
         
     | 
| 
      
 8 
     | 
    
         
            +
                fail 'need to specify dynamo parameter' if @options[:dynamo].nil?
         
     | 
| 
      
 9 
     | 
    
         
            +
                fail 'need to specify table_name parameter' if @options[:table_name].nil?
         
     | 
| 
      
 10 
     | 
    
         
            +
                fail 'need to specify kms parameter' if @options[:kms].nil?
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def store(params)
         
     | 
| 
      
 14 
     | 
    
         
            +
                # only need key id to encrypt, so check for it here
         
     | 
| 
      
 15 
     | 
    
         
            +
                fail 'need to specify key_id parameter' if @options[:key_id].nil?
         
     | 
| 
      
 16 
     | 
    
         
            +
                key_id = @options[:key_id]
         
     | 
| 
      
 17 
     | 
    
         
            +
                encrypted_value = @options[:kms].encrypt(key_id: key_id, plaintext: params[:value]).ciphertext_blob
         
     | 
| 
      
 18 
     | 
    
         
            +
                encoded_value = Base64.encode64(encrypted_value)
         
     | 
| 
      
 19 
     | 
    
         
            +
                @options[:dynamo].put_item(
         
     | 
| 
      
 20 
     | 
    
         
            +
                  table_name: @options[:table_name],
         
     | 
| 
      
 21 
     | 
    
         
            +
                  item: { ParameterName: params[:key], Value: encoded_value }
         
     | 
| 
      
 22 
     | 
    
         
            +
                )
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def retrieve(params)
         
     | 
| 
      
 26 
     | 
    
         
            +
                item = @options[:dynamo].get_item(table_name: @options[:table_name], key: { ParameterName: params[:key] }).item
         
     | 
| 
      
 27 
     | 
    
         
            +
                fail "keyname #{params[:key]} not found" if item.nil?
         
     | 
| 
      
 28 
     | 
    
         
            +
                encoded_value = item['Value']
         
     | 
| 
      
 29 
     | 
    
         
            +
                encrypted_value = Base64.decode64(encoded_value)
         
     | 
| 
      
 30 
     | 
    
         
            +
                @options[:kms].decrypt(ciphertext_blob: encrypted_value).plaintext
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,86 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: keystore
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: '0.1'
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Jonny Sywulak
         
     | 
| 
      
 8 
     | 
    
         
            +
            - Stelligent
         
     | 
| 
      
 9 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 10 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 11 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2015-09-28 00:00:00.000000000 Z
         
     | 
| 
      
 13 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 14 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 15 
     | 
    
         
            +
              name: aws-sdk
         
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 17 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 18 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 19 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 20 
     | 
    
         
            +
                    version: '2.1'
         
     | 
| 
      
 21 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 22 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 23 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 24 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 25 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 26 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 27 
     | 
    
         
            +
                    version: '2.1'
         
     | 
| 
      
 28 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 29 
     | 
    
         
            +
              name: trollop
         
     | 
| 
      
 30 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 31 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 32 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 33 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 34 
     | 
    
         
            +
                    version: '2.1'
         
     | 
| 
      
 35 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 36 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 37 
     | 
    
         
            +
                    version: 2.1.2
         
     | 
| 
      
 38 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 39 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 40 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 41 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 42 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 43 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 44 
     | 
    
         
            +
                    version: '2.1'
         
     | 
| 
      
 45 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 46 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 47 
     | 
    
         
            +
                    version: 2.1.2
         
     | 
| 
      
 48 
     | 
    
         
            +
            description: While building applications and continuous delivery pipelines, secret
         
     | 
| 
      
 49 
     | 
    
         
            +
              management is usually one of the first non-trivial problems you run across. The
         
     | 
| 
      
 50 
     | 
    
         
            +
              Keystore utility pairs to AWS services to handle encryption and storage of secret
         
     | 
| 
      
 51 
     | 
    
         
            +
              data.
         
     | 
| 
      
 52 
     | 
    
         
            +
            email: jonny@stelligent.com
         
     | 
| 
      
 53 
     | 
    
         
            +
            executables:
         
     | 
| 
      
 54 
     | 
    
         
            +
            - keystore.rb
         
     | 
| 
      
 55 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 56 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 57 
     | 
    
         
            +
            files:
         
     | 
| 
      
 58 
     | 
    
         
            +
            - bin/keystore.rb
         
     | 
| 
      
 59 
     | 
    
         
            +
            - lib/keystore.rb
         
     | 
| 
      
 60 
     | 
    
         
            +
            homepage: http://www.stelligent.com
         
     | 
| 
      
 61 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 62 
     | 
    
         
            +
            - MIT
         
     | 
| 
      
 63 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
      
 64 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 65 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 66 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 67 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 68 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 69 
     | 
    
         
            +
            - bin
         
     | 
| 
      
 70 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 71 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 72 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 73 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 74 
     | 
    
         
            +
                  version: 2.2.2
         
     | 
| 
      
 75 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 76 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 77 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 78 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 79 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 80 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 81 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 82 
     | 
    
         
            +
            rubygems_version: 2.4.8
         
     | 
| 
      
 83 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 84 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 85 
     | 
    
         
            +
            summary: Secure storage of secrets using Amazon Web Services.
         
     | 
| 
      
 86 
     | 
    
         
            +
            test_files: []
         
     |