init: 아르고cd, vault 기반 인프라 설계
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
## Vault Transit Dev Bootstrap
|
||||
|
||||
이 문서는 dev 환경의 **unseal provider Vault** 를 Terraform으로 선언적으로 bootstrap 하는 절차를 정리합니다.
|
||||
|
||||
이 Vault는 애플리케이션 secret을 직접 저장하지 않고, 업무용 Vault의 transit auto-unseal provider와 workload seed source 역할만 담당합니다.
|
||||
|
||||
### 준비물
|
||||
|
||||
- `kubectl`
|
||||
- `vault`
|
||||
- `jq`
|
||||
- `terraform`
|
||||
- dev 클러스터에 접근 가능한 kubeconfig
|
||||
|
||||
### 0. 기동 상태 확인
|
||||
|
||||
`init / unseal` 전에 먼저 `vault-transit` pod가 실제로 기동 가능한 상태인지 확인합니다.
|
||||
|
||||
```bash
|
||||
kubectl -n vault-transit get deploy,pods,svc,pvc
|
||||
kubectl -n vault-transit rollout status deploy/vault-transit --timeout=180s
|
||||
```
|
||||
|
||||
정상 기준:
|
||||
|
||||
- `deployment/vault-transit` 이 `1/1 Ready`
|
||||
- pod가 `Running`
|
||||
- `CrashLoopBackOff` 가 아님
|
||||
|
||||
기동이 안 되면 아래를 먼저 봅니다.
|
||||
|
||||
```bash
|
||||
kubectl -n vault-transit describe deployment vault-transit
|
||||
kubectl -n vault-transit logs deploy/vault-transit --tail=200
|
||||
kubectl -n vault-transit get events --sort-by=.lastTimestamp | tail -n 30
|
||||
```
|
||||
|
||||
최근 dev 기준 대표 원인은 아래였습니다.
|
||||
|
||||
- `Cluster address must be set when using raft storage`
|
||||
원인: raft storage 사용 시 `api_addr`, `cluster_addr`, listener `cluster_address` 가 빠져 있었음
|
||||
- `Could not chown /vault/config`
|
||||
원인: ConfigMap mount가 read-only 인데 이미지 entrypoint가 해당 경로를 `chown` 하려 함
|
||||
|
||||
현재 base manifest는 위 이슈를 피하기 위해:
|
||||
|
||||
- `api_addr`, `cluster_addr`, `cluster_address` 추가
|
||||
- service/deployment `8201` cluster 포트 추가
|
||||
- deployment `strategy: Recreate`
|
||||
- `/vault/config/vault.hcl` 을 `/tmp/vault.hcl` 로 복사 후 `vault server` 실행
|
||||
|
||||
형태로 정리되어 있습니다.
|
||||
|
||||
### 1. 포트 포워딩
|
||||
|
||||
```bash
|
||||
kubectl port-forward -n vault-transit svc/vault-transit 18200:8200
|
||||
```
|
||||
|
||||
### 2. init / unseal
|
||||
|
||||
```bash
|
||||
export VAULT_ADDR=http://127.0.0.1:18200
|
||||
vault operator init -format=json > .local/vault-transit-dev-init.json
|
||||
vault operator unseal "$(jq -r '.unseal_keys_b64[0]' .local/vault-transit-dev-init.json)"
|
||||
export TF_VAR_vault_token="$(jq -r '.root_token' .local/vault-transit-dev-init.json)"
|
||||
export TF_VAR_vault_addr="$VAULT_ADDR"
|
||||
```
|
||||
|
||||
### 3. Terraform bootstrap
|
||||
|
||||
```bash
|
||||
terraform -chdir=terraform/vault-transit/dev init -input=false
|
||||
terraform -chdir=terraform/vault-transit/dev apply -input=false -auto-approve
|
||||
```
|
||||
|
||||
이 apply 는 아래를 선언적으로 맞춥니다.
|
||||
|
||||
- `kv` / `transit` secrets engine 활성화
|
||||
- workload Vault auto-unseal key 생성
|
||||
- `workload-vault-transit-dev`, `vault-transit-admin-dev`, `vault-transit-automation-dev` policy reconcile
|
||||
- workflow용 `vault-transit-dev-workflow` AppRole reconcile
|
||||
- `vault/vault-transit-seal` Kubernetes Secret 갱신
|
||||
|
||||
필요한 CI credential은 Terraform output 으로 확인합니다.
|
||||
|
||||
```bash
|
||||
terraform -chdir=terraform/vault-transit/dev output workflow_role_id
|
||||
terraform -chdir=terraform/vault-transit/dev output -raw workflow_secret_id
|
||||
```
|
||||
|
||||
이 두 값은 `VAULT_TRANSIT_DEV_ROLE_ID`, `VAULT_TRANSIT_DEV_SECRET_ID` 로 CI secret store 에 저장합니다.
|
||||
|
||||
### 4. 이후 역할
|
||||
|
||||
- 업무용 Vault([vault app](/home/donghyeon/dev/Project-Auth-GitOps/argocd/applications/dev/infra/vault.yaml)) 는 `vault-transit-seal` Secret 의 토큰으로 transit auto-unseal 을 수행합니다.
|
||||
- `vault-transit` provider Vault 자체는 dev/on-prem 전제에서 여전히 **수동 unseal** 입니다.
|
||||
- 수동 bootstrap 은 `terraform/vault-transit/dev`, `terraform/vault/dev` 를 사용합니다.
|
||||
- self-hosted runner routine reconcile 은 provider AppRole 로 로그인한 뒤 `terraform/vault-transit/reconcile`, `terraform/vault/reconcile` 를 차례로 `apply` 합니다.
|
||||
|
||||
### 5. Workload seed 값 입력
|
||||
|
||||
provider Vault는 여전히 workload seed source of truth 이므로, app 비밀값은 한 번 입력해야 합니다.
|
||||
|
||||
```bash
|
||||
export VAULT_ADDR=http://127.0.0.1:18200
|
||||
export VAULT_TOKEN="$(vault write -field=token auth/approle/login \
|
||||
role_id="<vault-transit-workflow-role-id>" \
|
||||
secret_id="<vault-transit-workflow-secret-id>")"
|
||||
|
||||
./scripts/vault-transit/dev/populate-workload-seeds.sh
|
||||
```
|
||||
|
||||
이 스크립트는 값을 **프롬프트로 입력받기 때문에 shell history에 실제 secret이 남지 않습니다.**
|
||||
|
||||
주의:
|
||||
|
||||
- 이 스크립트는 `TF_VAR_transit_vault_token` 이 아니라 **`VAULT_TOKEN`** 을 사용합니다.
|
||||
- `VAULT_ADDR` 는 provider Vault 포트포워드인 `http://127.0.0.1:18200` 이어야 합니다.
|
||||
|
||||
`populate-workload-seeds.example.sh` 는 필요한 key 구조를 보여주는 참고용 예시입니다.
|
||||
|
||||
입력 경로는 목적 기준으로 나뉩니다.
|
||||
|
||||
- `kv/dev/workload/platform/postgres/superuser`
|
||||
- `kv/dev/workload/platform/postgres/auth-server`
|
||||
- `kv/dev/workload/platform/postgres/keycloak`
|
||||
- `kv/dev/workload/platform/keycloak/bootstrap-admin`
|
||||
- `kv/dev/workload/platform/keycloak/client-auth-server`
|
||||
|
||||
`kv/dev/workload/bootstrap` 의 workload AppRole credential 은 manual bootstrap 단계의 `terraform/vault/dev` 가 자동으로 씁니다. 사람이 따로 넣지 않습니다.
|
||||
|
||||
### 6. 운영자 토큰이 필요한 경우
|
||||
|
||||
장기 토큰을 Terraform state 에 저장하지 않기 위해 `vault-transit-admin-dev` 토큰은 자동 발급하지 않습니다.
|
||||
직접 점검이 필요하면 privileged token 으로 아래처럼 짧은 토큰을 발급합니다.
|
||||
|
||||
```bash
|
||||
export VAULT_ADDR=http://127.0.0.1:18200
|
||||
export VAULT_TOKEN="$TF_VAR_vault_token"
|
||||
|
||||
vault token create -orphan -policy=vault-transit-admin-dev -ttl=1h
|
||||
```
|
||||
|
||||
### 주의
|
||||
|
||||
- manual bootstrap state 는 [`.terraform-state/vault-transit-dev.tfstate`](/home/donghyeon/dev/Project-Auth-GitOps/.terraform-state/vault-transit-dev.tfstate) 에 저장됩니다.
|
||||
- routine reconcile state 는 [`.terraform-state/vault-transit-reconcile.tfstate`](/home/donghyeon/dev/Project-Auth-GitOps/.terraform-state/vault-transit-reconcile.tfstate) 에 저장됩니다.
|
||||
- Vault provider state 에는 민감한 값이 들어가므로 self-hosted runner 와 로컬 작업 디렉터리를 동일하게 보호해야 합니다.
|
||||
@@ -0,0 +1,39 @@
|
||||
path "transit/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "kv/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "sys/internal/ui/mounts/*" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
|
||||
path "sys/mounts/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
|
||||
}
|
||||
|
||||
path "sys/auth/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
|
||||
}
|
||||
|
||||
path "sys/policies/acl/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "auth/approle/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "auth/token/create-orphan" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
|
||||
path "auth/token/revoke" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
|
||||
path "auth/token/lookup" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
path "transit/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "kv/data/dev/workload/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "kv/metadata/dev/workload/*" {
|
||||
capabilities = ["read", "delete", "list"]
|
||||
}
|
||||
|
||||
path "sys/internal/ui/mounts/*" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
|
||||
path "sys/mounts/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
|
||||
}
|
||||
|
||||
path "sys/auth/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
|
||||
}
|
||||
|
||||
path "sys/policies/acl/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "auth/approle/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "auth/token/create" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
|
||||
path "auth/token/create-orphan" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
|
||||
path "auth/token/revoke" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
|
||||
path "auth/token/revoke-accessor" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
|
||||
path "auth/token/lookup" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
|
||||
path "auth/token/lookup-accessor" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
|
||||
path "auth/token/lookup-self" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
path "transit/encrypt/workload-vault-dev-unseal" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
|
||||
path "transit/decrypt/workload-vault-dev-unseal" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
|
||||
path "transit/rewrap/workload-vault-dev-unseal" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
|
||||
path "transit/keys/workload-vault-dev-unseal" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
set -eu
|
||||
|
||||
vault kv put kv/dev/workload/platform/postgres/superuser \
|
||||
POSTGRES_SUPERUSER_PASSWORD=change-me
|
||||
|
||||
vault kv put kv/dev/workload/platform/postgres/auth-server \
|
||||
APP_DATASOURCE_USERNAME=project_auth \
|
||||
APP_DATASOURCE_PASSWORD=change-me \
|
||||
AUTH_DB_PASSWORD=change-me
|
||||
|
||||
vault kv put kv/dev/workload/platform/postgres/keycloak \
|
||||
KEYCLOAK_DB_PASSWORD=change-me
|
||||
|
||||
vault kv put kv/dev/workload/platform/keycloak/bootstrap-admin \
|
||||
KC_BOOTSTRAP_ADMIN_PASSWORD=change-me
|
||||
|
||||
vault kv put kv/dev/workload/platform/keycloak/client-auth-server \
|
||||
APP_SECURITY_OAUTH2_KEYCLOAK_CLIENT_SECRET=change-me \
|
||||
KEYCLOAK_CLIENT_SECRET=change-me
|
||||
@@ -0,0 +1,174 @@
|
||||
## Vault Dev Bootstrap
|
||||
|
||||
이 문서는 dev 환경의 **workload Vault** 를 Terraform으로 선언적으로 bootstrap / reconcile 하는 절차를 정리합니다.
|
||||
|
||||
이제 책임은 두 단계로 분리합니다.
|
||||
|
||||
- bootstrap
|
||||
- privileged workload token 필요
|
||||
- 수동 runbook 사용
|
||||
- reconcile
|
||||
- bootstrap 완료 후 `vault-dev-reconcile` workflow 가 routine apply 수행
|
||||
|
||||
사전 조건:
|
||||
|
||||
- [vault-transit bootstrap runbook](/home/donghyeon/dev/Project-Auth-GitOps/runbooks/vault-transit/dev/README.md) 을 먼저 완료해야 합니다.
|
||||
- `vault` namespace에 `vault-transit-seal` Secret 이 준비되어 있어야 workload Vault 가 auto-unseal 됩니다.
|
||||
|
||||
현재 저장소의 source of truth 는 아래 두 Terraform 루트로 분리합니다.
|
||||
|
||||
- bootstrap/manual: `terraform/vault/dev`
|
||||
- reconcile/CI: `terraform/vault/reconcile`
|
||||
|
||||
`bootstrap-runbook.sh` 는 bootstrap 루트를, routine workflow 는 reconcile 루트를 호출합니다.
|
||||
|
||||
### 준비물
|
||||
|
||||
- `kubectl`
|
||||
- `vault`
|
||||
- `jq`
|
||||
- `terraform`
|
||||
- dev 클러스터에 접근 가능한 kubeconfig
|
||||
|
||||
### 1. Vault 포트 포워딩
|
||||
|
||||
```bash
|
||||
kubectl port-forward -n vault svc/vault 8200:8200
|
||||
```
|
||||
|
||||
### 2. Vault init / bootstrap token 준비
|
||||
|
||||
```bash
|
||||
export VAULT_ADDR=http://127.0.0.1:8200
|
||||
vault operator init -format=json > .local/vault-dev-init.json
|
||||
export TF_VAR_workload_vault_addr="$VAULT_ADDR"
|
||||
export TF_VAR_workload_vault_token="$(jq -r '.root_token' .local/vault-dev-init.json)"
|
||||
```
|
||||
|
||||
Transit auto-unseal 구조이므로 정상 상태에서는 `vault operator unseal` 을 반복하지 않습니다.
|
||||
|
||||
### 3. Provider seed credential 연결
|
||||
|
||||
workload Terraform 은 provider Vault 에서 seed 값을 읽고, 생성한 workload workflow AppRole credential 을 다시 provider Vault bootstrap path 로 써넣습니다.
|
||||
|
||||
```bash
|
||||
export TF_VAR_transit_vault_addr=http://127.0.0.1:18200
|
||||
export TF_VAR_transit_vault_token="$(VAULT_ADDR="$TF_VAR_transit_vault_addr" vault write -field=token auth/approle/login \
|
||||
role_id="<vault-transit-workflow-role-id>" \
|
||||
secret_id="<vault-transit-workflow-secret-id>")"
|
||||
```
|
||||
|
||||
### 4. Terraform bootstrap
|
||||
|
||||
```bash
|
||||
terraform -chdir=terraform/vault/dev init -input=false
|
||||
terraform -chdir=terraform/vault/dev apply -input=false -auto-approve
|
||||
```
|
||||
|
||||
이 apply 는 아래를 선언적으로 맞춥니다.
|
||||
|
||||
- `kv`, `database`, `transit` mount 활성화
|
||||
- Kubernetes auth backend / role reconcile
|
||||
- AppRole backend / workflow AppRole reconcile
|
||||
- dev runtime KV 를 provider Vault seed 에 맞춰 동기화
|
||||
- JWT transit key 생성
|
||||
- Postgres database backend / dynamic role 정의
|
||||
- `kv/dev/workload/bootstrap` 에 workload workflow AppRole credential publish
|
||||
|
||||
필요하면 output 으로 workload workflow AppRole 값을 직접 확인할 수 있습니다.
|
||||
|
||||
```bash
|
||||
terraform -chdir=terraform/vault/dev output workflow_role_id
|
||||
terraform -chdir=terraform/vault/dev output -raw workflow_secret_id
|
||||
```
|
||||
|
||||
### 정책 분리
|
||||
|
||||
현재 dev 정책은 아래처럼 역할별로 나눕니다.
|
||||
|
||||
- `auth-server-dev`
|
||||
이유: 앱 런타임은 `platform/postgres/auth-server`, `platform/keycloak/client-auth-server`, JWT transit signing만 접근하면 충분합니다.
|
||||
- `auth-db-migration-dev`
|
||||
이유: migration job 은 `database/creds/auth-db-migration-dev` 로 짧은 DB credential 을 받아 실행합니다.
|
||||
- `postgres-dev`
|
||||
이유: DB pod 는 `platform/postgres/superuser`, `platform/postgres/auth-server`, `platform/postgres/keycloak` 만 읽으면 됩니다.
|
||||
- `keycloak-dev`
|
||||
이유: Keycloak pod 는 `platform/postgres/keycloak`, `platform/keycloak/bootstrap-admin` 만 읽으면 됩니다.
|
||||
- `keycloak-client-sync-dev`
|
||||
이유: client sync job 은 `platform/keycloak/bootstrap-admin`, `platform/keycloak/client-auth-server` 만 읽으면 됩니다.
|
||||
- `workload-automation-dev`
|
||||
이유: Terraform apply 가 policy, role, auth, transit, KV, AppRole, database 설정을 모두 reconcile 합니다.
|
||||
- `platform-admin-dev`
|
||||
이유: 사람이 비상 복구나 수동 운영 작업을 할 때 쓰는 운영자 정책입니다.
|
||||
- `postgres-operator-dev`
|
||||
이유: 사람이 dev DB 에 직접 접속할 때는 `database/creds/postgres-operator-dev` 만 읽는 짧은 토큰으로 제한합니다.
|
||||
- `keycloak-operator-dev`
|
||||
이유: 사람이 Keycloak 에 직접 로그인할 때는 bootstrap admin credential 만 읽는 짧은 토큰으로 제한합니다.
|
||||
|
||||
### 자동화용 CI Secret
|
||||
|
||||
`vault-dev-reconcile` workflow 를 사용하려면 최소 아래 secret 이 필요합니다.
|
||||
|
||||
- `KUBECONFIG_DEV_B64`
|
||||
- `VAULT_TRANSIT_DEV_ROLE_ID`
|
||||
- `VAULT_TRANSIT_DEV_SECRET_ID`
|
||||
|
||||
권장 흐름은 아래와 같습니다.
|
||||
|
||||
1. `vault-transit` runbook 으로 provider Vault 를 1회 init / unseal / bootstrap 합니다.
|
||||
2. provider Vault 에 app seed 값을 입력합니다.
|
||||
3. workload Vault 를 1회 init 합니다.
|
||||
4. `terraform/vault/dev` 를 root token 으로 1회 apply 합니다.
|
||||
5. 이 apply 가 workload workflow AppRole credential 을 `kv/dev/workload/bootstrap` 에 써넣습니다.
|
||||
6. 이후부터는 workflow 가 provider bootstrap 확인, `terraform/vault/reconcile` apply, Argo CD app apply 를 자동 수행합니다.
|
||||
|
||||
bootstrap용 privileged token은 GitHub secret에 올리지 않고 운영자 로컬에서만 사용하는 것을 권장합니다.
|
||||
|
||||
### 정적 seed 로 최초 1회 넣어야 하는 값
|
||||
|
||||
아래 값들은 최초 1회 사람이 입력하거나 상위 secret source 에서 sync 해야 합니다.
|
||||
|
||||
- `kv/dev/workload/platform/postgres/superuser`
|
||||
값: `POSTGRES_SUPERUSER_PASSWORD`
|
||||
- `kv/dev/workload/platform/postgres/auth-server`
|
||||
값: `APP_DATASOURCE_USERNAME`, `APP_DATASOURCE_PASSWORD`, `AUTH_DB_PASSWORD`
|
||||
- `kv/dev/workload/platform/postgres/keycloak`
|
||||
값: `KEYCLOAK_DB_PASSWORD`
|
||||
- `kv/dev/workload/platform/keycloak/bootstrap-admin`
|
||||
값: `KC_BOOTSTRAP_ADMIN_PASSWORD`
|
||||
- `kv/dev/workload/platform/keycloak/client-auth-server`
|
||||
값: `APP_SECURITY_OAUTH2_KEYCLOAK_CLIENT_SECRET`, `KEYCLOAK_CLIENT_SECRET`
|
||||
|
||||
이 값들은 provider Vault seed path 가 source of truth 이고, workload Terraform apply 가 이를 workload Vault KV 로 동기화합니다.
|
||||
|
||||
### 사람 직접 접근용 토큰 발급
|
||||
|
||||
장기 운영자 토큰은 Terraform state 에 저장하지 않습니다.
|
||||
필요할 때 privileged token 으로 `platform-admin-dev` 토큰을 짧게 발급한 뒤 아래 스크립트를 사용합니다.
|
||||
|
||||
```bash
|
||||
export VAULT_ADDR=http://127.0.0.1:8200
|
||||
export VAULT_TOKEN=<privileged-token>
|
||||
|
||||
vault token create -orphan -policy=platform-admin-dev -ttl=1h
|
||||
```
|
||||
|
||||
발급된 `platform-admin-dev` 토큰으로:
|
||||
|
||||
```bash
|
||||
export VAULT_TOKEN=<platform-admin-dev-token>
|
||||
./scripts/vault/dev/issue-operator-tokens.sh
|
||||
```
|
||||
|
||||
이후:
|
||||
|
||||
- `postgres-operator-dev`: `vault read database/creds/postgres-operator-dev`
|
||||
- `keycloak-operator-dev`: `vault kv get kv/dev/platform/keycloak/bootstrap-admin`
|
||||
|
||||
를 수행해 dev 접속 정보를 확인할 수 있습니다.
|
||||
|
||||
### 주의
|
||||
|
||||
- manual bootstrap state 는 [`.terraform-state/vault-dev.tfstate`](/home/donghyeon/dev/Project-Auth-GitOps/.terraform-state/vault-dev.tfstate) 에 저장됩니다.
|
||||
- routine reconcile state 는 [`.terraform-state/vault-reconcile.tfstate`](/home/donghyeon/dev/Project-Auth-GitOps/.terraform-state/vault-reconcile.tfstate) 에 저장됩니다.
|
||||
- Vault provider state 에는 민감한 값이 들어가므로 self-hosted runner 와 로컬 작업 디렉터리를 동일하게 보호해야 합니다.
|
||||
@@ -0,0 +1,3 @@
|
||||
path "database/creds/auth-db-migration-dev" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
path "kv/data/dev/platform/postgres/auth-server" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
|
||||
path "kv/data/dev/platform/keycloak/client-auth-server" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
|
||||
path "transit/keys/project-auth-jwt" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
|
||||
path "transit/sign/project-auth-jwt" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
path "kv/data/dev/platform/keycloak/bootstrap-admin" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
|
||||
path "kv/data/dev/platform/keycloak/client-auth-server" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
path "kv/data/dev/platform/postgres/keycloak" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
|
||||
path "kv/data/dev/platform/keycloak/bootstrap-admin" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
path "kv/data/dev/platform/keycloak/bootstrap-admin" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
path "kv/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "auth/kubernetes/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "sys/auth/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
|
||||
}
|
||||
|
||||
path "sys/mounts/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
|
||||
}
|
||||
|
||||
path "sys/policies/acl/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "database/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "transit/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "auth/token/create-orphan" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
|
||||
path "auth/token/lookup" {
|
||||
capabilities = ["update"]
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
path "kv/data/dev/platform/postgres/superuser" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
|
||||
path "kv/data/dev/platform/postgres/auth-server" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
|
||||
path "kv/data/dev/platform/postgres/keycloak" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
path "database/creds/postgres-operator-dev" {
|
||||
capabilities = ["read"]
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
path "kv/data/dev/platform/postgres/superuser" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "kv/metadata/dev/platform/postgres/superuser" {
|
||||
capabilities = ["read", "delete", "list"]
|
||||
}
|
||||
|
||||
path "kv/data/dev/platform/postgres/auth-server" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "kv/metadata/dev/platform/postgres/auth-server" {
|
||||
capabilities = ["read", "delete", "list"]
|
||||
}
|
||||
|
||||
path "kv/data/dev/platform/postgres/keycloak" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "kv/metadata/dev/platform/postgres/keycloak" {
|
||||
capabilities = ["read", "delete", "list"]
|
||||
}
|
||||
|
||||
path "kv/data/dev/platform/keycloak/bootstrap-admin" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "kv/metadata/dev/platform/keycloak/bootstrap-admin" {
|
||||
capabilities = ["read", "delete", "list"]
|
||||
}
|
||||
|
||||
path "kv/data/dev/platform/keycloak/client-auth-server" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "kv/metadata/dev/platform/keycloak/client-auth-server" {
|
||||
capabilities = ["read", "delete", "list"]
|
||||
}
|
||||
|
||||
path "auth/kubernetes/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "auth/approle/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "sys/auth/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
|
||||
}
|
||||
|
||||
path "sys/mounts/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
|
||||
}
|
||||
|
||||
path "sys/policies/acl/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "database/config/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "database/roles/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
|
||||
path "transit/*" {
|
||||
capabilities = ["create", "read", "update", "delete", "list"]
|
||||
}
|
||||
Reference in New Issue
Block a user