- 토큰, 비밀번호, 인증서, 암호화 키와 같은 비밀 정보나 민감한 데이터를 UI, CLI, HTTP API 를 활용할때 안전하게 저장하고 제어할수 있게 해주는 오픈 소스
- vault 메뉴얼 URL : https://www.vaultproject.io/
Valut 설치
$ yum install -y yum-utils
$ yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
$ yum -y install vault
# 설치한 vault 패키지 버전 확인
$ vault -v
Vault v1.8.0 (82a99f14eb6133f99a975e653d4dac21c17505c7)
Vault server를 DEV 모드로 실행
1. 환경변수 등록
vault CLI 를 사용하기 위해 환경변수 등록이 필요
# 수동으로 환경 변수 등록 $ export VAULT_ADDR='http://127.0.0.1:8200' # 영구적으로 환경 변수 등록 $ echo "export VAULT_ADDR='http://127.0.0.1:8200'" >> /root/.bashrc $ source /root/.bashrc # 설정 확인 $ echo $VAULT_ADDR http://127.0.0.1:8200
2. 테스트를 위해 -dev 모드로 백그라운드에서 서버를 실행
dev모드는 미리 준비된 설정으로 서버를 구동
dev 모드는 모든 데이터는 in-memory 저장, 암호화
localhost로 listen되며 TLS가 없음
자동 봉인 해제 → 봉인 해제된 키와 엑세스 토큰을 보여줌
프로덕션 모드에서는 -dev 옵션 사용을 권장 X
$ vault server -dev & ==> Vault server configuration: Api Address: http://127.0.0.1:8200 Cgo: disabled Cluster Address: https://127.0.0.1:8201 Go Version: go1.16.5 Listener 1: tcp (addr: "127.0.0.1:8200", cluster address: "127.0.0.1:8201", max_request_duration: "1m30s", max_request_size: "33554432", tls: "disabled") Log Level: info Mlock: supported: true, enabled: false Recovery Mode: false Storage: inmem Version: Vault v1.8.0 Version Sha: 82a99f14eb6133f99a975e653d4dac21c17505c7 ==> Vault server started! Log data will stream in below: 2021-08-02T14:07:10.555Z [INFO] proxy environment: http_proxy="" https_proxy="" no_proxy="" 2021-08-02T14:07:10.556Z [WARN] no `api_addr` value specified in config or in VAULT_API_ADDR; falling back to detection if possible, but this value should be manually set 2021-08-02T14:07:10.557Z [INFO] core: security barrier not initialized 2021-08-02T14:07:10.557Z [INFO] core: security barrier initialized: stored=1 shares=1 threshold=1 2021-08-02T14:07:10.558Z [INFO] core: post-unseal setup starting 2021-08-02T14:07:10.572Z [INFO] core: loaded wrapping token key 2021-08-02T14:07:10.572Z [INFO] core: successfully setup plugin catalog: plugin-directory="" 2021-08-02T14:07:10.572Z [INFO] core: no mounts; adding default mount table 2021-08-02T14:07:10.573Z [INFO] core: successfully mounted backend: type=cubbyhole path=cubbyhole/ 2021-08-02T14:07:10.574Z [INFO] core: successfully mounted backend: type=system path=sys/ 2021-08-02T14:07:10.574Z [INFO] core: successfully mounted backend: type=identity path=identity/ 2021-08-02T14:07:10.582Z [INFO] core: successfully enabled credential backend: type=token path=token/ 2021-08-02T14:07:10.589Z [INFO] core: restoring leases 2021-08-02T14:07:10.603Z [INFO] rollback: starting rollback manager 2021-08-02T14:07:10.603Z [INFO] expiration: lease restore complete 2021-08-02T14:07:10.604Z [INFO] identity: entities restored 2021-08-02T14:07:10.604Z [INFO] identity: groups restored 2021-08-02T14:07:10.604Z [INFO] core: post-unseal setup complete 2021-08-02T14:07:10.604Z [INFO] core: root token generated 2021-08-02T14:07:10.604Z [INFO] core: pre-seal teardown starting 2021-08-02T14:07:10.604Z [INFO] rollback: stopping rollback manager 2021-08-02T14:07:10.604Z [INFO] core: pre-seal teardown complete 2021-08-02T14:07:10.604Z [INFO] core.cluster-listener.tcp: starting listener: listener_address=127.0.0.1:8201 2021-08-02T14:07:10.604Z [INFO] core.cluster-listener: serving cluster requests: cluster_listen_address=127.0.0.1:8201 2021-08-02T14:07:10.604Z [INFO] core: post-unseal setup starting 2021-08-02T14:07:10.605Z [INFO] core: loaded wrapping token key 2021-08-02T14:07:10.605Z [INFO] core: successfully setup plugin catalog: plugin-directory="" 2021-08-02T14:07:10.605Z [INFO] core: successfully mounted backend: type=system path=sys/ 2021-08-02T14:07:10.605Z [INFO] core: successfully mounted backend: type=identity path=identity/ 2021-08-02T14:07:10.605Z [INFO] core: successfully mounted backend: type=cubbyhole path=cubbyhole/ 2021-08-02T14:07:10.606Z [INFO] core: successfully enabled credential backend: type=token path=token/ 2021-08-02T14:07:10.606Z [INFO] core: restoring leases 2021-08-02T14:07:10.607Z [INFO] identity: entities restored 2021-08-02T14:07:10.607Z [INFO] identity: groups restored 2021-08-02T14:07:10.607Z [INFO] core: post-unseal setup complete 2021-08-02T14:07:10.607Z [INFO] core: vault is unsealed 2021-08-02T14:07:10.609Z [INFO] core: successful mount: namespace="" path=secret/ type=kv 2021-08-02T14:07:10.610Z [INFO] expiration: lease restore complete 2021-08-02T14:07:10.610Z [INFO] secrets.kv.kv_f71fab5a: collecting keys to upgrade 2021-08-02T14:07:10.610Z [INFO] secrets.kv.kv_f71fab5a: done collecting keys: num_keys=1 2021-08-02T14:07:10.610Z [INFO] secrets.kv.kv_f71fab5a: upgrading keys finished 2021-08-02T14:07:10.611Z [INFO] rollback: starting rollback manager WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory and starts unsealed with a single unseal key. The root token is already authenticated to the CLI, so you can immediately begin using Vault. You may need to set the following environment variable: $ export VAULT_ADDR='http://127.0.0.1:8200' The unseal key and root token are displayed below in case you want to seal/unseal the Vault or re-authenticate. Unseal Key: +1P8t1jNPI8mBPCV57v+emB4E3DttH3t1xkz+oXsQUs= Root Token: s.BT8kE324DT9EJYQqG8noC8J1 Development mode should NOT be used in production installations!
3. 실행된 서버의 상태를 확인
$ vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 1
Threshold 1
Version 1.3.0
Cluster Name vault-cluster-a6999d5c
Cluster ID 291371dc-e6a5-42d3-fca7-b2373ff70194
HA Enabled false
vault 와 secret
- vault의 핵심 기능중 하나는 비밀정보를 안전하게 읽고 쓰는것
- vault에 기록된 비밀정보는 암호화하여 backend 저장소에 저장
- 값을 저장소에 전달하기 전에 암호화를 하며, backend 저장소에 저장된 암호화값은 vault 없이는 해독 불가능
write a secret (비밀정보 작성)
key 값의 접두사가 secret/ 로 저장됨
secret/ 는 어떤 secrets engine을 실행시킬지 결정하는 route 역할(경로 결정)
비밀정보를 기록할때는 shell history에 남기때문에 되도록이면 file 을 통해서 전달될수있도록 하는것이 좋음
kv → Vault의 키-값 저장소와 상호작용 (command)
put → KV 저장소의 데이터를 설정하거나 업데이트함
secret/hello → hello 이름을 가지는 secret engine 사용
foo=world → foo 키에 world 값이 있음
$ vault kv put secret/hello foo=world Key Value --- ----- created_time 2021-08-02T15:40:03.164784248Z deletion_time n/a destroyed false version 1
read a secret (비밀정보 읽기)
1. secret과 함께 여러 가지 메타 데이터가 함께 반환
비밀정보를 획득
vault는 저장소로부터 값을 가져올때 복호화하여 가져옴
kv → Vault의 키-값 저장소와 상호작용 (command)
get → KV 저장소에서 데이터 검색
secret/hello → hello 이름을 가지는 secret engine 사용
$ vault kv get secret/hello ====== Metadata ====== Key Value --- ----- created_time 2019-11-26T02:39:20.8458832Z deletion_time n/a destroyed false version 1 === Data === Key Value --- ----- foo world
2. hello 키에 해당하는 값 추출
kv → Vault의 키-값 저장소와 상호작용 (command)
get → KV 저장소에서 데이터 검색
field=key → 입력한 key의 value를 출력, -field 옵션을 사용하면 다른 형식 지정 지시문보다 우선
$ vault kv get -field=foo secret/hello world
3. JSON output → 결과데이터의 포맷을 json형식으로 출력
kv → Vault의 키-값 저장소와 상호작용 (command)
get → KV 저장소에서 데이터 검색
format=형식 → "table", "json", "yaml", "pretty" 중에 입력한 형식으로 출력 → 기본값은 table로 출력
format 옵션을 사용하지 않고, VAULT_FORMAT 환경 변수를 통해 지정 가능
$ vault kv get -format=json secret/hello { "request_id": "777069c4-4cb8-1bfa-2eaa-5d35018eca54", "lease_id": "", "lease_duration": 0, "renewable": false, "data": { "data": { "foo": "world" }, "metadata": { "created_time": "2021-08-02T15:40:03.164784248Z", "deletion_time": "", "destroyed": false, "version": 1 } }, "warnings": null }
4. jq 활용 → jq 도구를 통해 더 편리하게 원하는 메타정보를 가져올 수 있음
kv → Vault의 키-값 저장소와 상호작용 (command)
get → KV 저장소에서 데이터 검색
format=json → json 형식으로 출력
json 형식으로 출력되면 key값으로 해서 해당 value를 찾을 수 있음
# jq를 사용하기 위해서는 패키지 설치 필요 $ yum install -y jq # data 키 → data 키 → foo 키의 값 출력 $ vault kv get -format=json secret/hello | jq -r .data.data.foo world
delete a secret (비밀정보 삭제)
저장된 비밀정보를 삭제
kv → Vault의 키-값 저장소와 상호작용 (command)
delete → KV 저장소에서 데이터 삭제
$ vault kv delete secret/hello Success! Data deleted (if it existed) at: secret/hello # key와 value가 삭제됨을 확인 $ vault kv get secret/hello ====== Metadata ====== Key Value --- ----- created_time 2021-08-02T15:40:03.164784248Z deletion_time 2021-08-02T16:17:00.129797593Z destroyed false version 1
'Opensource(오픈 소스) > Vault' 카테고리의 다른 글
Vault audit 로그를 활성화 (0) | 2022.07.10 |
---|---|
unseal된 vault 서버에 로그인 (0) | 2022.07.10 |
Vault 서버 Seal(봉인)/Unseal(봉인 해제) (0) | 2022.07.10 |
Vault 실 서버 설치 및 systemd 서비스 관리 (0) | 2022.07.10 |
Vault란 (0) | 2022.07.10 |