Vault 정책
Vault 정책 (Policies)
Vault의 모든 것은 경로(path) 기반이에요. 정책도 예외가 아니에요. 정책은 Vault에서 특정 경로·오퍼레이션에 대한 접근을 허용하거나 금지하는 선언적 규칙이에요. 시스템에서 아무것도 허용하지 않는 deny by default가 기본이라, 빈 정책은 아무 권한도 주지 않아요.
출처: https://developer.hashicorp.com/vault/docs/concepts/policies
정책은 HCL이나 JSON으로 작성해요. 가장 단순한 예시로, KVv1 경로 secret/foo에 read 권한을 주는 정책이에요.
path "secret/foo" {
capabilities = ["read"]
}
Vault 아키텍처는 파일시스템과 비슷해요. 모든 동작이 경로와 capability(능력)에 대응하고, Vault 내부 코어 설정조차 "sys/" 경로 아래에 살아요. 정책이 이 경로·capability에 대한 접근을 정의해서 토큰의 자격증명 접근을 통제해요.
정책 인가 워크플로우는 보통 이렇게 흘러가요. (1) 보안 팀이 Vault에 인증 메서드를 연결하고(예: LDAP 서버 주소·TLS 여부), (2) HCL로 정책을 작성해 디스크에 저장하고, (3) 정책을 Vault에 업로드해 이름으로 참조하고, (4) 인증 메서드의 데이터를 정책에 매핑해요. 예를 들어 OU 그룹 "dev" 멤버 → readonly-dev 정책, "ops" 멤버 → admin·auditor 정책처럼요. 사용자가 인증하면 실제 인증은 인증 메서드에 위임되고, Vault는 그 결과를 정책과 연결해요.
내장 정책은 두 가지예요. default: 제거할 수 없고 기본적으로 모든 토큰에 붙는 정책이에요(토큰 생성 시 명시적으로 제외할 수 있음). 내용은 자유롭게 수정할 수 있어요. root: 수정·제거 불가능한 정책으로, 이 정책을 가진 사용자는 root 사용자가 되어 Vault에서 뭐든 할 수 있어요. 그래서 프로덕션 운영 전에 root 토큰을 폐기하는 걸 강력히 권장해요.
정책 관리는 CLI로 간단히 해요.
# 정책 나열
$ vault read sys/policy
# 정책 생성(업로드)
$ vault policy write policy-name policy-file.hcl
# 사용자를 정책에 연결
$ vault write auth/userpass/users/sethvargo \
password="s3cr3t!" \
policies="dev-readonly,logs"
표준 capability 위에 파라미터 제약(allowed_parameters/denied_parameters) 같은 세밀한 제어도 지원해요. 토큰이 잘못된 권한으로 무언가를 하려 하면 Vault는 permission denied 메시지와 함께 403 코드를 돌려줘요.
더 알아보기
- 정책 튜토리얼: Vault Policies
- 경로 템플릿: ACL Policy Path Templating