cfn-vpn 0.5.0.2 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ca6d3909d559c6d338f7dc2852384adae1933b87fac5e2bcac9c44aefea8346e
4
- data.tar.gz: 72322a94697e760b779ac103e20107af16536d09453862eb59c1faa9a175061f
3
+ metadata.gz: a41e3f9d96119e2dd991397c46dd76a4b2a3512b96019ca0a26882423ffd4d58
4
+ data.tar.gz: ed90e797f95c1a36cdbc740102bd8f764f1168b3fa13cfb0b30cd76b57d857dd
5
5
  SHA512:
6
- metadata.gz: e84e913fae2c4e04670c9b3dea94f4154770557b8da6cc3ac82a26aa3d1b723e30dd523a3bb65387ecb21c7b9e2b4d98fd1c9ec901b3e3f6aaf691c429ec43e4
7
- data.tar.gz: 311eb8388373d7e869b70a4ec5e018fd829edf9ada41e300b3ae7c19ac0ba360e134ee1fd58b5a626871b79c6060e193b2e1823cefa794e5c5ea3a8e8a8d371e
6
+ metadata.gz: 739c501d83e59f546eff20f0e6e5f1e4cbe521ee744b469eaa686209738c561c8fc06168354ad110647525e6074919387b8fe46bce6d652d5a52a583d787d0f2
7
+ data.tar.gz: 7ec851a23a53e3f6d670fde5fd7348fe4f23f3b01c372efb3bc1487682514555a57a9b173f273e46b3808c8878b4589a6350ce7fc6c2471c5c5273139fbb437c
data/.travis.yml ADDED
@@ -0,0 +1,17 @@
1
+ sudo: required
2
+ dist: trusty
3
+ language: ruby
4
+ rvm:
5
+ - 2.5
6
+ script:
7
+ - bundle install
8
+ - gem build cfn-vpn.gemspec
9
+ - gem install cfn-vpn-*.gem
10
+ - cfn-vpn help
11
+ deploy:
12
+ provider: rubygems
13
+ api_key: "${RUBYGEMS_API_KEY}"
14
+ gem: cfn-vpn
15
+ on:
16
+ all_branches: true
17
+ condition: $TRAVIS_BRANCH =~ ^develop|master && $TRAVIS_EVENT_TYPE =~ ^push|api$ && $TRAVIS_REPO_SLUG == "base2services/aws-client-vpn"
data/Dockerfile CHANGED
@@ -1,15 +1,14 @@
1
- FROM ruby:2.7
1
+ FROM ruby:2.7-alpine
2
2
 
3
- RUN apt-get update -qq \
4
- && apt-get install -qqy \
5
- easy-rsa \
6
- git \
3
+ RUN apk add --no-cache easy-rsa git \
4
+ # Hack until easy-rsa 3.0.7 is released https://github.com/OpenVPN/easy-rsa/issues/261
5
+ && sed -i 's/^RANDFILE\s*=\s\$ENV.*/#&/' /usr/share/easy-rsa/openssl-easyrsa.cnf \
7
6
  && ln -s /usr/share/easy-rsa/easyrsa /usr/bin/
8
7
 
9
8
  ENV EASYRSA=/usr/share/easy-rsa
10
9
  ENV EASYRSA_BATCH=yes
11
10
 
12
- ARG CFNVPN_VERSION="1.5.0"
11
+ ARG CFNVPN_VERSION="0.5.0"
13
12
 
14
13
  COPY . /src
15
14
 
@@ -18,9 +17,9 @@ WORKDIR /src
18
17
  RUN gem build cfn-vpn.gemspec \
19
18
  && gem install cfn-vpn-${CFNVPN_VERSION}.gem \
20
19
  && rm -rf /src
21
-
22
- RUN addgroup --gid 1000 cfnvpn && \
23
- adduser --home /home/cfnvpn --uid 1000 --disabled-password --gecos GECOS --gid 1000 cfnvpn
20
+
21
+ RUN addgroup -g 1000 cfnvpn && \
22
+ adduser -D -u 1000 -G cfnvpn cfnvpn
24
23
 
25
24
  USER cfnvpn
26
25
 
data/Gemfile.lock CHANGED
@@ -1,75 +1,66 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cfn-vpn (0.5.0)
4
+ cfn-vpn (0.2.0)
5
5
  aws-sdk-acm (~> 1, < 2)
6
6
  aws-sdk-cloudformation (~> 1, < 2)
7
7
  aws-sdk-ec2 (~> 1.95, < 2)
8
8
  aws-sdk-s3 (~> 1, < 2)
9
9
  cfhighlander (~> 0.9, < 1)
10
- netaddr (= 2.0.4)
10
+ cfndsl (~> 0.17, < 1)
11
11
  terminal-table (~> 1, < 2)
12
12
  thor (~> 0.20)
13
13
 
14
14
  GEM
15
15
  remote: https://rubygems.org/
16
16
  specs:
17
- addressable (2.8.1)
18
- public_suffix (>= 2.0.2, < 6.0)
19
- aws-eventstream (1.2.0)
20
- aws-partitions (1.707.0)
21
- aws-sdk-acm (1.55.0)
22
- aws-sdk-core (~> 3, >= 3.165.0)
17
+ aws-eventstream (1.0.3)
18
+ aws-partitions (1.253.0)
19
+ aws-sdk-acm (1.23.0)
20
+ aws-sdk-core (~> 3, >= 3.56.0)
23
21
  aws-sigv4 (~> 1.1)
24
- aws-sdk-cloudformation (1.76.0)
25
- aws-sdk-core (~> 3, >= 3.165.0)
22
+ aws-sdk-cloudformation (1.29.0)
23
+ aws-sdk-core (~> 3, >= 3.71.0)
26
24
  aws-sigv4 (~> 1.1)
27
- aws-sdk-core (3.170.0)
28
- aws-eventstream (~> 1, >= 1.0.2)
29
- aws-partitions (~> 1, >= 1.651.0)
30
- aws-sigv4 (~> 1.5)
31
- jmespath (~> 1, >= 1.6.1)
32
- aws-sdk-ec2 (1.364.0)
33
- aws-sdk-core (~> 3, >= 3.165.0)
25
+ aws-sdk-core (3.85.1)
26
+ aws-eventstream (~> 1.0, >= 1.0.2)
27
+ aws-partitions (~> 1, >= 1.239.0)
34
28
  aws-sigv4 (~> 1.1)
35
- aws-sdk-kms (1.62.0)
36
- aws-sdk-core (~> 3, >= 3.165.0)
29
+ jmespath (~> 1.0)
30
+ aws-sdk-ec2 (1.124.0)
31
+ aws-sdk-core (~> 3, >= 3.71.0)
37
32
  aws-sigv4 (~> 1.1)
38
- aws-sdk-s3 (1.119.0)
39
- aws-sdk-core (~> 3, >= 3.165.0)
33
+ aws-sdk-kms (1.27.0)
34
+ aws-sdk-core (~> 3, >= 3.71.0)
35
+ aws-sigv4 (~> 1.1)
36
+ aws-sdk-s3 (1.59.0)
37
+ aws-sdk-core (~> 3, >= 3.83.0)
40
38
  aws-sdk-kms (~> 1)
41
- aws-sigv4 (~> 1.4)
42
- aws-sigv4 (1.5.2)
43
- aws-eventstream (~> 1, >= 1.0.2)
44
- cfhighlander (0.12.8)
39
+ aws-sigv4 (~> 1.1)
40
+ aws-sigv4 (1.1.0)
41
+ aws-eventstream (~> 1.0, >= 1.0.2)
42
+ cfhighlander (0.10.7)
45
43
  aws-sdk-cloudformation (~> 1, < 2)
46
44
  aws-sdk-core (~> 3, < 4)
47
45
  aws-sdk-ec2 (~> 1, < 2)
48
46
  aws-sdk-s3 (~> 1, < 2)
49
- cfndsl (~> 1.3, < 2)
47
+ cfndsl (= 0.17.2)
50
48
  duplicate (~> 1.1)
51
49
  git (~> 1.4, < 2)
52
50
  highline (>= 1.7.10, < 1.8)
53
51
  rubyzip (>= 2.0.0, < 3)
54
52
  thor (~> 0.20, < 1)
55
- cfndsl (1.6.0)
56
- hana (~> 1.3)
53
+ cfndsl (0.17.2)
57
54
  duplicate (1.1.1)
58
- git (1.13.2)
59
- addressable (~> 2.8)
60
- rchardet (~> 1.8)
61
- hana (1.3.7)
55
+ git (1.5.0)
62
56
  highline (1.7.10)
63
- jmespath (1.6.2)
64
- netaddr (2.0.4)
65
- public_suffix (5.0.1)
57
+ jmespath (1.4.0)
66
58
  rake (10.5.0)
67
- rchardet (1.8.0)
68
- rubyzip (2.3.2)
59
+ rubyzip (2.0.0)
69
60
  terminal-table (1.8.0)
70
61
  unicode-display_width (~> 1.1, >= 1.1.1)
71
62
  thor (0.20.3)
72
- unicode-display_width (1.8.0)
63
+ unicode-display_width (1.6.0)
73
64
 
74
65
  PLATFORMS
75
66
  ruby
@@ -80,4 +71,4 @@ DEPENDENCIES
80
71
  rake (~> 10.0)
81
72
 
82
73
  BUNDLED WITH
83
- 2.3.13
74
+ 2.0.1
data/README.md CHANGED
@@ -16,11 +16,22 @@ Install `cfn-vpn` gem
16
16
  gem install cfn-vpn
17
17
  ```
18
18
 
19
+ ### easy-rsa
20
+
21
+ **Option 1 - Docker**
22
+
19
23
  Install [docker](https://docs.docker.com/install/)
20
24
 
21
25
  Docker is required to generate the certificates required for the client vpn.
22
26
  The gem uses [openvpn/easy-rsa](https://github.com/OpenVPN/easy-rsa) project in [base2/aws-client-vpn](https://hub.docker.com/r/base2/aws-client-vpn) docker image. [repo](https://github.com/base2Services/ciinabox-containers/tree/master/easy-rsa)
23
27
 
28
+ **Option 1 - local**
29
+
30
+ If you would rather setup easy-rsa than install docker, you can use the `--easyrsa-local` flag when running the commands to use a local copy of easy-rsa, the binary just needs to be available in the `$PATH`. Install from [openvpn/easy-rsa](https://github.com/OpenVPN/easy-rsa)
31
+
32
+
33
+ ### AWS Credentials
34
+
24
35
  Setup your [AWS credentials](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) by either setting a profile or exporting them as environment variables.
25
36
 
26
37
  ```bash
@@ -35,6 +46,10 @@ Optionally export the AWS region if not providing `--region` flag
35
46
  export AWS_REGION="us-east-1"
36
47
  ```
37
48
 
49
+ ## Docker Image
50
+
51
+ [base2/cfn-vpn](https://hub.docker.com/r/base2/cfn-vpn) docker image for usage in a pipeline which comes pre packaged with all dependencies.
52
+
38
53
  ## Scenarios
39
54
 
40
55
  For further AWS documentation please visit https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/scenario.html
@@ -48,65 +48,6 @@ module CfnVpn
48
48
  end
49
49
  end
50
50
 
51
- def renew(server_cn,client_cn,expiry=nil)
52
- opts = ""
53
- unless expiry.nil?
54
- opts += "--days=#{expiry}"
55
- end
56
-
57
- if @easyrsa_local
58
- ENV["EASYRSA_REQ_CN"] = server_cn
59
- ENV["EASYRSA_PKI"] = @pki_dir
60
- system("tar xzfv #{@cert_dir}/ca.tar.gz --directory #{@build_dir}")
61
- system("easyrsa #{opts} renew server nopass")
62
- system("easyrsa #{opts} renew #{client_cn} nopass")
63
- FileUtils.cp(["#{@pki_dir}/ca.crt", "#{@pki_dir}/issued/server.crt", "#{@pki_dir}/private/server.key", "#{@pki_dir}/issued/#{client_cn}.crt", "#{@pki_dir}/private/#{client_cn}.key"], @cert_dir)
64
- system("tar czfv #{@cert_dir}/ca.tar.gz -C #{@build_dir} pki/")
65
- else
66
- @docker_cmd << "-e EASYRSA_REQ_CN=#{server_cn}"
67
- @docker_cmd << "-e EASYRSA_CLIENT_CN=#{client_cn}"
68
- @docker_cmd << "-e EASYRSA_OPTS=\"#{opts}\""
69
- @docker_cmd << "-v #{@cert_dir}:/easy-rsa/output"
70
- @docker_cmd << @easyrsa_image
71
- @docker_cmd << "sh -c 'renew'"
72
- CfnVpn::Log.logger.debug `#{@docker_cmd.join(' ')}`
73
- end
74
- end
75
-
76
- def rebuild(server_cn,client_cn,expiry=nil)
77
- timestamp = Time.now.getutc.to_i
78
- opts = ""
79
- unless expiry.nil?
80
- opts += "--days=#{expiry}"
81
- end
82
-
83
- if @easyrsa_local
84
- ENV["EASYRSA_REQ_CN"] = server_cn
85
- ENV["EASYRSA_PKI"] = @pki_dir
86
- system("tar xzfv #{@cert_dir}/ca.tar.gz --directory #{@build_dir}")
87
-
88
- FileUtils.mv("#{@pki_dir}/reqs/server.req", "#{@pki_dir}/reqs/server.req.bak-#{timestamp}")
89
- FileUtils.mv("#{@pki_dir}/issued/server.crt", "#{@pki_dir}/issued/server.req.bak-#{timestamp}")
90
- FileUtils.mv("#{@pki_dir}/private/server.key", "#{@pki_dir}/private/server.req.bak-#{timestamp}")
91
- FileUtils.mv("#{@pki_dir}/reqs/#{client_cn}.req", "#{@pki_dir}/reqs/#{client_cn}.req.bak-#{timestamp}")
92
- FileUtils.mv("#{@pki_dir}/issued/#{client_cn}.crt", "#{@pki_dir}/issued/#{client_cn}.req.bak-#{timestamp}")
93
- FileUtils.mv("#{@pki_dir}/private/#{client_cn}.key", "#{@pki_dir}/private/#{client_cn}.req.bak-#{timestamp}")
94
-
95
- system("easyrsa #{opts} build-server-full server nopass")
96
- system("easyrsa #{opts} build-client-full #{client_cn} nopass")
97
- FileUtils.cp(["#{@pki_dir}/ca.crt", "#{@pki_dir}/issued/server.crt", "#{@pki_dir}/private/server.key", "#{@pki_dir}/issued/#{client_cn}.crt", "#{@pki_dir}/private/#{client_cn}.key"], @cert_dir)
98
- system("tar czfv #{@cert_dir}/ca.tar.gz -C #{@build_dir} pki/")
99
- else
100
- @docker_cmd << "-e EASYRSA_REQ_CN=#{server_cn}"
101
- @docker_cmd << "-e EASYRSA_CLIENT_CN=#{client_cn}"
102
- @docker_cmd << "-e EASYRSA_OPTS=\"#{opts}\""
103
- @docker_cmd << "-v #{@cert_dir}:/easy-rsa/output"
104
- @docker_cmd << @easyrsa_image
105
- @docker_cmd << "sh -c 'rebuild'"
106
- CfnVpn::Log.logger.debug `#{@docker_cmd.join(' ')}`
107
- end
108
- end
109
-
110
51
  def generate_client(client_cn)
111
52
  if @easyrsa_local
112
53
  ENV["EASYRSA_PKI"] = @pki_dir
@@ -41,11 +41,11 @@ module CfnVpn
41
41
 
42
42
  params.each do |param|
43
43
  if !parameters[param[:parameter_key]].nil?
44
- param['parameter_value'] = parameters[param[:parameter_key]]
45
- param['use_previous_value'] = false
44
+ param[:parameter_value] = parameters[param[:parameter_key]]
45
+ param[:use_previous_value] = false
46
46
  end
47
47
  end
48
-
48
+
49
49
  template_body = File.read(template_path)
50
50
  Log.logger.debug "Creating changeset"
51
51
  change_set = @client.create_change_set({
data/lib/cfnvpn/modify.rb CHANGED
@@ -23,9 +23,9 @@ module CfnVpn
23
23
  class_option :cidr, desc: 'cidr from which to assign client IP addresses'
24
24
  class_option :dns_servers, desc: 'DNS Servers to push to clients.'
25
25
 
26
- class_option :split_tunnel, type: :boolean, default: false, desc: 'only push routes to the client on the vpn endpoint'
27
- class_option :internet_route, type: :boolean, default: true, desc: 'create a default route to the internet'
28
- class_option :protocol, type: :string, default: 'udp', enum: ['udp','tcp'], desc: 'set the protocol for the vpn connections'
26
+ class_option :split_tunnel, type: :boolean, desc: 'only push routes to the client on the vpn endpoint'
27
+ class_option :internet_route, type: :boolean, desc: 'create a default route to the internet'
28
+ class_option :protocol, type: :string, enum: ['udp','tcp'], desc: 'set the protocol for the vpn connections'
29
29
 
30
30
  def self.source_root
31
31
  File.dirname(__FILE__)
@@ -44,12 +44,12 @@ module CfnVpn
44
44
  def initialize_config
45
45
  @config = {}
46
46
  @config['parameters'] = {}
47
- @config['parameters']['AssociationSubnetId'] = @options['subnet_id']
48
- @config['parameters']['ClientCidrBlock'] = @options['cidr']
49
- @config['parameters']['DnsServers'] = @options['dns_servers']
50
- @config['parameters']['SplitTunnel'] = @options['split_tunnel'].to_s
51
- @config['parameters']['InternetRoute'] = @options['internet_route'].to_s
52
- @config['parameters']['Protocol'] = @options['protocol']
47
+ @config['parameters']['AssociationSubnetId'] = @options['subnet_id'] unless @options['subnet_id'].nil?
48
+ @config['parameters']['ClientCidrBlock'] = @options['cidr'] unless @options['cidr'].nil?
49
+ @config['parameters']['DnsServers'] = @options['dns_servers'] unless @options['dns_servers'].nil?
50
+ @config['parameters']['SplitTunnel'] = @options['split_tunnel'].to_s unless @options['split_tunnel'].nil?
51
+ @config['parameters']['InternetRoute'] = @options['internet_route'].to_s unless @options['internet_route'].nil?
52
+ @config['parameters']['Protocol'] = @options['protocol'] unless @options['protocol'].nil?
53
53
  @config['template_version'] = '0.2.0'
54
54
  end
55
55
 
@@ -1,4 +1,4 @@
1
1
  module CfnVpn
2
- VERSION = "0.5.0.2".freeze
2
+ VERSION = "0.5.1".freeze
3
3
  CHANGE_SET_VERSION = VERSION.gsub('.', '-').freeze
4
4
  end
data/lib/cfnvpn.rb CHANGED
@@ -9,7 +9,6 @@ require 'cfnvpn/sessions'
9
9
  require 'cfnvpn/routes'
10
10
  require 'cfnvpn/share'
11
11
  require 'cfnvpn/embedded'
12
- require 'cfnvpn/renew_certificate'
13
12
 
14
13
  module CfnVpn
15
14
  class Cli < Thor
@@ -22,9 +21,6 @@ module CfnVpn
22
21
 
23
22
  register CfnVpn::Init, 'init', 'init [name]', 'Create a AWS Client VPN'
24
23
  tasks["init"].options = CfnVpn::Init.class_options
25
-
26
- register CfnVpn::RenewCertificate, 'renew', 'renew [name]', 'Create a AWS Client VPN'
27
- tasks["renew"].options = CfnVpn::RenewCertificate.class_options
28
24
 
29
25
  register CfnVpn::Modify, 'modify', 'modify [name]', 'Modify your AWS Client VPN'
30
26
  tasks["modify"].options = CfnVpn::Modify.class_options
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfn-vpn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0.2
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guslington
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-08 00:00:00.000000000 Z
11
+ date: 2020-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -194,10 +194,8 @@ executables:
194
194
  extensions: []
195
195
  extra_rdoc_files: []
196
196
  files:
197
- - ".github/workflows/build-gem.yml"
198
- - ".github/workflows/release-gem.yml"
199
- - ".github/workflows/release-image.yml"
200
197
  - ".gitignore"
198
+ - ".travis.yml"
201
199
  - Dockerfile
202
200
  - Gemfile
203
201
  - Gemfile.lock
@@ -219,7 +217,6 @@ files:
219
217
  - lib/cfnvpn/init.rb
220
218
  - lib/cfnvpn/log.rb
221
219
  - lib/cfnvpn/modify.rb
222
- - lib/cfnvpn/renew_certificate.rb
223
220
  - lib/cfnvpn/revoke.rb
224
221
  - lib/cfnvpn/routes.rb
225
222
  - lib/cfnvpn/s3.rb
@@ -249,7 +246,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
249
246
  - !ruby/object:Gem::Version
250
247
  version: '0'
251
248
  requirements: []
252
- rubygems_version: 3.1.6
249
+ rubyforge_project:
250
+ rubygems_version: 2.7.6
253
251
  signing_key:
254
252
  specification_version: 4
255
253
  summary: creates and manages resources for the aws client vpn
@@ -1,28 +0,0 @@
1
- name: test and build gem
2
- on:
3
- push:
4
- branches: [ master ]
5
- pull_request:
6
- branches: [ master ]
7
-
8
- jobs:
9
- build:
10
- name: test + build
11
- runs-on: ubuntu-latest
12
-
13
- steps:
14
- - uses: actions/checkout@v3
15
-
16
- - name: Set up ruby 2.7
17
- uses: ruby/setup-ruby@v1
18
- with:
19
- ruby-version: 2.7
20
-
21
- - name: rspec
22
- run: |
23
- gem install rspec
24
- rspec
25
-
26
- - name: build gem
27
- run: |
28
- gem build cfn-vpn.gemspec
@@ -1,34 +0,0 @@
1
- name: release gem
2
-
3
- on:
4
- release:
5
- types: [published]
6
-
7
- jobs:
8
- build:
9
- name: Build + Publish Gem
10
- runs-on: ubuntu-latest
11
-
12
- steps:
13
- - name: Check out the repo
14
- uses: actions/checkout@v3
15
-
16
- - name: Set up ruby 2.7
17
- uses: ruby/setup-ruby@v1
18
- with:
19
- ruby-version: 2.7
20
-
21
- - name: rspec
22
- run: |
23
- gem install rspec
24
- rspec
25
-
26
- - name: build gem
27
- run: |
28
- gem build cfn-vpn.gemspec
29
-
30
- - name: Publish gem
31
- uses: dawidd6/action-publish-gem@v1
32
- with:
33
- api_key: ${{secrets.RUBYGEMS_API_KEY}}
34
- github_token: ${{secrets.GITHUB_TOKEN}}
@@ -1,33 +0,0 @@
1
- name: release docker image
2
-
3
- on:
4
- release:
5
- types: [published]
6
-
7
- jobs:
8
- build:
9
- name: Build + Publish Container Image
10
- runs-on: ubuntu-latest
11
-
12
- steps:
13
- - name: Check out the repo
14
- uses: actions/checkout@v3
15
-
16
- - name: Set up Docker Buildx
17
- uses: docker/setup-buildx-action@v1
18
-
19
- - name: Login to GitHub Container Repository
20
- uses: docker/login-action@v1
21
- with:
22
- registry: ghcr.io
23
- username: ${{ github.repository_owner }}
24
- password: ${{ secrets.GHCR_PUSH_TOKEN }}
25
-
26
- - name: Build and push Container Image to GitHub Container Repository
27
- uses: docker/build-push-action@v3
28
- with:
29
- context: .
30
- file: ./Dockerfile
31
- push: true
32
- tags: ghcr.io/base2services/cfnvpn:${{ github.event.release.tag_name }}
33
- build-args: CFNVPN_VERSION=${{ github.event.release.tag_name }}
@@ -1,123 +0,0 @@
1
- require 'thor'
2
- require 'fileutils'
3
- require 'cfnvpn/cloudformation'
4
- require 'cfnvpn/certificates'
5
- require 'cfnvpn/cfhighlander'
6
- require 'cfnvpn/cloudformation'
7
- require 'cfnvpn/log'
8
- require 'cfnvpn/clientvpn'
9
- require 'cfnvpn/globals'
10
-
11
- module CfnVpn
12
- class RenewCertificate < Thor::Group
13
- include Thor::Actions
14
- include CfnVpn::Log
15
-
16
- argument :name
17
-
18
- class_option :profile, aliases: :p, desc: 'AWS Profile'
19
- class_option :region, aliases: :r, default: ENV['AWS_REGION'], desc: 'AWS Region'
20
- class_option :verbose, desc: 'set log level to debug', type: :boolean
21
-
22
- class_option :server_cn, required: true, desc: 'server certificate common name'
23
- class_option :client_cn, desc: 'client certificate common name'
24
- class_option :easyrsa_local, type: :boolean, default: false, desc: 'run the easyrsa executable from your local rather than from docker'
25
- class_option :certificate_expiry, type: :string, desc: 'value in days for when the server certificates expire, defaults to 825 days'
26
- class_option :rebuild, type: :boolean, default: false, desc: 'generates new certificates from the existing CA for certiciate type VPNs'
27
- class_option :bucket, required: true, desc: 's3 bucket'
28
-
29
- def self.source_root
30
- File.dirname(__FILE__)
31
- end
32
-
33
- def set_loglevel
34
- Log.logger.level = Logger::DEBUG if @options['verbose']
35
- end
36
-
37
- def create_build_directory
38
- @build_dir = "#{CfnVpn.cfnvpn_path}/#{@name}"
39
- @cert_dir = "#{@build_dir}/certificates"
40
- Log.logger.debug "creating directory #{@cert_dir}"
41
- FileUtils.mkdir_p(@cert_dir)
42
- end
43
-
44
- def initialize_config
45
- @config = {}
46
- @config['parameters'] = {}
47
- @config['template_version'] = '0.2.0'
48
- end
49
-
50
- def stack_exist
51
- @cfn = CfnVpn::Cloudformation.new(@options['region'],@name)
52
- if !@cfn.does_cf_stack_exist()
53
- Log.logger.error "#{@name}-cfnvpn stack doesn't exists in this account in region #{@options['region']}\n Try running `cfn-vpn init #{@name}` to setup the stack"
54
- exit 1
55
- end
56
- end
57
-
58
- def set_client_cn
59
- @client_cn = @options['client_cn'] ? @options['client_cn'] : "client-vpn.#{@options['server_cn']}"
60
- end
61
-
62
- # create certificates
63
- def generate_server_certificates
64
- s3 = CfnVpn::S3.new(@options['region'],@options['bucket'],@name)
65
- s3.get_object("#{@cert_dir}/ca.tar.gz")
66
- cert = CfnVpn::Certificates.new(@build_dir,@name,@options['easyrsa_local'])
67
- if @options['rebuild']
68
- Log.logger.info "rebuilding certificates using openvpn easy-rsa"
69
- cert.rebuild(@options['server_cn'],@client_cn,@options['certificate_expiry'])
70
- else
71
- Log.logger.info "renewing certificates using openvpn easy-rsa"
72
- cert.renew(@options['server_cn'],@client_cn,@options['certificate_expiry'])
73
- end
74
- end
75
-
76
- def upload_certificates
77
- cert = CfnVpn::Certificates.new(@build_dir,@name,@options['easyrsa_local'])
78
- @config['parameters']['ServerCertificateArn'] = cert.upload_certificates(@options['region'],'server','server',@options['server_cn'])
79
- @config['parameters']['ClientCertificateArn'] = cert.upload_certificates(@options['region'],@client_cn,'client')
80
- s3 = CfnVpn::S3.new(@options['region'],@options['bucket'],@name)
81
- s3.store_object("#{@build_dir}/certificates/ca.tar.gz")
82
- end
83
-
84
- def deploy_vpn
85
- template('templates/cfnvpn.cfhighlander.rb.tt', "#{@build_dir}/#{@name}.cfhighlander.rb", @config, force: true)
86
- Log.logger.debug "Generating cloudformation from #{@build_dir}/#{@name}.cfhighlander.rb"
87
- cfhl = CfnVpn::CfHiglander.new(@options['region'],@name,@config,@build_dir)
88
- template_path = cfhl.render()
89
- Log.logger.debug "Cloudformation template #{template_path} generated and validated"
90
-
91
- Log.logger.info "Modifying cloudformation stack #{@name}-cfnvpn in #{@options['region']}"
92
- cfn = CfnVpn::Cloudformation.new(@options['region'],@name)
93
- change_set, change_set_type = cfn.create_change_set(template_path,@config['parameters'])
94
- cfn.wait_for_changeset(change_set.id)
95
- changes = cfn.get_change_set(change_set.id)
96
-
97
- Log.logger.warn("The following changes to the cfnvpn stack will be made")
98
- changes.changes.each do |change|
99
- Log.logger.warn("ID: #{change.resource_change.logical_resource_id} Action: #{change.resource_change.action}")
100
- change.resource_change.details.each do |details|
101
- Log.logger.warn("Name: #{details.target.name} Attribute: #{details.target.attribute} Cause: #{details.causing_entity}")
102
- end
103
- end
104
-
105
- continue = yes? "Continue?", :green
106
- if !continue
107
- Log.logger.error("Cancelled cfn-vpn modifiy #{@name}")
108
- exit 1
109
- end
110
-
111
- cfn.execute_change_set(change_set.id)
112
- cfn.wait_for_execute(change_set_type)
113
- Log.logger.debug "Changeset #{change_set_type} complete"
114
- end
115
-
116
- def finish
117
- vpn = CfnVpn::ClientVpn.new(@name,@options['region'])
118
- @endpoint_id = vpn.get_endpoint_id()
119
- Log.logger.info "Client VPN #{@endpoint_id} modified."
120
- end
121
-
122
- end
123
- end