Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
244 commits
Select commit Hold shift + click to select a range
aa7fa6e
start work
irbgeo Jun 10, 2022
1276a5e
add getting all certs
irbgeo Jun 13, 2022
c240ed8
first variant
irbgeo Jun 14, 2022
6b134e5
update readme
irbgeo Jun 14, 2022
729da55
up
irbgeo Jun 14, 2022
a902269
up intermediate ca generation
irbgeo Jun 14, 2022
a3e93df
update
irbgeo Jun 14, 2022
ad04b10
up
irbgeo Jun 14, 2022
9c98d18
up
irbgeo Jun 14, 2022
3996ec2
up
irbgeo Jun 14, 2022
47898fa
update
irbgeo Jun 14, 2022
59bb1d3
update
irbgeo Jun 14, 2022
6685607
up:
irbgeo Jun 14, 2022
6f9fddb
up format:
irbgeo Jun 14, 2022
fa5b056
up
irbgeo Jun 14, 2022
dc50f66
fix gereate intermediate ca | genereate simple cert
irbgeo Jun 15, 2022
e8af9fa
update
irbgeo Jun 15, 2022
6a753d6
option certs
irbgeo Jun 15, 2022
bca34e9
fix
irbgeo Jun 15, 2022
72f1ba7
add slice of certs
irbgeo Jun 15, 2022
3f9d58a
update
irbgeo Jun 15, 2022
28853b2
up
irbgeo Jun 15, 2022
4b176e5
fix
irbgeo Jun 15, 2022
cb121e8
update
irbgeo Jun 15, 2022
20b0053
update
irbgeo Jun 16, 2022
f8a5ab2
update
irbgeo Jun 16, 2022
0b98e85
update path
irbgeo Jun 16, 2022
d14c022
update readme
irbgeo Jun 16, 2022
fa42283
update approle paths
irbgeo Jun 16, 2022
6f180d9
up
irbgeo Jun 16, 2022
1ec26c6
update
irbgeo Jun 16, 2022
6f9846f
update
irbgeo Jun 16, 2022
60d5d2c
update
irbgeo Jun 16, 2022
d7ddadf
update
irbgeo Jun 16, 2022
387e2bc
add ips add hosts
irbgeo Jun 17, 2022
c462c7b
up readme
irbgeo Jun 17, 2022
6ffec41
up
irbgeo Jun 17, 2022
4f7ae92
update readme
irbgeo Jun 17, 2022
5cc09ec
update err info
irbgeo Jun 17, 2022
7d0e256
add comments
irbgeo Jun 17, 2022
513b76e
update
irbgeo Jun 17, 2022
90ae286
order of work with certs
irbgeo Jun 18, 2022
ac7d778
add root ca
irbgeo Jun 18, 2022
82c4205
add logs
irbgeo Jun 18, 2022
b26c8a6
update
irbgeo Jun 18, 2022
35f4f1f
update
irbgeo Jun 18, 2022
bb1cd54
update
irbgeo Jun 18, 2022
9771a61
Добавляет /root/ в пути интермедиат и рут сертификатов
FR-Solution Jun 18, 2022
86ca4a4
refactoring
irbgeo Jun 20, 2022
bb767e9
Merge branch 'main' of github.com:Fraima/key-keeper into main
FR-Solution Jun 20, 2022
ce7a401
fix:
irbgeo Jun 20, 2022
bdbd590
Merge branch 'main' of github.com:Fraima/key-keeper into main
FR-Solution Jun 20, 2022
aa7f245
update
irbgeo Jun 20, 2022
c65ced4
Merge branch 'main' of github.com:Fraima/key-keeper into main
FR-Solution Jun 20, 2022
0814efa
update
irbgeo Jun 20, 2022
351f0ab
Merge branch 'main' of github.com:Fraima/key-keeper into main
FR-Solution Jun 20, 2022
cda1203
update
irbgeo Jun 20, 2022
e8fd723
update
irbgeo Jun 20, 2022
44e4d24
update
irbgeo Jun 20, 2022
27f0ffc
update
irbgeo Jun 20, 2022
c6d3d8f
local | external key
irbgeo Jun 20, 2022
4ff8ef7
add without key
irbgeo Jun 20, 2022
b90b90e
exported key
irbgeo Jun 20, 2022
56c4c85
Добавляет пример конфига
FR-Solution Jun 20, 2022
ffd4601
update
irbgeo Jun 21, 2022
9ea8bd4
Merge branch 'main' of github.com:terra-cube/key-keeper
irbgeo Jun 21, 2022
04045ee
update
irbgeo Jun 21, 2022
a088816
up
irbgeo Jun 21, 2022
e37090d
up
irbgeo Jun 21, 2022
4799652
update
irbgeo Jun 22, 2022
cfe2fad
rsa key in kv name
irbgeo Jun 23, 2022
d3f311e
up
irbgeo Jun 23, 2022
c538cd1
update
irbgeo Jun 23, 2022
da8a151
update
irbgeo Jun 23, 2022
bb752c7
update
irbgeo Jun 23, 2022
12ca898
up
irbgeo Jun 23, 2022
a9e3a4d
up
irbgeo Jun 23, 2022
f5c2f1b
up
irbgeo Jun 23, 2022
f8f1e42
up name
irbgeo Jun 29, 2022
63aea4b
update
irbgeo Jun 29, 2022
e56f581
update
irbgeo Jun 29, 2022
f04521e
add logs
irbgeo Jul 2, 2022
126d0ba
update
irbgeo Jul 5, 2022
f7fa1b5
up
irbgeo Jul 5, 2022
e5c6a7e
update
irbgeo Jul 5, 2022
56cfa76
rsa type
irbgeo Jul 5, 2022
4a077c5
update generation
irbgeo Jul 6, 2022
f5db71d
update
irbgeo Jul 6, 2022
1ddeddc
Merge pull request #1 from fraima/refactoring/paths
irbgeo Jul 6, 2022
2eb02e3
update
irbgeo Jul 12, 2022
b4f838a
Merge pull request #2 from fraima/refactoring/paths
irbgeo Jul 12, 2022
975c2a9
update
irbgeo Jul 12, 2022
2e08eda
up readme
irbgeo Jul 12, 2022
04c346a
update
irbgeo Aug 16, 2022
9f4817f
update
irbgeo Aug 17, 2022
d496121
multiple configs | trackeing new configs
irbgeo Aug 19, 2022
4cd96ee
добавляет тестовый пример
FR-Solution Aug 20, 2022
20d90fd
доп правки
FR-Solution Aug 20, 2022
efed638
правки
FR-Solution Aug 20, 2022
88c7b4c
Добавлен итоговый пример
FR-Solution Aug 20, 2022
c20768b
фикс
FR-Solution Aug 20, 2022
e52de39
Фикс
FR-Solution Aug 20, 2022
26cfcc1
фикс
FR-Solution Aug 20, 2022
117e044
фикс
FR-Solution Aug 20, 2022
6d42545
Merge branch 'main' of github.com:terra-cube/key-keeper into feature/…
irbgeo Aug 22, 2022
3d70237
update
irbgeo Aug 23, 2022
fb0d937
feature/FD-7 добавляет файл структуры
FR-Solution Aug 23, 2022
1581c2b
feture/FD-7 фикс
FR-Solution Aug 23, 2022
35db6c7
фикс
FR-Solution Aug 23, 2022
6f767d1
done
irbgeo Aug 29, 2022
02a2cd4
done
irbgeo Aug 29, 2022
3d1223c
update
irbgeo Aug 30, 2022
89bedb4
update
irbgeo Aug 30, 2022
dfe9eff
up
irbgeo Aug 30, 2022
4176bee
update
irbgeo Aug 30, 2022
18555eb
up
irbgeo Aug 30, 2022
071180a
up
irbgeo Aug 30, 2022
0c7de41
fix x509
irbgeo Aug 30, 2022
3257207
fix csr
irbgeo Aug 30, 2022
3906e05
fix
irbgeo Aug 30, 2022
11b5fbf
фикс
FR-Solution Aug 30, 2022
e732f05
generation csr
irbgeo Sep 1, 2022
7c6a94d
Merge branch 'feature/FD-7-configuration-modification' of github.com:…
irbgeo Sep 1, 2022
fd218e5
up
irbgeo Sep 1, 2022
a79c991
up
irbgeo Sep 1, 2022
8938cc3
rename
irbgeo Sep 1, 2022
9677702
update
irbgeo Sep 5, 2022
96acc89
Merge pull request #3 from fraima/feature/FD-7-configuration-modifica…
irbgeo Sep 5, 2022
27143e9
update
irbgeo Sep 5, 2022
bac401b
update
irbgeo Sep 5, 2022
9f1d121
add debug info
irbgeo Sep 5, 2022
8f0674c
add debug info
irbgeo Sep 5, 2022
b47811e
add ipv4
irbgeo Sep 5, 2022
929e89d
add ipv4
irbgeo Sep 5, 2022
6ad2bd6
add ipv4
irbgeo Sep 5, 2022
150b48b
fix
irbgeo Sep 5, 2022
78aee7d
update
irbgeo Sep 5, 2022
11ec103
update
irbgeo Sep 5, 2022
d74e8f2
up
irbgeo Sep 5, 2022
1d22dc1
фикс шаблона
Sep 5, 2022
e9e37d8
fix
irbgeo Sep 5, 2022
108f34b
fix
irbgeo Sep 5, 2022
883d272
up
irbgeo Sep 5, 2022
cb0a32b
Фиксит проблему ipAddresses и именует создаваемые сертификаты через и…
FR-Solution Sep 5, 2022
c02e0aa
fix
irbgeo Sep 6, 2022
094ecfe
Merge branch 'feature/DP-8-resolver-ip' of github.com:terra-cube/key-…
irbgeo Sep 6, 2022
529bfbc
resolver
irbgeo Sep 6, 2022
c765fae
fix
irbgeo Sep 6, 2022
62eabd2
kv
irbgeo Sep 8, 2022
880837e
fix
irbgeo Sep 8, 2022
1323f9e
fix
irbgeo Sep 8, 2022
71ad051
Merge pull request #4 from fraima/feature/DP-8-resolver-ip
irbgeo Sep 9, 2022
6d34566
done
irbgeo Sep 12, 2022
da3b950
refactoring
irbgeo Sep 12, 2022
81613ae
refactoring
irbgeo Sep 12, 2022
9e81f64
Merge pull request #7 from fraima/feature/FD-14-refactoring
irbgeo Sep 15, 2022
937c31f
merge and fix
irbgeo Sep 15, 2022
4b382a2
ref
irbgeo Sep 15, 2022
242b85a
update
irbgeo Sep 15, 2022
d14ccf8
Merge pull request #5 from fraima/feature/FD-9-role-id-secret-id-path
irbgeo Sep 15, 2022
65951b4
update
irbgeo Sep 16, 2022
8c25d3d
Merge branch 'main' of github.com:terra-cube/key-keeper
irbgeo Sep 16, 2022
9c3240e
FD-15-paths
irbgeo Sep 19, 2022
6eb0c19
update
irbgeo Sep 19, 2022
f2308dc
up dir permission
irbgeo Sep 19, 2022
19f35f3
update struct path
irbgeo Sep 19, 2022
82e8e86
up
irbgeo Sep 19, 2022
340693b
up
irbgeo Sep 19, 2022
d53ccec
up
irbgeo Sep 19, 2022
21db18f
up
irbgeo Sep 21, 2022
9a0d89a
update
irbgeo Sep 22, 2022
5c5dde4
fix secrete
irbgeo Sep 22, 2022
c55edef
fix names
irbgeo Sep 22, 2022
d93c621
change time
irbgeo Sep 22, 2022
3b29aee
fix
irbgeo Sep 22, 2022
109244f
up
irbgeo Sep 22, 2022
6a5b01a
up
irbgeo Sep 22, 2022
7d86ff4
up
irbgeo Sep 23, 2022
18c5c5f
update
irbgeo Sep 23, 2022
0e91679
update
irbgeo Sep 23, 2022
5e197af
refactoring
irbgeo Sep 23, 2022
609eaa5
refactoring
irbgeo Sep 23, 2022
3665912
refactoring
irbgeo Sep 23, 2022
e1cd243
frequncy update oken
irbgeo Sep 23, 2022
aacbffd
update
irbgeo Sep 23, 2022
1ec1a4c
добавляет пример использования
FR-Solution Sep 24, 2022
d620e08
добавляет актуальный конфиг
FR-Solution Sep 24, 2022
6c97b01
restore ca cert
irbgeo Sep 25, 2022
fcf03f8
Merge branch 'main' of github.com:terra-cube/key-keeper
irbgeo Sep 25, 2022
55b25a5
trigger
irbgeo Sep 25, 2022
b73ac90
with update
irbgeo Sep 26, 2022
30c4b73
fix
irbgeo Sep 26, 2022
b08bc56
refactoring | improving logging
irbgeo Sep 27, 2022
89b98ef
up
irbgeo Sep 27, 2022
7eb9c60
up
irbgeo Sep 28, 2022
07d778a
обновляет структуру конфигов в ридми
FR-Solution Sep 28, 2022
dded596
update
irbgeo Sep 29, 2022
5df9837
Update README.md
FR-Solution Sep 29, 2022
f344f6e
update
irbgeo Sep 29, 2022
33fa308
add hostname
irbgeo Oct 3, 2022
90e6d6d
fix
irbgeo Oct 4, 2022
5206dbb
up
irbgeo Oct 5, 2022
84bcb35
update
irbgeo Oct 6, 2022
5fc2537
up secret config
irbgeo Oct 7, 2022
f30e2a1
fix bootstrap token
irbgeo Oct 10, 2022
dc0095f
fix bootstrap token
irbgeo Oct 10, 2022
58850a8
cfg up
irbgeo Oct 10, 2022
f93aa5d
update
irbgeo Oct 10, 2022
7fe15d7
Поправляет чек интервал для сертификатов
FR-Solution Oct 10, 2022
8836250
up
irbgeo Oct 10, 2022
d4739c1
Merge branch 'main' of github.com:terra-cube/key-keeper
irbgeo Oct 10, 2022
7318df4
Исправлено описание структуры
FR-Solution Oct 10, 2022
3cf4786
Merge branch 'main' of github.com:Fraima/key-keeper
FR-Solution Oct 10, 2022
6104d8a
Фикс структуры
FR-Solution Oct 10, 2022
76013e4
up
irbgeo Oct 10, 2022
0bd50f0
up
irbgeo Oct 10, 2022
e667fdd
Добавляет доп описание к примерам
FR-Solution Oct 10, 2022
5b90f50
ref
irbgeo Oct 18, 2022
32063f2
Merge branch 'main' of github.com:terra-cube/key-keeper
irbgeo Oct 18, 2022
7546bbe
fix
irbgeo Oct 20, 2022
9b9ae88
up
irbgeo Oct 20, 2022
27be494
formatting
irbgeo Oct 24, 2022
992ccfd
fix nil crt
irbgeo Oct 24, 2022
befddcf
work with token
irbgeo Nov 9, 2022
cf0c4a4
return
irbgeo Nov 9, 2022
987a5f4
refactoring
irbgeo Nov 9, 2022
bb55447
up readme
irbgeo Nov 24, 2022
7b5b354
up Makefile | up Dockerfile
irbgeo Nov 29, 2022
d536ddc
update Dockerfile
irbgeo Nov 30, 2022
48ca7a7
FD-22 cn with hostname placeholder
irbgeo Dec 1, 2022
84775f1
up Makefile
irbgeo Dec 7, 2022
7a2f4b2
fix get ca
irbgeo Dec 9, 2022
1599c2a
dns names
irbgeo Dec 9, 2022
fdef8ea
up
irbgeo Dec 20, 2022
bf1f92b
[main]
FR-Solution Apr 8, 2023
386b772
[main]
FR-Solution Apr 8, 2023
e222ca0
[main]
FR-Solution Apr 8, 2023
4376123
[main]
FR-Solution Apr 8, 2023
18cdb95
[main]
FR-Solution Apr 8, 2023
9f8b718
[main]
FR-Solution Apr 8, 2023
110b6be
[KK-10] добавляет в ридми информацию по spec.usage
FR-Solution Jun 25, 2023
1ab022e
[KK-10] fix
FR-Solution Jun 25, 2023
b24ca0c
Merge pull request #11 from fraima/KK-10
FR-Solution Jun 25, 2023
aba2189
[KK-10] fix link (#12)
FR-Solution Jun 25, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: release
on:
push:
tags:
- "*"
jobs:
publish:
name: release
runs-on: ubuntu-20.04
permissions:
contents: write
steps:
- uses: actions/setup-go@v2
with:
go-version: '1.19'

- name: Set env
shell: bash
run: |
echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV
echo "${{ github.workspace }}/bin" >> $GITHUB_PATH

- uses: actions/cache@v2
with:
path: |
~/go/pkg/mod
~/.cache/go-build
key: go-release-${{ hashFiles('**/go.sum') }}
restore-keys: go-release-

- uses: actions/checkout@v2
with:
fetch-depth: 0
path: src/github.com/fraima/key-keeper

- run: |
make release
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
working-directory: src/github.com/fraima/key-keeper

- uses: ncipollo/release-action@v1
with:
allowUpdates: true
artifacts: src/github.com/fraima/key-keeper/_output/releases/*
bodyFile: src/github.com/fraima/key-keeper/release-notes.md

- uses: actions/upload-artifact@v2
with:
name: build-artifacts
path: src/github.com/fraima/key-keeper/_output
21 changes: 6 additions & 15 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,15 +1,6 @@
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib

# Test binary, built with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

# Dependency directories (remove the comment below to include it)
# vendor/
test/
key-keeper
role_id
secret_id
test.yaml
src/_output/*
23 changes: 23 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
FROM golang:1.19.1-alpine3.16 as builder

WORKDIR /app

COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .

ARG VERSION
ARG PROJECT

RUN go install -ldflags "-s \
-X main.Version=${VERSION}" \
/app/cmd/${PROJECT}

FROM alpine:3.16.0

ARG PROJECT

COPY --from=builder /go/bin/${PROJECT} /usr/local/bin/app

ENTRYPOINT ["app"]
24 changes: 24 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#change for new project
project = key-keeper
#change for new release
release = v1.0.0

tag = $(DOCKER_USER)/$(project):$(release)
pwd = $(shell pwd)
module = $(shell go list -m)

build-and-push:
docker build -t $(tag) --build-arg VERSION=$(release) --build-arg PROJECT=$(project) -f Dockerfile .
docker image push $(tag)
echo $(tag)

formatting:
go fmt ./...
go install github.com/daixiang0/gci@latest
gci write --skip-generated -s standard -s default -s "prefix($(module))" .

linter:
docker run --rm -v $(pwd):/app -w /app golangci/golangci-lint:v1.49.0 golangci-lint run -v

release:
sh hack/release.sh
185 changes: 184 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,184 @@
# key-keeper
# key-keeper

инструмент для linux хостов, позволяющий заказывать в Vault хранилище сертификаты и секреты и следить за их актуальностью.

## Build & Push image

Поменять версию релиза в .release и выполнить:

```bash
make build-and-push DOCKER_USER=geoirb
```

## Build bin

```bash
go build -o key-keeper cmd/key-keeper/main.go
```

## Run bin

```bash
key-keeper -config-dir /path/to/config-dir -config-regexp .*.conf
```

> config-dir - путь до каталога с конфигами
>
> config-regexp - регуляроное выражения для имени файлов которые содержат конфиги для key-keeper

## Описание структуры конфигов:

#### ISSUERS:

| ключ | тип | описание |
| --------------------------------------- | ------ | ----------------------------------------------------------------------- |
| **`issuers `** | list | список инструкций подключений |
| `.name` | string | имя инструкции |
| `.vault.server` | string | адрес Vault server |
| `.vault.auth.caBundle` | object | ca bundle для tls |
| `.vault.auth.tlsInsecure` | bool | отключение проверки tls |
| `.vault.auth.bootstrap` | object | описание метода авторизации для получения secret_id_role_id |
| `.vault.auth.bootstrap.tokenPath` | string | временный токен Vault |
| `.vault.auth.bootstrap.file` | string | путь к временномсу токену Vault |
| `.vault.auth.appRole` | object | описание авторизации по approle |
| `.vault.auth.appRole.name` | string | имя approle |
| `.vault.auth.appRole.path` | string | базовый путь approle в Vault |
| `.vault.auth.appRole.roleIDLocalPath` | string | локальный путь, где будет искать role_id для авторизации |
| `.vault.auth.appRole.secretIDLocalPath` | string | локальный путь, где будет искать secret_id для авторизации |
| `.vault.resource` | object | инструция доступа к vault роли для выпуска сертификата |
| `.vault.resource.role` | string | имя роли через которую будет выпускаться сертификат |
| `.vault.resource.CAPath ` | string | базовый путь PKI хранилища, где прописана роль |
| `.vault.resource.rootCAPath` | string | базовый путь PKI root хранилища от кого будет выписываться intermediate |
| `.vault.resource.kv` | object | описание доступа в Vault к Key Value стореджу |
| `.vault.resource.kv.path` | string | путь в Vault до Key Value стореджа |
| `.vault.timeout ` | string | максимальное время ответа сервера Vault |

```yaml
---
issuers:
- name: kubernetes-ca
vault:
server: http://example.com:9200
auth:
caBundle:
tlsInsecure: true
bootstrap:
token: ${token} # <- или
path: /tmp/bootstrap-token # <- или
appRole:
name: kubernetes-ca
path: "clusters/cluster-1/approle"
secretIDLocalPath: /var/lib/key-keeper/vault/kubernetes-ca/secret-id
roleIDLocalPath: /var/lib/key-keeper/vault/kubernetes-ca/role-id
resource:
role: kubelet-server
CAPath: "clusters/cluster-1/pki/kubernetes"
rootCAPath: "clusters/cluster-1/pki/root"
kv:
path: "clusters/cluster-1/kv"
```

#### CERTIFICATES:

| ключ | тип | описание |
| ---------------------------------- | ------- | ----------------------------------------------------------------------------------------- |
| **`certificates `** | list | список инструкций заказа сертификатов из Vault |
| `.name` | string | имя инструкции |
| `.issuerRef` | object | ссылка на инструкцию issuer через которую произведется авторизация |
| `.issuerRef.name` | string | имя инструкции issuer |
| `.isCa` | bool | указатель, что заказывается сертификат типа CA |
| `.ca` | object | описание расширения для заказа CA |
| `.ca.exportedKey` | bool | инструкция - запрашивать приватный ключ или нет (требуется pki типа external) |
| `.ca.generate` | bool | создаст intermediate или запросит существующий (требуются права на создание intermediate) |
| `.spec` | object | поля для генерации сертификата |
| `.spec.subject` | object | Описывает принадлежность сертификата к... |
| `.spec.subject.commonName` | string | \* |
| `.spec.subject.country` | list | \* |
| `.spec.subject.localite` | list | \* |
| `.spec.subject.organization` | list | \* |
| `.spec.subject.organizationalUnit` | list | \* |
| `.spec.subject.province` | list | \* |
| `.spec.subject.postalCode` | list | \* |
| `.spec.subject.streetAddress` | list | \* |
| `.spec.subject.serialNumber` | string | \* |
| `.spec.privateKey` | object | Описание алгоритма для приватного ключа |
| `.spec.privateKey.algorithm` | string | Алгоритм |
| `.spec.privateKey.encoding` | string | Метод формирования |
| `.spec.privateKey.size` | integer | 2048 / 4096 |
| `.spec.hostnames` | list | список имен для блока alternative names |
| `.spec.ipAddresses` | object | описывает какие ip адреса попадут в ipSans |
| `.spec.ipAddresses.static` | list | список статичных ip адресов который попадет в ipSans |
| `.spec.ipAddresses.interfaces` | list | список ip адресов, взятый с интерфейсов хоста, попадет в ipSans |
| `.spec.ipAddresses.dnsLookup` | list | список ip адресов, взятый из функции dnslookup статичной A записи, попадет в ipSans |
| `.spec.ttl` | string | срок на который заказывается сертификат |
| `.spec.usage` | list | [Key usage extensions and extended key usage](https://pkg.go.dev/crypto/x509#KeyUsage) |
| `.hostPath` | string | путь в локальной файловой системе, где будет сохранен сертификат |
| `.withUpdate` | bool | данный параметр создаст сертификат без последующего перевыпуска |
| `.updateBefore` | string | время до истечения сертификата - при достижении сертификат перевыпустится |
| `.trigger` | list | список баш команд, которые выполнятся после обновления сертификата |

```yaml
certificates:
- name: kubernetes-ca
issuerRef:
name: kubernetes-ca
isCa: true
ca:
exportedKey: false
generate: false
hostPath: "/etc/kubernetes/pki/ca"

- name: kubelet-server
issuerRef:
name: kubelet-server
spec:
subject:
commonName: "system:node:master-0.cluster-1.example.com"
usage:
- server auth
privateKey:
algorithm: "RSA"
encoding: "PKCS1"
size: 4096
ipAddresses:
static:
- 1.1.1.1
###
# * -> Позволяет указывать регексп интерфейсов (на выходе получаем список)
interfaces:
- lo
- eth*
###
# * -> В цикле будет пытаться отрезолвить имя, без выходного значения, сертификат не будет заказан.
dnsLookup:
- api.example.com
ttl: 200h
###
# * -> Указав $HOSTNAME - hostname хоста добавится в поле AltNames сертификата.
hostnames:
- $HOSTNAME
- localhost
- "master-0.cluster-1.example.com"
renewBefore: 100h
hostPath: "/etc/kubernetes/pki/certs/kubelet"
```

#### SECRETS:

| ключ | тип | описание |
| ----------------- | ------ | ------------------------------------------------------------------ |
| **`secrets `** | list | список инструкций заказа секрета из Vault |
| `.name` | string | имя инструкции и одновременно имя секрета в Vault |
| `.issuerRef` | object | ссылка на инструкцию issuer через которую произведется авторизация |
| `.issuerRef.name` | string | имя инструкции issuer |
| `.key` | string | ключ в объекта секрета |
| `.hostPath` | string | путь в локальной файловой системе, где будет сохранен секрет |

```yaml
secrets:
- name: kube-apiserver-sa
issuerRef:
name: kube-apiserver-sa
key: public
hostPath: /etc/kubernetes/pki/certs/kube-apiserver/kube-apiserver-sa.pub
```
68 changes: 68 additions & 0 deletions cmd/key-keeper/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package main

import (
"flag"
"os"
"os/signal"
"syscall"

"go.uber.org/zap"

"github.com/fraima/key-keeper/internal/config"
"github.com/fraima/key-keeper/internal/controller"
"github.com/fraima/key-keeper/internal/issuer/vault"
"github.com/fraima/key-keeper/internal/issuer/vault/client"
)

var (
Version = "undefined"
)

func main() {
loggerConfig := zap.NewProductionConfig()
loggerConfig.Level.SetLevel(zap.DebugLevel)
logger, err := loggerConfig.Build()
if err != nil {
panic(err)
}
zap.ReplaceGlobals(logger)

var configDir, configNameLayout string
flag.StringVar(&configDir, "config-dir", "", "path to dir with configs")
flag.StringVar(&configNameLayout, "config-regexp", "", "regexp for config files names")
flag.Parse()

if configDir == "" {
zap.L().Fatal("not found config path param")
}

if configNameLayout == "" {
zap.L().Fatal("not found regexp for config file's name")
}

cfg, err := config.New(configDir, configNameLayout)
if err != nil {
zap.L().Fatal("read configuration", zap.Error(err))
}

zap.L().Debug("configuration", zap.Any("config", cfg), zap.String("version", Version))

cntl := controller.New(
cfg.GetNewConfig,
vault.Connector(
client.Connect,
),
)

if err := cntl.Start(); err != nil {
zap.L().Fatal("start controller", zap.Error(err))
}

zap.L().Info("started")

ch := make(chan os.Signal, 1)
signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
<-ch

zap.L().Info("goodbye")
}
Loading