프로그래매틱 Vault 관리를 위한 모범 사례
프로그래매틱 Vault 관리를 위한 모범 사례
Vault CLI나 API에서 직접 생성된 리소스에 적절한 거버넌스 정책을 적용하는 것은 어려울 수 있습니다. Vault를 규모에 맞게 관리하는 가장 좋은 방법은 Terraform과 Terraform Vault provider로 리소스 관리를 코드화(codify)하는 것입니다.
출처: 문서
본문
Terraform은 인프라를 코드로(IaC) 관리하는 방식으로 정책과 거버넌스를 적용하므로, 인증 방법, 플러그인, namespace, 정책 같은 Vault 리소스를 프로그래매틱하게 관리할 수 있습니다. 예를 들어 모든 Vault namespace에 적용해야 하는 특정 ACL 또는 Sentinel 정책이 있다면, 새 namespace를 만들 때마다 Terraform이 올바른 거버넌스 정책을 적용하도록 할 수 있습니다.
Terraform 권장 사항
-
Terraform에서 Vault로 장수명 정적 시크릿을 읽거나 쓰지 마세요. Terraform으로/으로부터 읽거나 쓴 데이터는 Terraform state 파일과 생성된 plan 파일에 유지됩니다.
-
Terraform state 파일을 암호화하세요. 안전하고 암호화된 backend로 state 파일을 보호하세요.
-
최소 권한 원칙을 따르세요. Terraform state 파일에 읽기/쓰기 접근 권한이 있는 사람을 제한하세요.
-
Vault 리소스의 직접 관리를 제한하세요. Terraform을 통해 관리해야 하는 리소스에 대한 리소스 관리 권한을 제한하려면 Sentinel 정책을 사용하세요.
-
단기 자격 증명을 사용하세요. 자격 증명은 Terraform state 파일에 유지됩니다. 단기 자격 증명은 state 파일이 손상될 경우 노출 위험을 줄여줍니다.
Vault 권장 사항
-
다양한 클라우드 공급자에 Vault 기반 동적 자격 증명을 사용하세요. Vault 기반 동적 자격 증명은 여러 클라우드 공급자에 걸쳐 고유한 동적 공급자 자격 증명의 필요성을 줄여, 여러 클라우드 공급자에서 단기 자격 증명을 생성하면서 민감한 데이터 관리를 Vault로 중앙화할 수 있게 합니다.
-
리소스와 데이터 소스에서 namespace 속성을 사용하세요. provider 별칭 대신 리소스의 namespace 속성을 사용하면 구성이 단순해지고 여러 provider 블록이 필요하지 않습니다.
-
고유한 토큰 기능을 사용하세요. Vault 리소스를 관리하는 데 필요한 최소한의 Vault 토큰 기능을 사용하세요. 예를 들어 KV 데이터 소스에서 데이터를 읽고 drift 감지 기능을 사용하려면
read기능만 필요합니다. 하지만 KV 리소스를 관리하려면 리소스가 이미 존재하는지에 따라create또는update기능이 필요합니다. 그리고 Terraform 구성에서 KV 리소스를 제거하려면delete기능이 필요합니다. -
기존 리소스를 Terraform으로 마이그레이션하세요. Terraform 프로비저닝 워크플로 외부에서 Vault 리소스를 생성했다면 관리되지 않는 리소스를 마이그레이션하세요.
-
가능하면 Vault에 동적 provider 자격 증명을 사용하세요. 동적 provider 자격 증명은 필요 시 단기 자격 증명을 생성하므로 정적 자격 증명의 필요성을 줄이고 통합의 보안 태세를 개선합니다.
-
provider 구성 블록에
address,token,namespace를 전달하지 마세요. 동적 provider 자격 증명을 사용하면 Terraform은 환경 변수TFC_VAULT_ADDR에address를, 워크스페이스 환경 변수TFC_VAULT_NAMESPACE에namespace를 채웁니다. 그러면 Terraform은 환경 변수를 사용해token값을 검색합니다. -
Vault 자격 증명을 하드코딩하지 마세요. 동적 provider 자격 증명을 사용할 수 없다면 환경 변수로 Vault provider를 구성하세요.
동적 자격 증명은 자식 토큰 동작에 영향을 줍니다 Terraform Vault provider와 함께 동적 자격 증명을 사용하면 Terraform이 Vault 토큰 수명 주기를 관리한다는 뜻입니다. 그 결과 Vault는 자식 토큰을 만들지 않으며, Vault 자식 토큰 관리용 provider 인수(예:
token_name인수)를 사용할 수 없습니다.