앞선 게시물에서 Vault를 사용하기 위해 Role + Policy + Secrets을 생성하였다.
이제는 서비스에서 어떻게 Vault Secrets을 사용할 수 있는지 알아보도록 하자!!
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를 도입한것처럼 앞으로도 불편한 프로세스와 업무 내용이 있다면 개선하기 위해 노력할것이다!! 라고 마음속으로 다짐합니다.
끝!
'기술 이모저모 > [Ops] Devops' 카테고리의 다른 글
[ArgoCD] Github 연동 및 Webhook Event 설정 방법 (0) | 2023.05.13 |
---|---|
[ArgoCD] CD Tool 도입개요 및 설치방법 (0) | 2023.05.13 |
[Vault] Vault 서비스 사용 방법[1/2] (0) | 2023.04.30 |
[Vault] Vault Helm 배포 및 활성화 방법 (2) | 2023.04.30 |
[SLA] 서비스 안전성의 주요 지표 SLI, SAO + SLA (0) | 2023.04.02 |