OS 로컬 계정 시크릿 엔진
OS 로컬 계정 시크릿 엔진
Enterprise 기능 — 적절한 Vault Enterprise 라이선스 또는 HCP Vault Dedicated 클러스터가 필요해요.
OS 시크릿 엔진은 원격 호스트에서 사용자 자격 증명(비밀번호)의 안전한 회전을 관리해요. 로컬 계정의 비밀번호 관리를 자동화해 수동 작업을 줄이고 보안 상태를 개선하도록 설계됐어요.
엔진은 두 가지 회전 흐름을 지원해요:
- 부모 관리 회전(Parent Managed Rotation): 수퍼유저(부모) 계정이 다른 계정의 비밀번호를 회전해요.
- 자체 관리 회전(Self Managed Rotation): 계정이 자신의 권한을 사용해 자신의 비밀번호를 회전해요.
일반 요구 사항(General Requirements)
- OS 시크릿 엔진은 Vault Enterprise 2.0.0 이상에서 지원돼요.
shadow-utils버전 4.6보다 큰 RHEL 시스템에서 비밀번호 관리를 지원해요.- 대상 호스트에 SSH 연결을 설정할 수 있어야 해요.
출처: 문서
본문
설정(Setup)
대부분의 시크릿 엔진은 기능을 수행하기 전에 미리 구성해야 해요. 이 단계는 보통 운영자나 구성 관리 도구가 완료해요.
플러그인을 다운로드하고 Vault의 플러그인 카탈로그에 등록해요. 플러그인 버전은 releases.hashicorp.com의 대상 버전과 정확히 일치해야 해요.
$ vault plugin register -download -version="0.1.0+ent" secret vault-plugin-secrets-os
OS 시크릿 엔진을 활성화해요:
$ vault secrets enable -path=os vault-plugin-secrets-os
기본적으로 시크릿 엔진은 엔진 이름으로 마운트돼요. 다른 경로에 시크릿 엔진을 활성화하려면 -path 인수를 사용하세요.
호스트(Hosts)
OS 시크릿 엔진은 "호스트"별로 계정을 구성해요. 호스트는 Vault가 계정 자격 증명을 회전하기 위해 연결할 수 있는 원격 시스템을 나타내요. 각 호스트는 여러 계정을 가질 수 있고, 각 계정은 자체 회전 구성을 가질 수 있어요.
설정 — 원격 호스트의 연결 파라미터를 구성해요.
$ vault write os/hosts/my-box \
address="box.example.com" \
port=22
SSH 호스트 키 검증(SSH Host Key Verification)
엔진은 호스트의 정체를 확립하는 두 가지 방법을 지원해요.
사전 공유 키(명시적 신뢰, Pre-Shared Key / Explicit Trust) — 운영자가 호스트 온보딩 중 ssh_host_key 필드로 대상 호스트의 공개 키(예: RSA, ED25519)를 제공해요. 검증: 첫 연결 시도 중 엔진은 호스트가 제시한 키가 사전 공유 키와 일치하는지 검증해요. 일치하지 않으면 엔진은 연결을 중단하고 오류를 기록해요. 보안 상태: 이것은 가장 안전한 방법이며 프로덕션 환경에 권장돼요.
최초 사용 시 신뢰(TOFU, Trust On First Use) — 기본적으로 호스트 온보딩 중 키를 생략하면 호스트에 계정을 만들 수 없게 돼요. 운영자는 /config 엔드포인트에서 ssh_host_key_trust_on_first_use를 true로 설정해 엔진이 첫 연결 시도 중 호스트가 제시하는 첫 키를 신뢰하도록 명시적으로 허용해야 해요. 첫 연결 시도 중 엔진이 호스트의 공개 키를 가져와 저장해요. 지속성: 이후 모든 연결은 이 저장된 키에 대해 엄격히 검증해요. 호스트가 나중에 다른 키를 제시하면 엔진은 연결을 중단하고 오류를 기록해요. 참고: 두 경우 모두 첫 연결 시도는 기본적으로 호스트의 첫 계정 생성 중에 발생해요. 계정에서 verify_connection이 false로 설정되면 첫 연결 시도는 첫 자격 증명 회전까지 연기돼요.
계정(Accounts)
계정은 Vault가 자격 증명을 회전할 원격 호스트의 로컬 사용자를 나타내요. 각 계정은 호스트와 연결되어야 하며, 선택적으로 그 대신 회전을 수행할 부모 계정을 참조할 수 있어요.
부모 관리 회전 흐름(Parent managed rotation flow) — 이 흐름에서는 권한이 있는(부모) 계정이 대상 계정의 비밀번호를 회전해요. 부모 계정은 원격 호스트에서 상승된 권한을 가질 수 있지만 Vault에서는 표준 계정으로 저장돼요. Vault는 부모 계정의 자격 증명으로 SSH 세션을 수립해 회전을 실행해요. 인증 후 Vault는 chpasswd 명령을 실행해 대상 계정의 자격 증명을 업데이트해요.
요구 사항:
chpasswd는 대상 시스템의 다음 경로에 있어야 해요:/usr/sbin/chpasswd- 부모 계정은
sudo(/usr/bin/sudo)에 대한 무비밀번호 접근이 있어야 해요. - 부모 계정에 부여된 권한은 신중하게, 가능한 한 좁게 부여해야 해요. 예를 들어 sudoers 항목에서
chpasswd명령으로만 제한할 수 있어요:
$user ALL=NOPASSWD:/usr/sbin/chpasswd
부모(수퍼유저) 계정 구성:
$ vault write os/hosts/my-box/accounts/mgmt-user \
username="super-user" \
password="super-secret"
부모 계정을 참조해 대상 계정 구성:
$ vault write os/hosts/my-box/accounts/app-user \
username="user-1" \
password="bigsecret" \
parent_ref="mgmt-user"
부모 계정은 매우 권한이 높으므로 그렇게 취급해야 해요. 표준 사용자가 민감한 "관리" 자격 증명에 접근하지 못하게 하려면 부모 계정의 명명 규칙(예: 위 예시처럼 "mgmt-" 접두사)을 채택하고 이들에 대한 접근을 제한하는 정책을 구현할 것을 권장해요. 예를 들어 비권한 사용자에 대한 정책에서 "mgmt-" 접두사가 있는 어떤 계정에도 접근을 명시적으로 거부할 수 있어요:
path "os/hosts/+/accounts/mgt-*" { capabilities = ["deny"] }
자체 관리 회전 흐름(Self managed rotation flow) — 이 흐름에서는 Vault가 대상 계정 자신으로 대상 시스템에 인증하고 passwd 명령을 실행해 자신의 자격 증명을 업데이트해요. 이것이 기본 구성이에요. Vault는 계정의 현재 저장된 자격 증명으로 SSH 세션을 수립해요. 인증 후 Vault는 대화형 PTY 세션을 열고 expect류 워크플로를 실행해요: 명령이 현재 비밀번호를 요청할 때까지 기다린 뒤 현재 비밀번호를 보내고, 새 비밀번호 요청을 기다렸다 새 비밀번호를 보내는 식이에요.
이 흐름은 전용 관리 서비스 사용자를 만드는 것이 불가능하거나 보안 정책이 계정이 엄격히 격리된 수명 주기를 가져야 한다고 요구하는 환경에 이상적이에요.
/usr/bin/passwd- SSH 데몬은 expect 워크플로를 위해 PTY 할당을 허용해야 해요.
부모 참조 없이 대상 계정 구성:
$ vault write os/hosts/my-box/accounts/my-user \
username="user-1" \
password="bigsecret"
사용법(Usage) / 비밀번호 회전(Password Rotation)
사용자가 구성된 후 비밀번호는 수동으로, cron류 일정으로, 또는 지정된 기간으로 회전할 수 있어요.
다음은 사용자를 수동으로 회전하는 예시예요.
$ vault write -f os/hosts/my-box/accounts/my-user/rotate
자세한 회전 옵션 설명은 API를 참조하세요.
버전 관리(Versioning)
새 자격 증명이 생성될 때마다 플러그인은 새 버전을 만들어요. 이들 버전에 대한 메타데이터는 /versions 하위 명령으로 볼 수 있어요.
$ vault read os/hosts/my-box/accounts/my-user/versions
Key Value
--- -----
created_time 2026-04-03T20:01:29Z
current_version 2
oldest_version 1
ttl <nil>
versions map[1:map[created_time:2026-04-03T20:01:19Z expired_time:2026-04-03T20:01:29Z] 2:map[created_time:2026-04-03T20:01:29Z expired_time:0001-01-01T00:00:00Z]]
자격 증명의 현재 값은 이전 값으로 되돌릴 수도 있어요 — 복구(Recovery) 참조.
플러그인의 정보가 원격 호스트의 자격 증명과 동기화되지 않으면 운영자는 /reset 또는 :version/restore 하위 명령으로 Vault에 알려진 password를 변경할 수 있어요.
다음은 reset 명령 예시예요.
$ vault write os/hosts/my-box/accounts/my-user/reset \
password="new-password"
그리고 버전 복원(version restore) 예시:
$ vault write os/hosts/my-box/accounts/my-user/versions/1/restore
이것들은 Vault가 올바른 사용자 비밀번호를 모르는 시나리오에서 복구하기 위한 것이므로 원격 서버에는 작동하지 않는다는 점을 유의하세요.
오프보딩(Offboarding)
플러그인이 관리하는 자격 증명을 오프보딩하려면 다음 단계를 따라주세요:
disable_automated_rotation플래그를 설정해 자동 회전을 중지해요:$ vault write os/hosts/my-box/accounts/my-user disable_automated_rotation=true- 계정의 현재 자격 증명을 검색해 안전하게 저장해요:
(반환값에는$ vault read os/hosts/my-box/accounts/my-user/credslast_vault_rotation,next_vault_rotation,password,username,version등이 포함돼요) - 계정을 삭제해요:
전체 호스트를 삭제하려면 각 관리 계정에 대해 이 단계를 반복한 다음 호스트를 삭제해요:$ vault delete os/hosts/my-box/accounts/my-user Success! Data deleted (if it existed) at: os/hosts/my-box/accounts/my-user$ vault delete os/hosts/my-box
튜토리얼(Tutorial)
단계별 튜토리얼은 Automate Linux password rotation with Vault를 참조하세요.
OS 시크릿 엔진에는 완전한 HTTP API가 있어요. 자세한 내용은 OS secrets engine API를 참조하세요.
Terraform
Vault Terraform 프로바이더로 OS 시크릿 리소스를 프로그래밍 방식으로 관리할 수 있어요. 자세한 내용은 Terraform Registry 문서(OS 시크릿 엔진 백엔드 리소스, OS 시크릿 엔진 계정 리소스, OS 시크릿 엔진 호스트 리소스)를 참조하세요.
더 알아보기 (Learn more)
- Automate Linux password rotation with Vault 튜토리얼을 확인해 보세요.
- OS secrets engine API 문서를 확인해 보세요.