๋ง์ด๋ฎค์งํ
์ด์คํธ์์ ์ ๋ง ๊ฐ๋ช
๊น๊ฒ ์ฌ์ฉํ๋ ๋๊ตฌ์ค ํ๋๋ ๋ฐ๋ก Hashicorp Vault ์๋ค.
๋ชจ๋ ์ค์ ๊ณผ ๋ณด์ ์ ๋ณด๋ค์ด ํ๊ณณ์์ ๊ด๋ฆฌ๋๊ณ Githubํ ํฐ ํ๋๋ก ์ ๋ณด๋ฅผ ๋ฐ์์ฌ ์ ์๋๊ฑด ์ ๋ง ์ผ์ธ์ด์
๋ํ ๊ฒฝํ์ด์๋ค.
์ด์ Vault๊ฐ ๋ฌด์์ธ์ง์ ๊ดํด ์์๋ณด๊ณ , ์ค์ ์ ํด๋ณด๋๋ก ํ์
Manage Secrets and Protect Sensitive Data
- Hashicorp Vault catchpraise
Vault๋ ๋ฏผ๊ฐํ๊ณ ์ค์ํ ๋น๋ฐ ์ ๋ณด๋ฅผ ๊ด๋ฆฌ ํ๊ธฐ ์ํ ๊ด๋ฆฌ ๋๊ตฌ์ด๋ค.
๋ง์ ์ฌ๋๋ค๋ ๊ทธ๋ ๊ฒ ์ง๋ง ๋๋ ์ด๋๊น์ง๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ๋ฑ์ ๋ณด์ ์ ๋ณด๋ฅผ ๊ทธ๋ฅ ์์ค์ฝ๋์ ํ๋์ฝ๋ฉํด์ ๋ฃ๊ฑฐ๋, cfg ํ์ผ ๋ฑ์ผ๋ก ์ฎ๊ฒจ๋ค๋๊ณ , ํ๊ฒฝ๋ณ์์์ ๊ฐ์ ธ๋ค ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค. ๋น์ฐํ ์ฐ๋ ์ ๋ณด์ ํฌ๋งท์ด ๋ฌ๋ผ์ง๊ฑฐ๋, ์ ๋ณด์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด ํด๋น ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฑ์ ํ๊ฒฝ์ ๋ค์ด๊ฐ์ ์ ๋ณด๋ฅผ ๋ฐ๊ฟ์ค์ผ ํ๋ค. ๋น์ฐํ ํ๋์ฝ๋ฉํด์ ๋ฃ์ ๊ฒฝ์ฐ๋ ์์ค์ฝ๋ ์ ์ฅ์์ ํด๋น ์ ๋ณด๊ฐ ์ฌ๋ผ๊ฐ๊ฒ ๋๋๋ฐ ๋น์ฐํ ์ ํ ์ข์๊ฒ์ด ์๋ค.
์ด๋ ๊ฒ ๋ถํธํ๊ณ ๋ถ์์ ํ ๋ณด์ ๊ด๋ฆฌ์ ์ด๋ ค์์ ํด๊ฒฐํด ์ฃผ๋๊ฒ์ด ๋ฐ๋ก hashicorp Vault์ด๋ค.
Vault์ ๊ฐ๋ ์ ๊ฐ๋จํ๋ค.
๋ชจ๋ ์ ๋ณด๋ฅผ ๋ณผํธ์์ ๊ด๋ฆฌํ๊ณ , ํด๋ผ์ด์ธํธ(๊ฐ๋ฐ์ ๋๋ ์ฑ)์ ๋ณผํธ ์ ๊ทผ ๊ถํ์ ๋ฐ์ ๋ค ๋ณผํธ์์ ์ฃผ๋ ์ ๋ณด๋ฅผ ๋ฐ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ด๋ฌํ ์ฝ์
ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋จ์ํ ์์ ํ KV ์คํ ์ด ์ด์ธ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ SSH ์ ๋ณด๋ฅผ TTL์ ์ง์ ํด์ ๋์ ์ผ๋ก ์์ฑํด ์ฃผ๋ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
$ wget https://releases.hashicorp.com/vault/1.0.3/vault_1.0.3_linux_amd64.zip(๋๋ ์ต์ ๋ค์ด๋ก๋ ์ฃผ์)
$ mkdir vault_server
$ unzip <๋ค์ด๋ก๋ ๋ฐ์ ๋ฐ์ด๋๋ฆฌ> -d vault_server
๋ณผํธ๋ฅผ ํด์์ฝํ ์๋ฒ์์ ๋ค์ด๋ก๋ ๋ฐ๊ณ ์์ถ์ ํ๋ฉด ๋ณผํธ๋ฅผ ์ฌ์ฉํ ์ค๋น๊ฐ ๋๋ค.
๋ณผํธ๋ฅผ ์๋ฒ๋ก ์๋์ํค๊ธฐ ์ํด์๋ ์ ๋ณด๋ฅผ ์ ์ฅํ ์คํ ๋ฆฌ์ง๊ฐ ํ์ํ๋ค. ๊ณ ๊ฐ์ฉ์ฑ์ ์ด๋ฆฌ๊ณ ์ถ๋ค๋ฉด DynamoDB๋ Hashicorp Consul์ ์ฌ์ฉํด์ผ ํ์ง๋ง ์ฌ๊ธฐ์๋ ๊ณ ๊ฐ์ฉ์ฑ์ด ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ ํ์ผ์์คํ ์ ์ฌ์ฉํ๋๋ก ํ๋ค
์ด์ vault ์ ํ๊ฒฝ ์ค์ ์ ์ ์ ํ HCL ํ์ผ์ ๋ง๋ค์ด๋ณด์
$ cd vault_server
$ touch config.hcl
$ nano config.hcl
config.hcl ํ์ผ์ ๋ค์์ ๋ด์ฉ์ ์ ์ฅํ์.
storage "file" {
path = "/mnt/vault/data"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = false
}
ui = true
TLS๋ ๋ณผํธ ๋ํ ๋๋ถ๋ถ์ WAS ๊ฐ์ด nginx๊ฐ์ ์น์๋ฒ๋ฅผ ํ๋ฒ ๊ฑฐ์น๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ ๋นํ์ฑํ ํ๋๋ก ํ๋ค. TLS ์ค์ ์ ์น์๋ฒ ๋จ์์ ํ๋๋ก ํ์.
UI๋ฅผ ๋นํ์ฑํ ํ๊ธฐ ์ํด์๋ ui ์ต์
์ false๋ก ์ฃผ๋ฉด ๋๋ค.
์ด์ vault ์๋ฒ๋ฅผ ์์์์ผ ๋ณด์.
$ sudo ./vault server -config=config.hcl
root ๊ถํ์ผ๋ก ์คํํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ณด์ ๊ด๋ จ ์๋ฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ sudo๋ก ์คํํด ์ค๋ค.
์๋ฒ ์ค์น ๊ณผ์ ์ ์ด๊ฒ ๋์ด๋ค. ์ด์ ํด๋ผ์ด์ธํธ์์ Vault๋ฅผ ์ด๊ธฐํ ํ๊ณ ์ธ์ฐํด์ผ ๋ณผํธ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
ํด๋ผ์ด์ธํธ ํ๊ฒฝ์์ ๋ณผํธ์ ์ฃผ์๋ฅผ ํ๊ฒฝ๋ณ์์ ๋ฑ๋กํ์
$ echo 'export VAULT_ADDR=<์ฃผ์>' >> ~/.bash_profile
๋ณผํธ๋ฅผ ์ด๊ธฐํํ๊ธฐ ์ํด vault init ๋ช ๋ น์ด๋ฅผ ์ํํ๋ค.
$ ./vault operator init
Unseal Key 1: ____________________________________________
Unseal Key 2: ____________________________________________
Unseal Key 3: ____________________________________________
Unseal Key 4: ____________________________________________
Unseal Key 5: ____________________________________________
Initial Root Token: ______________________________
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 key 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.
๋ณผํธ๋ฅผ ์ด๊ธฐํ ํ๋ฉด ๋ณผํธ๋ฅผ ์ธ์ฐํ๊ธฐ ์ํ 5๊ฐ์ ์ธ์ฐ ํค์ ๋ฃจํธ ํ ํฐ์ ์ค๋ค.
์ธ์ฐํค๊ฐ ์์ผ๋ฉด ๋ณผํธ๊ฐ ์ฐ๋ง๋ฌ์๋ ์ธ์ฐ์ ํ ์๊ฐ ์๊ณ ์ ์ฅ๋ ์ ๋ณด์ ๋ณตํธํ ๋ํ ๋ด๋นํ๊ธฐ ๋๋ฌธ์ ์กฐ์ฌํ ๊ด๋ฆฌํด์ผ ํ๋ค. ๋ฃจํธ ํ ํฐ์ ๋ง ๊ทธ๋๋ก์ ๊ถํ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์กฐ์ฌํ ๋ณด๊ดํ๋๋ก ํ์.
๋ณผํธ๊ฐ ์ด๊ธฐํ ๋์๋ค๋ฉด ๋ณผํธ๊ฐ ์ฐ๋ง๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ๋ณผํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด 5๊ฐ ์ค 3๊ฐ์ ์ธ์ฐ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ณผํธ๋ฅผ ์ธ์ฐํ ์ ์๋ค.
๋ฏธ์ฌ์ผ ๋ฐ์ฌ์ฒ๋ผ ๋ณผํธ๋ฅผ ์ด๊ธฐ ์ํด์๋ ์ฌ๋ฌ๊ฐ์ ํค๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค
$ ./vault operator unseal
Key (will be hidden):
Sealed: true
Key Shares: 5
Key Threshold: 3
Unseal Progress: 1/3
๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๋ ์ํ๋๊ฐ 3๋ฒ์ด๊ธฐ ๋๋ฌธ์ ์ธ์ฐ ๋ช ๋ น์ด๋ฅผ 3๊ฐ์ ๋ค๋ฅธ ํค๋ฅผ ๊ฐ์ง๊ณ ์ํํ๋ฉด ๋ณผํธ๊ฐ ์ธ์ฐ๋ ๊ฒ์ด๋ค.
Vault๋ ์์ฒด์ ์ผ๋ก ๋ฐ๊ธํ๋ ํ ํฐ์ ์ฌ์ฉํด ์ ๊ทผํ ์๋ ์์ง๋ง ๊นํ๋ธ ํ ํฐ์ด๋ LDAP ๋ฑ ๋ค์ํ ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
๋ณผํธ์ root ๊ถํ์ผ๋ก ์ ๊ทผํ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ ํ๊ฒฝ์ ํ๊ฒฝ๋ณ์๋ก ํ ํฐ์ ์ ์ฅํ์.
$ echo "export VAULT_TOKEN=<rootํ ํฐ>" >> ~/.bash_profile
github auth๋ฅผ ํ์ฑํ ํ ํ ์ ๊ทผ ๊ถํ์ ๊ฐ์ง ์กฐ์ง์ ์ค์ ํ์
$ ./vault auth enable github
$ ./vault write auth/github/config organization=<github organization ์ด๋ฆ>
์ด์ Github ํ ํฐ์ ํตํด ๋ณผํธ์ ์ ๊ทผํ ์ ์๋ค.
Github ํ ํฐ์ https://github.com/settings/tokens ์์ read:org ๊ถํ์ ๊ฐ์ง ํ ํฐ์ ๋ง๋ค์ด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ง์ฝ ui ์ต์
์ ํ์ฑํ ํ๋ค๋ฉด ๋ณผํธ์ ์น ๋ธ๋ผ์ฐ์ ๋ก ์ ์ํด ํ์ธํด ๋ณด์
์ด์ ๋ณผํธ๋ฅผ ์ฌ์ฉํ ์ค๋น๊ฐ ์๋ฃ๋์๋ค!
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํฌ๋ฆฟ ์์ง์ด๋? ๋ณผํธ๋ ๋จ์ํ ์ํธํ๋ KV ์คํ ์ด ์ด์ธ์๋ ๋ง์ ์ํฌ๋ฆฟ ์์ง์ ์ ๊ณตํ๋ค. ๊ทธ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํฌ๋ฆฟ ์์ง์ด๋ผ๋ ๊ฒ์ด ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋๋ถ๋ถ์ ๊ธฐ์ ์์ ์์ฃผ ์ค์ํ ์์น๋ฅผ ์ฐจ์งํ๋ค. ๋ค์์ ๊ฒฝ์ฐ๋ฅผ ํ๋ฒ ์๊ฐํด ๋ณด๋๋ก ํ์. ๋ฐ์ดํฐ
PEP 484์ ๋ํ ์๊ฐ Python 3.5 ๋ฒ์ ์๋ ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก IDE์ ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์์ ์ค ์ ์๋๋ก ํจ์์ ์ธ์์ ๋ฐํ๊ฐ์ ๋ํ ํ์ ํํธ๊ฐ ์ฒ์์ผ๋ก ๋์ ๋์๋ค. ๋ง์น๋ฉด์ ์ฌ๊ธฐ๊น์ง ํ์ด์ฌ์ ํ์ ํํธ์ ๋ํด ์์๋ณด์๋ค. PEP 484์์ ๋ฐํ๋ฏ ํ์ ํํธ๋ ํ์ด์ฌ์ด ์ ์ ์ธ์ด๋ก ์ฐ์ด๊ธฐ ์ํ ๊ฒ๋ ์๋๊ณ , ํ์๋ ์๋๋ค. ๊ทธ๋ฌ...
์ด์ ์ ๋ ํฌ์คํธ์์ ๋ณผํธ๋ฅผ ์ค์น-์ค์ ํ๊ณ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํ UI๊น์ง ํ์ฑํ ํ๋ค. ์ด๋ฒ ํฌ์คํธ์์๋ ๋ณผํธ์ ์ ๊ทผ ๊ถํ์ ์ ์ดํ๋ ์ ์ฑ ์ค์ ์ ๋ํด ์์๋ณผ ์ฐจ๋ก๋ค. ๋ค์ ๋งํ์ง๋ง ๋ณผํธ๋ ๋ชจ๋ ์ค์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์์ฃผ ์ค์ํ ์๋น์ค์ด๋ค. ๋น์ฐํ ๋ชจ๋ ์ฌ๋์ด ๋ฃจํธ ๊ถํ์ ๊ฐ์ง๊ณ ๋ชจ๋ ์ ๋ณด์ ์์ธ์คํ๊ณ , ๋ณ๊ฒฝํ๋ ๊ฒ์ ์์ฃผ ์ํํ๋ค. ๋ฐ๋ผ์ ๋ณผํธ๋ ...
UI? 0.10๋ฒ์ ์ ๋ ๊น์ง๋ ๋ณผํธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์น ui๊ฐ ์ ๊ณต๋์ง ์์๋ค๊ณ ํ๋ค. ๊ทธ๋์ react๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋น๊ณต์ vault ui๋ฅผ ์ด์ฉํด ์น ์์ ๋ณผํธ๋ฅผ ์ฌ์ฉํ๊ณ ๊ณต์ ui๊ฐ ๋์จ ์ง๊ธ๋ ์ต์ํจ ๋๋ฌธ์ ๋น๊ณต์ ui๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค ํนํ๋ ๋น๊ณต์ ui๊ฐ JSONํฌ๋งทํ ๊ธฐ๋ฅ๋ฑ์ ์ ์ ๊ณตํ๊ณ ๋ณผํธ ์๋ฒ์์ ์๋๋๋๊ฒ ์๋๋ผ ๋ณผํธ๋ ๋ฐ๋ก ๋์ ...
Vault๋? > Manage Secrets and Protect Sensitive Data > \- Hashicorp Vault catchpraise Vault๋ ๋ฏผ๊ฐํ๊ณ ์ค์ํ ๋น๋ฐ ์ ๋ณด๋ฅผ ๊ด๋ฆฌ ํ๊ธฐ ์ํ ๊ด๋ฆฌ ๋๊ตฌ์ด๋ค. ๋ง์ ์ฌ๋๋ค๋ ๊ทธ๋ ๊ฒ ์ง๋ง ๋๋ ์ด๋๊น