And Brain said,

Vault, HashiCorp와 비밀의 방 본문

IT/DevOps \ Architecture

Vault, HashiCorp와 비밀의 방

The Man 2023. 3. 12. 20:53
반응형

최근 인프라와 아키텍처가 클라우드 네이티브 및 마이크로서비스로 가는 추세다보니 그에 맞춰 기업들도 복잡한 환경에서의 보안을 신경쓰게 될 수 밖에 없다.

 

오늘은 그런 보안 툴들 중 최근 자주 사용되고 있는 HashiCorp사의 Vault에 대해서 알아보고 간단한 환경 구성까지 해보자.

 

 

Vault는 HashiCorp에서 개발한 오픈소스 암호화키 관리 도구로 Vault를 사용하면 애플리케이션 보안을 위해 중요한 정보인 패스워드, API 키 등을 안전하게 저장하고 관리할 수 있다.

Vault는 다양한 기능을 제공하지만, 그 중 가장 중요한 기능은 데이터를 암호화하고 복호화하는 것이다.

 

애플리케이션 내부에 저장되어 있는 중요한 정보를 Vault를 통해 암호화하고, 필요할 때만 복호화하여 사용함으로써, 정보 유출 및 해킹 등의 보안 문제를 예방할 수 있다.

또한 Vault는 인증 및 권한 부여 기능도 제공한다. 

 

인증 기능은 사용자가 Vault 서버에 접근할 때 사용자를 인증하고 권한을 부여하는 역할을 하고, 권한 부여 기능은 사용자의 권한을 관리하여 특정 데이터나 기능에 대한 접근 권한을 부여하거나 제한하는 역할을 한다.

 

이외에도 Vault의 다양한 기능을 효과적으로 활용하여, 애플리케이션 보안에 대한 신뢰성을 높여보도록 하자.

 

 

자, 이제 본론으로 들어가자.

 

Vault는 도커를 이용해 설치해줄 것이다.

 

# vault-compose.yml

version: '3'

services:
  vault:
    image: vault:1.13.0
    container_name: vault
    ports:
      - 8200:8200
    volumes:
      - ../vault/config:/vault/config
      - ../vault/policies:/vault/policies
    environment:
      - VAULT_ADDR=http://172.19.0.3:8200
    cap_add:
      - IPC_LOCK
    command: server
    networks:
      msa-network:
        ipv4_address: 172.19.0.3

networks:
  msa-network:
    external: true

vault-compose.yml을 작성해준다.

 

볼륨 마운트 경로는 본인에 맞게 바꿔주면 된다.

 

cap_add는 컨테이너에서 사용할 권한을 지정하는 것이고 IPC_LOCK은 컨테이너가 메모리에 잠금을 걸 수 있도록 해준다.

 

 

vault 폴더 내에 필요한 설정 파일들을 만들어주면 된다.

 

스토리지는 mysql을 사용할 것이다.

 

다 작성해줬다면

docker-compose -f vault-compose.yml up -d

이제 http://localhost:8200/ui로 접속한다면

 

Vault UI로 접속할 수 있다.

 

Key shares는 root key를 몇 조각으로 나눌 것인지를 묻고, Key threshold는 그 중 몇 개의 조각이 필요한지를 묻는 것이다.

 

나는 5조각으로 나누어 3개의 조각이 필요하도록 하였다.

 

initialize 버튼을 누르면

 

 

이렇게 초기 루트 토큰과 5개의 키를 준다.

 

아래에 있는 Download Key 또는 잘 기록해두자.

 

이 화면을 다시 볼 수 없다는 점을 명심해두자.

 

 

이후 unseal 화면을 찍지를 못했는데, 키 3개를 한 번씩 입력해주면 된다.

 

 

그러면 Sign in을 할 수 있다.

 

여기서 여러가지 방식으로 Sign in 할 수 있지만, 일단 먼저 들어는 가보도록 하자.

 

이 토큰 값에 아까 받은 초기 루트 토큰을 입력하면

 

 

자 이제 비밀의 방 입구까지 왔다.

 


 

 

** 확인 결과 Vault 내에 policy가 적용이 안 되어있길래 UI 내에서 적용해보도록 하겠다.

 

그 전에 먼저 토큰 방식말고 User/passwd 방식 로그인이 가능하게 설정해보자.

 

상단의 Access 탭으로 들어가서 Enable new method + 를 눌러 Auth Methods를 추가해준다.

 

 

Next

 

Enable Method

 

생성된 userpass로 들어가

 

Create user +

 

만들어준다.

 

 

다음은 정책을 만들어준다.

 

상단의 Policies 탭 -> Create ACL policy +

내부로 들어가면 policy를 적을 수 있는데 우리는 앞서 파일을 만들었기에 이를 활용해보자.

 

우측에 보이는 Upload file이라는 토글을 활성화시켜서 파일을 선택해주면

 

policy 설정도 끝.

 

 

자, 그러면 이제 생성한 User에 Policy를 적용해보자.

 

UI 내에서 우측 상단에 존재하는 CLI를 사용할 것이다.

 

이렇게 명령어를 입력해준다.

 

$ vault write auth/userpass/users/your-username \
  policies="your-policy" \
  password="your-password"

 

 

이제 Sign out 후 

 

Method Username으로

접속 가능하다.

 

 

자, 이제 마지막이다.

 

여기서 여러분들의 비밀의 방을 만들어보자.

 

우측의 Enable new engine +

 

Enable Engine

 

이렇게 비밀의 방을 만들었다.

 

이곳에 여러분들의 은밀한 비밀들을 넣어보길 바란다.

 

오늘 배운 Vault는 다음 포스팅인 "Config Server, MSA의 중앙정보국"에서 사용하게 될 것이다.

 

 

Thanks for watching, Have a nice day.

 

References

https://www.youtube.com/watch?v=9ffFZCbebPY

https://www.misterpki.com/vault-docker/

https://blog.outsider.ne.kr/1266

https://ddimtech.com/vault-docs/vault-approle

 

반응형
Comments