kubekrypt 2.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 114a7edec9762b20e94f800e58ebdf5125bee18d04faca1d0559d9193e0e1252
4
+ data.tar.gz: c3a2d0f518f96d98d182374ee0f9dbd90fd129a24e4d243dac2817bf4d4b2239
5
+ SHA512:
6
+ metadata.gz: c52d274ebc704a7df81b653f6325642671991d294619754977f0ee9caa8d0e448e48540a8399819147b150cfb5c2867b9bf49eb8186f10b14ad6b5ca5f073ac5
7
+ data.tar.gz: e911f8d383b62cf17cea7d9137aa080877e166d894fafd4b04a92d314097a9636dab1f4b99fe051344f4817a48b43d494e4c15307c7db38befbb6cfae01494a6
@@ -0,0 +1,25 @@
1
+ name: Ruby CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ jobs:
10
+ ci_tests_ruby:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ ruby-version: [3.4]
15
+
16
+ steps:
17
+ - uses: actions/checkout@v3
18
+ - name: Set up Ruby
19
+ uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: ${{ matrix.ruby-version }}
22
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
23
+
24
+ - name: Run tests
25
+ run: bundle exec rake ci
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ .tmp
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
13
+
14
+ # Cached rubocop config files
15
+ .rubocop-http*
16
+
17
+ *.yaml
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/CHANGELOG.md ADDED
@@ -0,0 +1,22 @@
1
+ # Changelog
2
+
3
+ ## [2.0.0] - 2025-03-18
4
+
5
+ ### Added
6
+ - Core encryption functionality using KMS for securing Kubernetes Secret manifests
7
+ - Command-line interface with encrypt and decrypt commands
8
+ - Support for reading YAML Secret manifests from files
9
+ - Automatic detection of already encrypted files
10
+ - Metadata tagging to track encryption details within manifests
11
+ - Version command to display current KubeKrypt version
12
+
13
+ ### Features
14
+ - **Encrypt Command**: Securely encrypts Kubernetes Secret manifests using specified KMS key
15
+ - **Decrypt Command**: Decrypts previously encrypted manifests using embedded metadata
16
+ - **YAML Output**: All commands output properly formatted YAML to stdout for easy redirection
17
+
18
+ ### Implementation Details
19
+ - Uses Thor for CLI command parsing
20
+ - Preserves original manifest structure while securing sensitive data
21
+ - Adds `kubekrypt` metadata section to encrypted manifests for tracking
22
+ - Basic error handling for common failure scenarios
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'bundler'
6
+ gem 'irb'
7
+ gem 'pry'
8
+ gem 'rake'
9
+ gem 'rspec'
10
+ gem 'rubocop'
11
+ gem 'rubocop-rake'
12
+ gem 'rubocop-rspec'
data/Gemfile.lock ADDED
@@ -0,0 +1,184 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ kubekrypt (2.0.0)
5
+ google-cloud-kms
6
+ thor (~> 1.0)
7
+ yaml
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ addressable (2.8.7)
13
+ public_suffix (>= 2.0.2, < 7.0)
14
+ ast (2.4.2)
15
+ base64 (0.2.0)
16
+ bigdecimal (3.1.9)
17
+ coderay (1.1.3)
18
+ date (3.4.1)
19
+ diff-lcs (1.6.0)
20
+ faraday (2.12.2)
21
+ faraday-net_http (>= 2.0, < 3.5)
22
+ json
23
+ logger
24
+ faraday-net_http (3.4.0)
25
+ net-http (>= 0.5.0)
26
+ faraday-retry (2.2.1)
27
+ faraday (~> 2.0)
28
+ gapic-common (0.25.0)
29
+ faraday (>= 1.9, < 3.a)
30
+ faraday-retry (>= 1.0, < 3.a)
31
+ google-cloud-env (~> 2.2)
32
+ google-logging-utils (~> 0.1)
33
+ google-protobuf (>= 3.25, < 5.a)
34
+ googleapis-common-protos (~> 1.6)
35
+ googleapis-common-protos-types (~> 1.15)
36
+ googleauth (~> 1.12)
37
+ grpc (~> 1.66)
38
+ google-cloud-core (1.8.0)
39
+ google-cloud-env (>= 1.0, < 3.a)
40
+ google-cloud-errors (~> 1.0)
41
+ google-cloud-env (2.2.2)
42
+ base64 (~> 0.2)
43
+ faraday (>= 1.0, < 3.a)
44
+ google-cloud-errors (1.5.0)
45
+ google-cloud-kms (2.9.0)
46
+ google-cloud-core (~> 1.6)
47
+ google-cloud-kms-v1 (>= 0.26, < 2.a)
48
+ google-cloud-kms-v1 (1.5.0)
49
+ gapic-common (>= 0.25.0, < 2.a)
50
+ google-cloud-errors (~> 1.0)
51
+ google-cloud-location (>= 0.7, < 2.a)
52
+ google-iam-v1 (>= 0.7, < 2.a)
53
+ google-cloud-location (0.10.0)
54
+ gapic-common (>= 0.25.0, < 2.a)
55
+ google-cloud-errors (~> 1.0)
56
+ google-iam-v1 (1.3.0)
57
+ gapic-common (>= 0.25.0, < 2.a)
58
+ google-cloud-errors (~> 1.0)
59
+ grpc-google-iam-v1 (~> 1.1)
60
+ google-logging-utils (0.1.0)
61
+ google-protobuf (4.30.1)
62
+ bigdecimal
63
+ rake (>= 13)
64
+ googleapis-common-protos (1.6.0)
65
+ google-protobuf (>= 3.18, < 5.a)
66
+ googleapis-common-protos-types (~> 1.7)
67
+ grpc (~> 1.41)
68
+ googleapis-common-protos-types (1.18.0)
69
+ google-protobuf (>= 3.18, < 5.a)
70
+ googleauth (1.14.0)
71
+ faraday (>= 1.0, < 3.a)
72
+ google-cloud-env (~> 2.2)
73
+ google-logging-utils (~> 0.1)
74
+ jwt (>= 1.4, < 3.0)
75
+ multi_json (~> 1.11)
76
+ os (>= 0.9, < 2.0)
77
+ signet (>= 0.16, < 2.a)
78
+ grpc (1.71.0)
79
+ google-protobuf (>= 3.25, < 5.0)
80
+ googleapis-common-protos-types (~> 1.0)
81
+ grpc-google-iam-v1 (1.9.0)
82
+ google-protobuf (>= 3.18, < 5.a)
83
+ googleapis-common-protos (~> 1.4)
84
+ grpc (~> 1.41)
85
+ io-console (0.8.0)
86
+ irb (1.15.1)
87
+ pp (>= 0.6.0)
88
+ rdoc (>= 4.0.0)
89
+ reline (>= 0.4.2)
90
+ json (2.10.2)
91
+ jwt (2.10.1)
92
+ base64
93
+ language_server-protocol (3.17.0.4)
94
+ lint_roller (1.1.0)
95
+ logger (1.6.6)
96
+ method_source (1.1.0)
97
+ multi_json (1.15.0)
98
+ net-http (0.6.0)
99
+ uri
100
+ os (1.1.4)
101
+ parallel (1.26.3)
102
+ parser (3.3.7.1)
103
+ ast (~> 2.4.1)
104
+ racc
105
+ pp (0.6.2)
106
+ prettyprint
107
+ prettyprint (0.2.0)
108
+ pry (0.15.2)
109
+ coderay (~> 1.1)
110
+ method_source (~> 1.0)
111
+ psych (5.2.3)
112
+ date
113
+ stringio
114
+ public_suffix (6.0.1)
115
+ racc (1.8.1)
116
+ rainbow (3.1.1)
117
+ rake (13.2.1)
118
+ rdoc (6.12.0)
119
+ psych (>= 4.0.0)
120
+ regexp_parser (2.10.0)
121
+ reline (0.6.0)
122
+ io-console (~> 0.5)
123
+ rspec (3.13.0)
124
+ rspec-core (~> 3.13.0)
125
+ rspec-expectations (~> 3.13.0)
126
+ rspec-mocks (~> 3.13.0)
127
+ rspec-core (3.13.3)
128
+ rspec-support (~> 3.13.0)
129
+ rspec-expectations (3.13.3)
130
+ diff-lcs (>= 1.2.0, < 2.0)
131
+ rspec-support (~> 3.13.0)
132
+ rspec-mocks (3.13.2)
133
+ diff-lcs (>= 1.2.0, < 2.0)
134
+ rspec-support (~> 3.13.0)
135
+ rspec-support (3.13.2)
136
+ rubocop (1.74.0)
137
+ json (~> 2.3)
138
+ language_server-protocol (~> 3.17.0.2)
139
+ lint_roller (~> 1.1.0)
140
+ parallel (~> 1.10)
141
+ parser (>= 3.3.0.2)
142
+ rainbow (>= 2.2.2, < 4.0)
143
+ regexp_parser (>= 2.9.3, < 3.0)
144
+ rubocop-ast (>= 1.38.0, < 2.0)
145
+ ruby-progressbar (~> 1.7)
146
+ unicode-display_width (>= 2.4.0, < 4.0)
147
+ rubocop-ast (1.39.0)
148
+ parser (>= 3.3.1.0)
149
+ rubocop-rake (0.7.1)
150
+ lint_roller (~> 1.1)
151
+ rubocop (>= 1.72.1)
152
+ rubocop-rspec (3.5.0)
153
+ lint_roller (~> 1.1)
154
+ rubocop (~> 1.72, >= 1.72.1)
155
+ ruby-progressbar (1.13.0)
156
+ signet (0.19.0)
157
+ addressable (~> 2.8)
158
+ faraday (>= 0.17.5, < 3.a)
159
+ jwt (>= 1.5, < 3.0)
160
+ multi_json (~> 1.10)
161
+ stringio (3.1.5)
162
+ thor (1.3.2)
163
+ unicode-display_width (3.1.4)
164
+ unicode-emoji (~> 4.0, >= 4.0.4)
165
+ unicode-emoji (4.0.4)
166
+ uri (1.0.3)
167
+ yaml (0.4.0)
168
+
169
+ PLATFORMS
170
+ ruby
171
+
172
+ DEPENDENCIES
173
+ bundler
174
+ irb
175
+ kubekrypt!
176
+ pry
177
+ rake
178
+ rspec
179
+ rubocop
180
+ rubocop-rake
181
+ rubocop-rspec
182
+
183
+ BUNDLED WITH
184
+ 2.6.3
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025 Krzysztof Knapik
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,86 @@
1
+ [![Gem Version](https://badge.fury.io/rb/kubekrypt.svg)](https://rubygems.org/gems/kubekrypt)
2
+
3
+ # KubeKrypt
4
+
5
+ A command-line tool for securely encrypting and decrypting Kubernetes Secret manifests using KMS encryption keys.
6
+
7
+ ## Overview
8
+
9
+ KubeKrypt provides a simple and secure way to manage sensitive information in Kubernetes Secret manifests. It allows you to encrypt Secret manifests before they're stored in version control systems, and decrypt them when they need to be applied to a cluster.
10
+
11
+ ## Features
12
+
13
+ - **Secure Encryption**: Uses KMS to encrypt sensitive data in Kubernetes Secret manifests
14
+ - **Simple Interface**: Easy-to-use CLI commands for encryption and decryption
15
+ - **Metadata Tracking**: Embeds metadata in encrypted files for tracking and verification
16
+ - **Stdout Integration**: Outputs to standard out for easy piping and redirection
17
+ - **Base64 Processing**: Automatically handles base64 encoding/decoding under the hood, maintaining compatibility with Kubernetes Secret format
18
+
19
+ ## Installation
20
+
21
+ `kubecrypt` uses `google-cloud-kms` and it requires an [environment variable](https://cloud.google.com/ruby/docs/reference/google-cloud-kms/latest/AUTHENTICATION) to be set in order to authenticate and work properly.
22
+ You need one of:
23
+
24
+ - `GOOGLE_CLOUD_CREDENTIALS` - Path to JSON file, or JSON contents
25
+ - `GOOGLE_APPLICATION_CREDENTIALS` - Path to JSON file
26
+
27
+ ## Usage
28
+
29
+ ### Encrypting a Secret
30
+
31
+ ```bash
32
+ kubekrypt encrypt secret.yaml -k projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key > secret.enc.yaml
33
+ ```
34
+
35
+ ### Decrypting a Secret
36
+
37
+ ```bash
38
+ kubekrypt decrypt secret.enc.yaml > secret.yaml
39
+ ```
40
+
41
+ ### Piping to kubectl
42
+
43
+ ```bash
44
+ kubekrypt decrypt --base64 secret.enc.yaml | kubectl apply -f -
45
+ ```
46
+
47
+ ### Checking Version
48
+
49
+ ```bash
50
+ kubekrypt version
51
+ ```
52
+
53
+ ## How It Works
54
+
55
+ 1. KubeKrypt reads your Kubernetes Secret YAML file
56
+ 2. For encryption, it:
57
+ - Validates that it's a proper Kubernetes Secret
58
+ - Ensures it's not already encrypted
59
+ - Decodes base64 values to get raw data
60
+ - Uses KMS to encrypt sensitive data
61
+ - Re-encodes with base64 as needed
62
+ - Adds metadata about the encryption
63
+ - Outputs the encrypted YAML
64
+
65
+ 3. For decryption, it:
66
+ - Verifies the file contains KubeKrypt encryption metadata
67
+ - Uses the embedded information to decrypt the data
68
+ - Handles all necessary base64 encoding/decoding
69
+ - Outputs the original Secret YAML
70
+
71
+ ## Security
72
+
73
+ KubeKrypt never stores encryption keys locally. All encryption and decryption operations are performed using KMS, ensuring that key material is never exposed.
74
+
75
+ ## Requirements
76
+
77
+ - Ruby 3.4+
78
+ - Access to a KMS key with appropriate permissions
79
+
80
+ ## Contributing
81
+
82
+ Contributions are welcome! Please feel free to submit a Pull Request.
83
+
84
+ ## License
85
+
86
+ This project is licensed under the MIT License - see the LICENSE file for details.
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'rubocop/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+ RuboCop::RakeTask.new
7
+
8
+ task ci: %i[spec rubocop]
9
+ task default: %i[spec rubocop:autocorrect_all]
data/exe/kubekrypt ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'kubekrypt'
3
+
4
+ KubeKrypt::CLI.start
data/kubekrypt.gemspec ADDED
@@ -0,0 +1,32 @@
1
+ lib = File.expand_path('lib', __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'kubekrypt/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'kubekrypt'
7
+ spec.version = KubeKrypt::VERSION
8
+ spec.authors = ['Krzysztof Knapik']
9
+ spec.email = ['knapo@knapo.net']
10
+
11
+ spec.summary = 'KubeKrypt provides seamless encryption and decryption of secrets in YAML files using Google KMS'
12
+ spec.homepage = 'https://github.com/knapo/kubekrypt'
13
+ spec.license = 'MIT'
14
+
15
+ spec.metadata['homepage_uri'] = 'https://github.com/knapo/kubekrypt'
16
+ spec.metadata['source_code_uri'] = 'https://github.com/knapo/kubekrypt'
17
+ spec.metadata['changelog_uri'] = 'https://github.com/knapo/kubekrypt/blob/main/CHANGELOG.md'
18
+ spec.metadata['rubygems_mfa_required'] = 'true'
19
+
20
+ spec.required_ruby_version = Gem::Requirement.new('>= 3.4.0')
21
+
22
+ spec.files = Dir.chdir(__dir__) do
23
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(bin/|spec/|\.rub)}) }
24
+ end
25
+ spec.bindir = 'exe'
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ['lib']
28
+
29
+ spec.add_dependency 'google-cloud-kms'
30
+ spec.add_dependency 'thor', '~> 1.0'
31
+ spec.add_dependency 'yaml'
32
+ end
@@ -0,0 +1,35 @@
1
+ module KubeKrypt
2
+ class CLI < Thor
3
+ include Thor::Shell
4
+ def self.exit_on_failure?
5
+ true
6
+ end
7
+
8
+ desc 'version', 'Displays the current version of KubeKrypt'
9
+ def version
10
+ puts KubeKrypt::VERSION
11
+ end
12
+
13
+ method_option KMS_KEY, aliases: '-k', desc: 'Google KMS encryption key id to use', required: true
14
+ desc 'encrypt FILE', 'Encrypts Kubernetes secrets manifest using the specified KMS key'
15
+ def encrypt(file_path)
16
+ yaml_content = File.read(file_path)
17
+ content = YAML.safe_load(yaml_content)
18
+ key_name = options.fetch(KMS_KEY)
19
+ raise AlreadyEncrytpedError, file_path if content['kubekrypt']
20
+
21
+ result = KubeKrypt::Encryptor.call(content:, key_name:)
22
+ puts result
23
+ end
24
+
25
+ method_option :base64, desc: 'Base64 encoded values', type: :boolean, required: false
26
+ desc 'decrypt FILE', 'Decrypts Kubernetes secrets manifest using embedded kubekrypt metadata'
27
+ def decrypt(file_path)
28
+ yaml_content = File.read(file_path)
29
+ content = YAML.safe_load(yaml_content)
30
+ base64 = options.fetch(:base64, false)
31
+ result = KubeKrypt::Decryptor.call(content:, base64:)
32
+ puts result
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,32 @@
1
+ module KubeKrypt
2
+ class Decryptor
3
+ attr_reader :client, :key_name
4
+
5
+ def initialize(key_name)
6
+ @client = Google::Cloud::Kms.key_management_service
7
+ @key_name = key_name
8
+ end
9
+
10
+ def call(encodedtext, base64: false)
11
+ ciphertext = Base64.strict_decode64(encodedtext.sub("#{ENC_PREFIX}:", ''))
12
+
13
+ result = client.decrypt(name: key_name, ciphertext:).plaintext
14
+
15
+ if base64
16
+ Base64.strict_encode64(result)
17
+ else
18
+ result
19
+ end
20
+ end
21
+
22
+ def self.call(content:, base64:)
23
+ return content unless content['data']
24
+
25
+ key_name = content.fetch(METADATA_KEY).fetch(KMS_KEY.to_s)
26
+ decryptor = new(key_name)
27
+ content['data'].transform_values! { |encodedtext| decryptor.call(encodedtext, base64:) }
28
+ content.delete(METADATA_KEY)
29
+ content.to_yaml
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ module KubeKrypt
2
+ class Encryptor
3
+ attr_reader :client, :key_name
4
+
5
+ def initialize(key_name)
6
+ @client = Google::Cloud::Kms.key_management_service
7
+ @key_name = key_name
8
+ end
9
+
10
+ def call(plaintext)
11
+ ciphertext = client.encrypt(name: key_name, plaintext:).ciphertext
12
+
13
+ "#{ENC_PREFIX}:#{Base64.strict_encode64(ciphertext)}"
14
+ end
15
+
16
+ def self.call(content:, key_name:)
17
+ return content unless content['data']
18
+
19
+ encryptor = new(key_name)
20
+
21
+ content['data'].transform_values! { |plaintext| encryptor.call(plaintext) }
22
+
23
+ content[METADATA_KEY] = {
24
+ KMS_KEY.to_s => key_name,
25
+ 'version' => VERSION,
26
+ 'modified_at' => Time.now.utc.iso8601
27
+ }
28
+
29
+ content.to_yaml
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,3 @@
1
+ module KubeKrypt
2
+ VERSION = '2.0.0'.freeze
3
+ end
data/lib/kubekrypt.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'base64'
2
+ require 'google/cloud/kms'
3
+ require 'optparse'
4
+ require 'thor'
5
+ require 'yaml'
6
+
7
+ module KubeKrypt
8
+ AlreadyEncrytpedError = Class.new(StandardError)
9
+ KMS_KEY = :kms_key
10
+ ENCRYPTION_METHOD = 'aes-256-gcm'.freeze
11
+ METADATA_KEY = 'kubekrypt'.freeze
12
+ ENC_PREFIX = 'enc'.freeze
13
+ end
14
+
15
+ require 'kubekrypt/version'
16
+ require 'kubekrypt/cli'
17
+ require 'kubekrypt/encryptor'
18
+ require 'kubekrypt/decryptor'
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kubekrypt
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Krzysztof Knapik
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 2025-03-18 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: google-cloud-kms
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: thor
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: yaml
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ email:
55
+ - knapo@knapo.net
56
+ executables:
57
+ - kubekrypt
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - ".github/workflows/ci.yml"
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - CHANGELOG.md
65
+ - Gemfile
66
+ - Gemfile.lock
67
+ - LICENSE
68
+ - README.md
69
+ - Rakefile
70
+ - exe/kubekrypt
71
+ - kubekrypt.gemspec
72
+ - lib/kubekrypt.rb
73
+ - lib/kubekrypt/cli.rb
74
+ - lib/kubekrypt/decryptor.rb
75
+ - lib/kubekrypt/encryptor.rb
76
+ - lib/kubekrypt/version.rb
77
+ homepage: https://github.com/knapo/kubekrypt
78
+ licenses:
79
+ - MIT
80
+ metadata:
81
+ homepage_uri: https://github.com/knapo/kubekrypt
82
+ source_code_uri: https://github.com/knapo/kubekrypt
83
+ changelog_uri: https://github.com/knapo/kubekrypt/blob/main/CHANGELOG.md
84
+ rubygems_mfa_required: 'true'
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 3.4.0
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubygems_version: 3.6.5
100
+ specification_version: 4
101
+ summary: KubeKrypt provides seamless encryption and decryption of secrets in YAML
102
+ files using Google KMS
103
+ test_files: []