- Vault 서버는 sealed(봉인) 상태로 시작 → sealed(봉인) 상태는 저장된 정보를 어떤 경우에도 평문으로 볼 수 없음
- Vault 데이터를 암호화하여 저장하기에, Unsealing(개봉) 전에는 거의 모든 작업이 불가능
- 암호화 키로 데이터를 암호화하고, 암호화 키는 키링에 보관하여 데이터와 함께 저장
- 키링은 마스터 키로 알려진 다른 암호화 키로 암호화
- Vault는 데이터를 복호화하기 위하여 먼저 암호화 키를 마스터 키를 이용하여 복호화 → Unsealing(복호화)는 마스터 키에 접근하는 프로세스
- 마스터 키도 다른 모든 데이터와 함께 저장되지만 또 다른 메커니즘인 봉인해제 키(unseal key)에 의해 암호화
1. 데이터는 키링의 암호화 키로, 암호화 키는 마스터 키로, 마스터 키는 봉인해제 키로 암호화
2. Shamir’s Secret Sharing 샤미르의 비밀 공유
- 봉인해제 키는 샤미르의 비밀 공유 알고리즘을 사용하여 여러 조각으로 분할되어 생성 (RSA에 'S'의 그 Shamir)
- 각 봉인해제 키는 분리된 공간에 저장할 것을 권장
- 봉인해제 시에 각 키를 입력 받아 임계치 이상의 키가 입력이 되면 봉인해제
- Vault에서는 기본 값으로 5개의 키가 생성이 되고, 3개의 키가 입력되면 봉인해제
Unsealing(봉인해제)
- Unsealing는 아래의 과정 중 하나를 통하여 수행
- 터미널에서 vault operator unseal 명령을 입력 후 Unsealing 키를 차례로 입력
- Unseal API 호출
- WebUI에서 키를 차례로 입력
- Unsealing 상태에서 다시 sealing 상태가 되는 경우는 아래 중 하나의 방법으로 수행
- Seal API 호출
- Vault 서버 재시작
- Vault 저장소에서 복구할 수 없는 오류가 발생
Sealing(봉인)
- sealing API를 호출하면 메모리에 있는 마스터 키가 폐기 → sealing 상태가 되면 vault를 사용하기 위해서 Unsealing 과정이 필요
- sealing에는 루트 권한이 있는 단일 작업자만 필요
- 침입이 감지되었을 때 Vault 데이터를 빠르게 잠가 피해를 최소화 가능
Vault server 초기화할 때 unseal key 발행
- key-shares → 발행되는 unseal key 개수
- key-threshold → 인증할 때 unseal key 사용 개수
- key-shares와 key-threshold 옵션을 사용 X → 5개의 unseal key 발행되고, 그 중 3개를 입력해야 vault CLI 명령 사용 가능
- vault 서버 초기화할 때는 vault 서버의 API를 설정 필요
# VAULT_ADDR이 설정 VAULT_ADDR='https://[테스트 도메인]:8200'
1. vault 서버 초기화
5개의 unseal key 발행되고, 그 중 3개를 입력해야 VAULT 사용 가능
# unseal key 발행 $ vault operator init Unseal Key 1: ayPqZuzG7bBN3uRp/GYfUBIVg9MGrbIotnHrjYXNWQIm Unseal Key 2: iRntqlhFUfybvnjzLCHHxq/GQfDDtuPupxJyFqpLqpNc Unseal Key 3: ibTmbjiieSQPLB2ZnUNY2hrplvrr6ab1m8FnyY8moMMu Unseal Key 4: RdU4jDtYmAlF9bDFg8J3/l67Nph72ZFuyXlGWTzsP/ja Unseal Key 5: yO+uE3m3eCy/IgzU6qQFz4QC2mIlG6ZcVXC8ZH65u0Rr Initial Root Token: s.asQ2M2u8kefJAH7pTRK9VZuY Vault initialized with 5 key shares and a key threshold of 3. Please securely distribute the key shares printed above. When the Vault is re-sealed, restarted, or stopped, you must supply at least 3 of these keys to unseal it before it can start servicing requests. Vault does not store the generated master key. Without at least 3 keys to reconstruct the master key, Vault will remain permanently sealed! It is possible to generate new unseal keys, provided you have a quorum of existing unseal keys shares. See "vault operator rekey" for more information.
2. unseal키 수동 설정하여 vault 서버 초기화 (예시)
unseal 키 1개 설정하였으며, 1개의 unseal키를 입력하면 vault 서버 사용 가능
# unseal key 발행 $ vault operator init -key-shares=1 -key-threshold=1 Unseal Key 1: 8vTbeSYOS0yWMve+NFy2eisJQkbqaPOb6ocp3zkHS1c= # Unseal key 1개 발행 확인 -> 보관 필요 Initial Root Token: s.s15mhZCNj4oOwcYji8TuIx5h # Root Token 도 1개 발행 -> 보관 필요 Vault initialized with 1 key shares and a key threshold of 1. Please securely distribute the key shares printed above. When the Vault is re-sealed, restarted, or stopped, you must supply at least 1 of these keys to unseal it before it can start servicing requests. Vault does not store the generated master key. Without at least 1 keys to reconstruct the master key, Vault will remain permanently sealed! It is possible to generate new unseal keys, provided you have a quorum of existing unseal keys shares. See "vault operator rekey" for more information.
3. vault 초기화 후 vault 서버 상태 확인
$ vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed true
Total Shares 5 # unseal 발행 개수
Threshold 3 # unseal 인증 개수
Unseal Progress 0/3
Unseal Nonce n/a
Version 1.9.3
Storage Type file
HA Enabled false
Root Token인 VAULT_TOKEN을 환경 변수 지정
- VAULT_TOKEN은 Vault를 초기화(init)할 때 root token이라고 획득 →
s.asQ2M2u8kefJAH7pTRK9VZuY
- Vault 서버의 루트 권한이 있는 토큰
- 서버의 모든 작업을 가능
- sealed 상태로 변경 가능
- unseal 상태로 변경은 불가능
vault 토큰은 VAULT_TOKEN 환경변수에 저장하면 vault 클라이언트에서 사용 가능
# vault token을 환경 변수에 지정 $ export VAULT_TOKEN=s.asQ2M2u8kefJAH7pTRK9VZuY $ echo -e "export VAULT_TOKEN=s.asQ2M2u8kefJAH7pTRK9VZuY" >> /root/.bashrc # VAULT에서 지정한 환경변수 확인 $ env | grep -i vault VAULT_ADDR=https://[테스트 도메인]:8200 VAULT_TOKEN=s.asQ2M2u8kefJAH7pTRK9VZuY
Vault Server를 unseal
- vault init을 할 때 받은 unseal key를 입력 → 초기화할 때 발행받은 5개 중에 3개만 입력하면 됨
- 첫번째 : iRntqlhFUfybvnjzLCHHxq/GQfDDtuPupxJyFqpLqpNc
- 두번째 : ibTmbjiieSQPLB2ZnUNY2hrplvrr6ab1m8FnyY8moMMu
- 세번째 : RdU4jDtYmAlF9bDFg8J3/l67Nph72ZFuyXlGWTzsP/ja
- 기본적으로 Vault server를 초기화하면 Sealed 상태가 됨 → 즉, 잠겨있어서 Vault 서버에서 정보를 읽는 등 작업 불가능
- Vault server를 init에 알려준 Unseal Key를 이용하면 Unsealed 상태로 변경 → Vault 서버의 정보 읽기, 쓰기 등 여러 작업 가능
1. vault Server unseal (봉인 해제)
3번의 vault operator unseal을 통해 봉인 해제
unseal 명령어를 성공할 때마다 Unseal Progress의 수치가 올라가서 3/3이 되었을 때 unseal이 됨
unseal이 완료 → Sealed : false
# 첫번째 Vault unseal $ vault operator unseal Unseal Key (will be hidden): Key Value --- ----- Seal Type shamir Initialized true Sealed true Total Shares 5 Threshold 3 Unseal Progress 1/3 Unseal Nonce ccbf047b-5956-fdd8-29f9-bad6969cdd45 Version 1.9.3 Storage Type file HA Enabled false # 두번째 Vault unseal $ vault operator unseal Unseal Key (will be hidden): Key Value --- ----- Seal Type shamir Initialized true Sealed true Total Shares 5 Threshold 3 Unseal Progress 2/3 Unseal Nonce ccbf047b-5956-fdd8-29f9-bad6969cdd45 Version 1.9.3 Storage Type file HA Enabled false # 세번째 Vault unseal $ vault operator unseal Unseal Key (will be hidden): Key Value --- ----- Seal Type shamir Initialized true Sealed false Total Shares 5 Threshold 3 Version 1.9.3 Storage Type file Cluster Name vault-cluster-0b89b3d2 Cluster ID dbea1671-61fa-c4c8-387e-e32390ace762 HA Enabled false
※ unseal 참고 사항
- 연속적으로 unseal을 3번 실행하여 Vault 서버를 열 수 있다.
- 하지만, 한사람이 unseal key를 다 가지는 것은 위험 → 키를 5명이 나누어 갖고 3명이 unseal을 하면 Vault 서버를 엶
- Vault에 중요한 정보가 있음으로 서버를 재시작하거나 보안 문제 발생으로 sealed 상태로 바꾸었을 때, 다시 서버를 열려면 unseal 단계를 거쳐야 함
- unseal 과정은 서버가 기억하고 있으므로 한자리에 모일 필요 없이 각자의 자리에서 unseal을 하기만 하면 됨
- unseal은 시간 제한도 없기에 충분히 시간을 두고 진행 가능
- 스토리지 백엔드에도 암호화된 정보가 저장되어 있고, 복호화하려면 unseal 단계가 필수적 → unseal 키 3개가 없으면 Vault 서버도 복호화키도 만들어 낼 수 없음
- DB가 통째로 털려도 Vault 서버가 통째로 털려도 unseal 키 3개가 없다면 공격자는 정보를 볼 수 없게 되어 안전함
2. unseal할 때 출력한 vault server 상태와 vault status 명령어로 출력되는 상태가 같은 지 확인
vault server가 unseal됨 → token을 입력해야 서버 내부 접근 가능
$ vault status Key Value --- ----- Seal Type shamir Initialized true Sealed false Total Shares 5 Threshold 3 Version 1.9.3 Storage Type file Cluster Name vault-cluster-0b89b3d2 Cluster ID dbea1671-61fa-c4c8-387e-e32390ace762 HA Enabled false
Vault Server를 Sealing
vault를 서버에 보안 문제가 있거나, 안전하게 관리하기 위해서 unsealing되어있는 것을 sealing으로 변경
$ vault operator seal Success! Vault is sealed.
다시 sealing된 vault 서버의 상태 확인
$ vault status Key Value --- ----- Seal Type shamir Initialized true Sealed true Total Shares 5 Threshold 3 Unseal Progress 0/3 Unseal Nonce n/a Version 1.9.3 Storage Type file HA Enabled false
'Opensource(오픈 소스) > Vault' 카테고리의 다른 글
Vault audit 로그를 활성화 (0) | 2022.07.10 |
---|---|
unseal된 vault 서버에 로그인 (0) | 2022.07.10 |
Vault 실 서버 설치 및 systemd 서비스 관리 (0) | 2022.07.10 |
Valut dev 설치 → 테스트 서버 설치 (0) | 2022.07.10 |
Vault란 (0) | 2022.07.10 |