클라우드 아카이브

[vault] Namespace 개념과 특징 및 실습 본문

Cloud Native Solution/[Hashicorp] Vault

[vault] Namespace 개념과 특징 및 실습

Cloud Engineer 2022. 9. 11. 17:38
반응형

0. 개요

실제 회사에서 Vault를 운영하며 조직 구조 변경 혹은 입사자/퇴사자 관리 등을 효과적으로 하기 위해서 각 조직 별 및 서비스 별로 Vault를 별도 구성 및 관리하는 니즈가 발생하게됩니다.(이른바 멀티 테넌트 방식) Vault에서는 이러한 니즈를 충족시키고자 Namespace라는 기능을 개발했으며, 본 컴포넌트를 활용하여 급변하는 비즈니스 환경에 맞춰 시스템 구성을 다변화하도록 지원해줍니다. 본 포스팅에서는 Namespace에 대한 개념 및 특징과 이를 직접 구현해보겠습니다.

1. Namespace란

"Vaults within a Vault"
단일 Vault 서버에 여러 개의 논리적인 그룹으로 나누어 서비스를 제공할 수 있도록 해주는 기능
  • Vault 서버를 여러 개의 논리적인 환경으로 구성하여 운영 (멀티 테넌트 방식)
  • Kubernetes의 namespace와 동일한 메커니즘

2. Namespace 특징 : Login Path, Auth Method 및 Data 등을 별도 관리

  • Namespace로 별도 구성 가능한 컴포넌트는 하기와 같음
    • Policies
    • Auth Methods
    • Secrets Engines
    • Tokens
    • Identity entities and groups

3. 실습

DevOps팀쿠버네티스 클러스터 관리 파트배포 파트가 나누어졌다고 가정

3-1. 구성도

Vault Raft HA Cluster 내 Namespace 구성도

3-2. 실습

3-2-1. 위 환경에 맞춰 Vault Namespace를 구성

# DevOps팀 구성
$ vault namespace create devops
 
# 파트 구성
$ vault namespace create -namespace=devops k8s-cluster
$ vault namespace create -namespace=devops deployment

3-2-2. 각 namespace에 적용할 policy 작성

1. 데브옵스(devops) 팀 policy 작성

  • 가정 : Vault 관리자는 DevOps에 소속되어 Chlid Namespace인 k8s-cluster 및 deployment 관련 전체 권한을 보유 
# vault_policy_devops.hcl
path "devops/k8s-cluster/*" {
        capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}

path "devops/deployment/*" {
        capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}

2. 쿠버네티스 클러스터 관리(k8s-cluster) 파트 policy 작성

  • 가정 : 클러스터 관리자가 오픈스택 혹은 k8s 노드 접속 secrets 관련 전체 권한을 보유
# vault_policy_k8s-cluster.hcl

# Manage SSH OTP Access to k8s nodes
path "ssh-otp-k8s/*" {
	capabilities = ["read", "list", "update"]
}

# Manage signed RSA Access to openstack nodes
path "ssh-signed-rsa-openstack/*" {
	capabilities = ["read", "list", "update"]
}

3. 배포 관리(deployment) 파트 policy 작성

  • 가정 : 배포 관리자는 오픈스택 혹은 k8s 노드 접속 secrets 읽기 권한만 보유
# vault_policy_deployment.hcl

# Manage SSH OTP Access to k8s nodes
path "ssh-otp-k8s/*" {
	capabilities = ["read", "list"]
}

# Manage signed RSA Access to openstack nodes
path "ssh-signed-rsa-openstack/*" {
	capabilities = ["read", "list"]
}

3-2-3. 각 Namespace에 policy 적용

$ vault policy write -namespace=devops devops_policy vault_policy_devops.hcl
$ vault policy write -namespace=devops/k8s-cluster k8s-cluster_policy vault_policy_k8s-cluster.hcl
$ vault policy write -namespace=devops/deployment deployment_policy vault_policy_deployment.hcl

4. 마무리

Vault의 기능인 Namespace의 개념과 특징 및 실습을 진행했습니다. 엔터프라이즈 환경에서 조직/IT 서비스 별로 Vault Namespace를 나누어 구성함으로써 운영의 효율성을 높일 수 있습니다. 다음 포스팅에서는 Vault의 Audit Device 기능을 다뤄보겠습니다.

Comments