0Pricing
Cyber Security Academy · 강의

동적 비밀 정보와 임대

수명이 짧고 자동으로 만료되는 자격 증명을 익힙니다.

동적 비밀 정보와 임대은(는) CoddyKit의 무료 Cyber Security Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cyber Security Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

정적 비밀과 동적 비밀

정적 비밀은 한 번 생성한 후 계속 재사용하는 비밀입니다. 예를 들어 10개의 서비스가 수년간 공유하는 동일한 데이터베이스 비밀번호가 있습니다. 정적 비밀은 기본값이지만 문제의 원인이기도 합니다. 수명이 길고 널리 공유되며 교체하기 어렵기 때문입니다.

동적 비밀은 필요할 때 생성되고, 하나의 소비자에게만 고유하며, 자동으로 만료됩니다. 볼트는 비밀번호를 저장하는 대신 요청이 있을 때마다 완전히 새로운 자격 증명을 생성합니다.

이러한 한 가지 변화만으로도 비밀 관리에서 가장 어려운 문제들이 해결됩니다. 교체가 자동화되고, 유출이 발생하더라도 피해 범위가 거의 0으로 줄어듭니다.

동적 비밀의 작동 방식

동적 비밀을 사용하려면 볼트가 백엔드 시스템에 높은 권한으로 접근할 수 있어야 합니다. 데이터베이스에서의 흐름은 다음과 같습니다:

  • 관리자가 루트 데이터베이스 자격 증명과 생성 템플릿으로 볼트를 구성합니다.
  • 애플리케이션이 인증하고 자격 증명을 요청합니다.
  • 볼트가 데이터베이스에서 CREATE USER를 실행하고 새 사용자 이름과 비밀번호를 반환합니다.
  • 임대 기간이 만료되면 볼트가 자동으로 DROP USER를 실행합니다.

애플리케이션은 수명이 긴 비밀번호를 전혀 보지 않습니다. 대신 자신의 신원과 임대 기간에 연결된 임시 자격 증명을 받습니다.

# Configure Vault's database engine with a creation statement
vault write database/roles/billing-readonly \
  db_name=appdb \
  creation_statements="CREATE ROLE \"{{name}}\" LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON billing TO \"{{name}}\";" \
  default_ttl="1h" max_ttl="24h"

동적 자격 증명 요청

애플리케이션에 데이터베이스 접근이 필요하면 볼트에 자격 증명을 요청합니다. 응답에는 새로 생성된 고유한 사용자 이름과 비밀번호, 그리고 유효 기간을 설명하는 임대가 포함됩니다.

모든 소비자는 자신만의 자격 증명을 받습니다. 같은 서비스의 파드 두 개가 시작되면 서로 다른 사용자 이름 두 개를 받으므로 데이터베이스 수준에서 소비자별 감사를 수행할 수 있습니다.

vault read database/creds/billing-readonly

# Example response:
# lease_id     database/creds/billing-readonly/abc123
# lease_duration  1h
# password     A1b-2Cd3-temp-xyz
# username     v-approle-billing-9f3a2

임대: TTL 유효 기간 계약

임대는 이 비밀이 얼마 동안 유효한지 정하는 계약입니다. 모든 동적 비밀에는 TTL(유효 기간)과 선택적 최대 TTL이 포함됩니다.

  • 기본 TTL은 자격 증명이 만료되기 전까지 유지되는 기간입니다.
  • 최대 TTL은 갱신하더라도 넘을 수 없는 절대적인 상한입니다.

임대 기간이 만료되면 볼트는 자격 증명을 폐기하고 데이터베이스 사용자를 직접 삭제합니다. 만료는 단순한 표시가 아니라 실제 정리를 시작하는 동작입니다. 따라서 유출된 동적 비밀은 자동으로 복구됩니다. 탈취된 자격 증명은 TTL 기간 안에서만 유효하고 그 이후에는 쓸모가 없어집니다.

임대 갱신 및 폐기

임대 기간보다 오래 실행되는 애플리케이션은 만료 전에 임대를 갱신해야 합니다. 갱신하면 TTL이 최대 TTL까지 연장되며, 그 이후에는 애플리케이션이 새 자격 증명을 요청해야 합니다.

운영자는 사고 발생 시 비상 차단 장치로 임대를 즉시 폐기할 수도 있습니다. 임대를 폐기하면 남은 TTL과 관계없이 그 기반 자격 증명이 즉시 삭제됩니다.

접두사 아래의 모든 임대를 폐기하여 전체 서비스나 환경의 접근을 즉시 차단할 수도 있습니다.

# Renew a lease before it expires
vault lease renew database/creds/billing-readonly/abc123

# Revoke a single lease immediately (incident kill switch)
vault lease revoke database/creds/billing-readonly/abc123

# Revoke every lease under a path prefix
vault lease revoke -prefix database/creds/billing-readonly

데이터베이스를 넘어

동적 비밀은 데이터베이스에만 한정되지 않습니다. 볼트와 유사한 도구는 다양한 시스템에 사용할 수명이 짧은 자격 증명을 생성합니다:

  • 클라우드 IAM STS 방식의 역할 수임을 통한 임시 AWS/GCP/애저 접근 키
  • SSH 정적 키 대신 서명된 수명이 짧은 SSH 인증서
  • PKI/TLS 필요할 때 발급되고 유효 기간이 짧은 인증서
  • RabbitMQ, MongoDB, 콘술 임시 서비스 자격 증명

패턴은 어디서나 동일합니다. 요청하고, 잠시 사용한 뒤, 자동으로 만료됩니다. 정적 장기 클라우드 키는 침해 사고의 빈번한 원인이지만, 동적 IAM 자격 증명을 사용하면 이러한 키가 필요하지 않습니다.

# Generate temporary AWS credentials scoped to a role
vault read aws/creds/deploy-role
# returns short-lived access_key, secret_key, security_token

# Sign an SSH key for short-lived access (valid minutes, not forever)
vault write ssh/sign/admin public_key=@id_ed25519.pub ttl=15m

동적 비밀이 피해 범위를 줄이는 이유

각 모델에서 자격 증명이 유출되는 상황을 생각해 보십시오:

  • 정적 비밀번호는 사람이 알아차리고 교체한 뒤 모든 소비자의 비밀번호를 업데이트할 때까지 유효합니다. 노출 기간은 며칠 또는 몇 달에 이릅니다.
  • 동적 자격 증명은 TTL 안에 만료되며, 보통 몇 분에서 한 시간 이내입니다. 또한 하나의 소비자에게만 범위가 제한되고 권한도 최소화됩니다. 따라서 노출 기간이 매우 짧고 피해가 제한됩니다.

동적 비밀은 교체를 고통스러운 수동 작업에서 자동으로 계속 유지되는 시스템 특성으로 바꿉니다.

루트 자격 증명의 절충점

동적 비밀은 강력하지만, 볼트가 자격 증명을 발급할 사용자를 생성할 수 있는 각 백엔드에 대해 높은 권한의 루트 자격 증명을 보유해야 합니다. 이로 인해 위험이 볼트에 집중됩니다.

완화 방법:

  • 루트 자격 증명 자체를 교체하여 볼트조차 원래 관리자 비밀번호를 보유하지 않도록 하십시오.
  • 루트 계정의 범위를 사용자 생성 및 삭제에 필요한 권한으로만 정확히 제한하십시오.
  • 이제 볼트 호스트가 매우 중요한 표적이 되었으므로 이를 철저히 격리하고 모니터링하십시오.

볼트는 자체 루트 자격 증명을 교체할 수 있으므로 설정이 끝난 뒤에는 어떤 사람도 그 자격 증명을 알지 못하게 할 수 있습니다.

# After configuring the engine, rotate the root credential
# so even operators no longer know the original password
vault write -force database/rotate-root/appdb

애플리케이션 코드에서 만료 처리

애플리케이션은 자격 증명이 변경될 수 있음을 예상하도록 작성해야 합니다. 정적 비밀을 사용할 때 코드는 시작 시 비밀번호를 한 번 읽습니다. 동적 비밀을 사용할 때 코드는 다음을 수행해야 합니다:

  • 자격 증명을 가져오고 임대 TTL을 기록합니다.
  • 임대를 갱신하거나 만료 전에 새 자격 증명을 다시 가져옵니다.
  • 기존 자격 증명이 폐기되면 원활하게 다시 연결합니다.

일반적인 패턴은 사이드카 에이전트가 임대 수명 주기를 처리하고 로컬 비밀 파일을 다시 작성하도록 하는 것입니다. 그러면 애플리케이션은 구성만 다시 불러오면 됩니다. 연결 풀도 만료된 자격 증명을 계속 사용하지 않도록 새로 고쳐야 합니다.

# Vault Agent auto-renews and re-templates on rotation
auto_auth { method "approle" { ... } }
template {
  contents    = "{{ with secret \"database/creds/billing-readonly\" }}{{ .Data.username }}:{{ .Data.password }}{{ end }}"
  destination = "/run/secrets/db"
  command     = "systemctl reload billing-app"
}

정적 비밀을 피할 수 없는 경우

모든 비밀을 동적으로 만들 수 있는 것은 아닙니다. 일부 타사 응용 프로그램 인터페이스는 필요할 때 생성할 수 없는 장기 키 하나만 발급합니다. 이러한 정적 비밀에는 다음과 같은 보완 통제를 적용하십시오:

  • 코드에 저장하지 말고 볼트에 저장하십시오.
  • 최소 권한으로 범위를 제한하십시오.
  • 일정에 따라 교체하십시오(다음 수업에서 다룹니다).
  • 이상 징후가 있는지 사용 현황을 모니터링하십시오.

기본 원칙은 다음과 같습니다. 동적 방식을 우선하고, 정적 방식을 사용해야 한다면 끊임없이 교체하고 감사하십시오.

CI/CD의 동적 비밀

지속적 통합/지속적 제공 파이프라인은 대표적인 활용 사례입니다. 기존에는 파이프라인이 수명이 긴 배포 키를 보유했으므로 노리기 좋은 표적이었습니다. 동적 비밀을 사용하면 파이프라인은 다음과 같이 동작합니다:

  • OIDC 신원을 사용하여 볼트에 인증합니다(예: GitHub 액션의 OIDC 토큰).
  • 작업이 진행되는 동안에만 유효한 수명이 짧은 클라우드 자격 증명을 요청합니다.
  • 작업이 끝나면 해당 자격 증명이 자동으로 만료되도록 합니다.

수명이 긴 배포 키는 어디에도 존재하지 않습니다. 침해된 파이프라인 기록에서 자격 증명이 유출되더라도 누군가 그 기록을 읽을 때쯤에는 이미 무효화되어 있습니다.

# GitHub Actions job exchanges its OIDC token for a short-lived AWS role
# No static AWS keys stored as repo secrets
permissions:
  id-token: write
steps:
  - uses: aws-actions/configure-aws-credentials@v4
    with:
      role-to-assume: arn:aws:iam::123:role/deploy
      aws-region: eu-central-1

빠른 확인

임대와 동적 비밀에 대한 이해도를 확인해 보십시오.

복습: 동적 비밀과 임대

수명이 짧고 자동으로 만료되는 자격 증명이 비밀 관리를 어떻게 변화시키는지 배웠습니다.

  • 동적 비밀은 필요할 때 생성되고 소비자마다 고유하며 자동으로 만료됩니다. 재사용되는 정적 비밀과는 다릅니다.
  • 임대는 TTL과 최대 TTL을 정의하며, 만료되면 볼트가 실제 정리를 수행하면서 자격 증명을 폐기합니다.
  • 오래 실행되는 애플리케이션은 임대를 갱신할 수 있고, 사고 발생 시 비상 차단 장치로 즉시 폐기할 수도 있습니다.
  • 동적 비밀은 데이터베이스, 클라우드 IAM, SSH, PKI 등에서 사용할 수 있어 피해 범위를 줄이고 교체를 자동화합니다.
  • 절충점은 볼트에 높은 권한의 루트 자격 증명이 필요하다는 것입니다. 이를 교체하고 범위를 엄격히 제한하십시오.
  • 애플리케이션과 지속적 통합/지속적 제공 시스템은 만료를 처리하도록 작성해야 합니다. 동적 방식을 우선하고, 정적 비밀을 피할 수 없다면 교체하십시오.

다음에는 키를 교체하고 유출을 탐지하여 문제가 발생했을 때 대응하는 방법을 다루겠습니다.

자주 묻는 질문

“동적 비밀 정보와 임대” 강의는 무료인가요?

네 — “동적 비밀 정보와 임대” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cyber Security Academy 강의 전체를 잠금 해제할 수 있습니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“동적 비밀 정보와 임대”에서 뭘 배우나요?

수명이 짧고 자동으로 만료되는 자격 증명을 익힙니다. 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Cyber Security Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Cyber Security Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“동적 비밀 정보와 임대” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Cyber Security Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Cyber Security Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 비밀 정보 확산 문제
  2. 보관소와 비밀 정보 저장소
  3. 동적 비밀 정보와 임대
  4. 키 교체와 탐지
← Cyber Security Academy(으)로 돌아가기