[Vault] Vault 서비스 사용 방법[2/2]
앞선 게시물에서 Vault를 사용하기 위해 Role + Policy + Secrets을 생성하였다.
이제는 서비스에서 어떻게 Vault Secrets을 사용할 수 있는지 알아보도록 하자!!
[Vault] Vault 서비스 사용 방법[1/2]
앞선 게시물로 Vault 배포 및 활성화 방법에 대해서 알아보았다. 설치하였으면 이제 사용해보아야하며, 본 게시물에서는 Vault 사용방법에 대해 알아보자! [Vault] Vault Helm 배포 및 활성화 방법 K8s를
dobby-isfree.tistory.com
Vault Secrets 사용방법
Vault는 Sidecar 형태로 vault agent가 주입이 된다. 그렇기에 사용하는 Deployment에 특정 annotation 값을 설정해야 한다.
Vault를 사용하기 위한 annotation은 여러가지가 있으나 아래 값만 설정하면 Sidecar로 주입할 수 있고, Vault를 사용할 수 있다.
- agent-inject = vault sidecar 주입 여부
- agent-inject-first = init container 설정 여부
- agent-inject-secret-config.json = Vault 고유 문자열(큰 의미없는 값이다.)
- agent-inject-template-config.json = Vault 템플릿
- secret-volume-path-config.json = Vault 비밀정보 위치
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: vault-test
name: vault-test
namespace: test
spec:
replicas: 1
selector:
matchLabels:
app: vault-test
template:
metadata:
annotations:
vault.hashicorp.com/agent-init-first: "true"
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: test
vault.hashicorp.com/agent-inject-secret-config.json: test
vault.hashicorp.com/agent-inject-template-config.json: |
{{- with secret "test/data/test" -}}
{"username":"{{ .Data.data.username }}","password":"{{ .Data.data.password }}"}
{{- end }}
vault.hashicorp.com/secret-volume-path-config.json: /test
labels:
app: vault-test
spec:
containers:
- image: nginx
name: vault-test
위와 같이 설정할 경우 vault-test Pod은 아래와 같이 vault-agent-init Job이 돌고 결과적으로는 vault-agent가 주입되었다.
그리고 vault-test의 Container를 들어가서 확인해보면 위 annotaion에서 지정한 경로와 파일에 비밀정보가 들어가있다!!
- 만약 파일 위치를 바꾸고 싶다면 secret-volume-path-config.json의 값을 수정하면 되고
- 만약 파일명을 바꾸고 싶다면 config.json 대신에 변경할 파일 이름을 넣으면 된다.
만약 Vault Policy에 권한은 있지만, Secrets 값이 없는 경우
아래와 같이 test/test에 대한 권한은 있지만 username2 Secrets이 없으면 Pod 실행에는 문제가 없다.
다만, username2에 대해서 <no vaule>로 값이 표시된다.
vault.hashicorp.com/agent-inject-template-config.json: |
{{- with secret "test/data/test" -}}
{"username":"{{ .Data.data.username }}","password":"{{ .Data.data.password }}"}
{"username2":"{{ .Data.data.username2 }}"
{{- end }}
만약 Vault Policy 권한이 없은 경우
test Role이 /test/test2에 대한 Policy가 없을 경우에는 아래와 같이 vault-agent Container가 정상적이지 않다.
그렇기에 최종적 Pod이 정상적이지 않은 상태가 된다.
vault.hashicorp.com/agent-inject-template-config.json: |
{{- with secret "test/data/test" -}}
{"username":"{{ .Data.data.username }}","password":"{{ .Data.data.password }}"}
{"username2":"{{ .Data.data.username2 }}"
{{- end }}
{{- with secret "test/data/test2" -}}
{"username":"{{ .Data.data.username }}","password":"{{ .Data.data.password }}"}
{"username2":"{{ .Data.data.username2 }}"
{{- end }}
지금까지 Vault 설치 방법과 사용방법에 대해서 알아보았다!
지금 비밀정보를 사용할 수 있는 방법을 보면 AWS KMS와 연동하는 방법도 있고, Vault를 제외한 다른 방법도 많다.
하지만, 아직까지?는 Vault가 가장 대중적인 방법인것 같고 사용방법도 어렵지 않다.
데브옵스는 기존 업무/배포/서비스 환경을 어떻게하면 더욱 개선할 수 있을까 방법을 고민하고/찾아보는 직무라고 생각한다.
K8s Secrets으로도 유사한 작업을 할 수 있지만 더 효율적이고 사용성이 간편한 Vault를 도입한것처럼 앞으로도 불편한 프로세스와 업무 내용이 있다면 개선하기 위해 노력할것이다!! 라고 마음속으로 다짐합니다.
끝!