Azure Key Vault로 시크릿 안전하게 관리: 코드에서 비밀번호 없애기

Azure Key Vault로 시크릿과 비밀번호를 안전하게 관리하기

한눈에 보기

  • 코드·설정 파일에 박혀 있는 비밀번호·키를 Azure Key Vault로 빼내는 방법.
  • 핵심은 관리 ID(Managed Identity)로 비밀번호 없이 Key Vault에 접근하는 것.
  • 시크릿이 유출돼도 회전(rotation)·접근 제어로 피해를 줄입니다.

가장 흔한 사고가 ‘GitHub에 올린 코드에 DB 비밀번호가 들어 있던’ 경우입니다. 시크릿을 코드에서 분리하고, 접근은 자격증명 없이 ID로 하는 게 정석입니다. Key Vault가 그 역할을 합니다.

Key Vault가 보관하는 것

유형예시용도
SecretsDB 비밀번호, API 키, 연결 문자열앱이 런타임에 읽기
Keys암호화 키(RSA 등)암·복호화, 서명
CertificatesTLS 인증서HTTPS, 자동 갱신

핵심: 관리 ID로 ‘비밀번호 없이’ 접근

앱(App Service·VM·Functions)에 관리 ID를 부여하면, 그 ID에 Key Vault 접근 권한을 주는 것으로 끝납니다. 코드엔 비밀번호가 전혀 없습니다. Key Vault에 접근하기 위한 또 다른 비밀번호가 필요 없다는 점이 핵심입니다.

# 1) 시크릿 저장
az keyvault secret set --vault-name <VAULT> --name DbPassword --value '****'

# 2) App Service에 관리 ID 부여
az webapp identity assign -g <RG> -n <APP>

# 3) 그 ID에 시크릿 읽기 권한(RBAC) 부여
az role assignment create --assignee <APP_IDENTITY> \
  --role "Key Vault Secrets User" --scope <VAULT_RESOURCE_ID>

코드에서 읽기

SDK의 기본 자격증명 체인을 쓰면, 로컬에선 개발자 로그인으로 클라우드에선 관리 ID로 자동 인증됩니다. 코드 변경 없이 환경만 바뀝니다.

// Node 예시
const { SecretClient } = require("@azure/keyvault-secrets");
const { DefaultAzureCredential } = require("@azure/identity");
const client = new SecretClient(vaultUrl, new DefaultAzureCredential());
const pw = (await client.getSecret("DbPassword")).value;

흔한 실수

  • Key Vault 접근용 비밀번호를 또 코드에 — 관리 ID를 쓰면 그 비밀번호 자체가 사라집니다.
  • 접근 정책 너무 넓게 — 앱마다 필요한 시크릿만, 최소 권한으로.
  • 회전(rotation) 미설정 — 유출 대비 정기 교체와 만료를 설정하세요.

자주 묻는 질문(FAQ)

  • Q. Key Vault에 접근하려면 또 비밀번호가 필요하지 않나요? A. 관리 ID를 쓰면 필요 없습니다. ID에 권한만 주면 자격증명 없이 접근합니다.
  • Q. 로컬 개발 땐 어떻게 인증하나요? A. DefaultAzureCredential이 개발자 로그인(az login)을 자동 사용합니다.
  • Q. 환경변수에 넣는 것과 뭐가 다른가요? A. 중앙 관리·접근 로그·회전·세밀한 권한 제어가 가능해 보안이 훨씬 강합니다.

마치며

‘시크릿은 코드 밖으로, 접근은 관리 ID로’. 이 두 원칙만 지켜도 가장 흔한 유출 사고를 막습니다. Key Vault는 그 표준 도구입니다.

댓글 남기기