Kubernetes, Key Vault 활용하기2

눕눕·2024년 1월 28일
0

Kubernetes 도입하기

목록 보기
7/8

혹시 config map에 적힌 내용이 credential 이 들어가있나요?

kubernetes를 사용중 아래와 같은 피할 수 없는 딜레마에 빠질 경우가 있다.

  • 특정 툴을 container로 만들어 사용하는데 이 툴은 예를 들어 config.ini라는 파일을 통해 특정한 값들을 넣어야 한다.
  • 이러한 값들 중, 특정 id / pw를 넣어야 하는 경우가 있다.
  • 보안상, config map으로 하자니 너무 오픈된 부분으로 id / pw가 노출 되고, secret 또한 base64 decoding만하면 볼 수 있기에 별 다른 부분이 없다.
  • 그렇다고 config map이나 secret으로 마운트 시켜 쓰는 방향이 아닌, container를 생성할 때 부터 dockerfile을 통해서 ini를 넣을순 있지만, config 값을 간간히 업데이트 시켜야 하는 상황이면 매번 container를 다시 build 하는건 비효율적으로 보인다.
  • 그럼 간단히 마운트해서 쓸 파일만 업데이트 할 수 있을까?

위와 같은 고민 포인트는, backend 서버에서 db 커넥션을 열 때 credential이 필요할텐데 이 또한 같은 고민 포인트일 수 있다.

이전 글(링크)에서 소개한 secret provider class를 Azure Key Vault 와 함께 쓰면 해소가 가능하다. 하지만 여기서 더 나아가 Azure Key Vault를 활용할 때 팁을 조금 적어볼까 한다. 나도 매번 까먹고 매번 찾아서 글로 남겨서 보려고 한다.

how to!

Azure의 Key Vault를 secret provider class를 통해 사용하는 부분은 크게 어렵지 않게 되어있다. 하지만 위에 적은 예제처럼 여러 라인의 문자들을 하나의 secret으로 넣으려면 계속 한줄로 바껴서 올라간다.

심지어 portal에서도 아래와 현재 portal에서 다이렉트로 올리는 방법은 지원되지 않는다고 한다.

그럼 위에서 말한 powershell을 알아보자.

우선 아래의 링크와 같이 아주 친절히 설명되어져 있다.
https://learn.microsoft.com/en-us/azure/key-vault/secrets/multiline-secrets?wt.mc_id=AZ-MVP-5003065

Azure cli 사용

az keyvault secret set --vault-name "key_vault_이름" --name "secret_이름" --file ".txt_파일이름"

Powershell 사용

$RawSecret =  Get-Content "secretfile.txt" -Raw
$SecureSecret = ConvertTo-SecureString -String $RawSecret -AsPlainText -Force
Set-AzKeyVaultSecret -VaultName "key_vault_이름" -Name "secret_이름" -SecretValue $SecureSecret

위와 같이 txt 파일로 미리 저장해놓고 해당 파일을 업로드 하는 느낌으로 사용하면 된다.

마치며

AKS를 쓸 때, 공개되도 좋은 데이터들은 configmap이나 secret 정도로 사용해도 되지만, 정말 노출 되면 안되는 데이터들은 Azure Key Vault를 사용하는 방법을 권장한다.
사용시 줄바꿈이 필요하면 위의 명령어를 통해 multi라인을 넣자!!

profile
n년차 눕눕

0개의 댓글