different-case 엔티티 별칭 중복 수정하기

different-case 엔티티 별칭 중복 수정하기

대소문자 차이로 인한 엔티티 별칭의 중복 identity를 수정해요.

강제된 identity 중복 제거를 활성화하기 전에 different-case 엔티티 별칭 중복을 반드시 검토해야 해요. 서로 다른 별칭을 잘못 병합할 경우의 보안 위험이 있을 수 있기 때문이에요.

전제 조건(Assumptions)

  • Vault 1.19 이상을 실행 중이에요.
  • 시스템 로그에 중복 제거 병합 대상이 있어요.
  • 관련 Vault 서버 또는 클러스터에 대한 관리자 권한이 있어요.

출처: 문서

본문

중복이 생기는 이유(Why duplicates happen)

Vault의 과거 버그로 인해 authN 마운트가 같은 엔티티 별칭을 서로 다른 대소문자를 사용해 중복 생성할 수 있었어요. 예를 들어 외부 LDAP 시스템이 정규화되지 않은 사용자 이름을 반환하거나 시간에 따라 정규화 방식을 바꾸는 경우가 있어요. 기본적으로 Vault는 사용자 이름에 대해 대소문자 구분 없는 매칭을 사용하고 usernameuSeRnAmE를 같은 별칭으로 간주해요. 하지만 과거 버그로 일부 사용자는 저장소에 different-case 중복을 남기고 있어요.

같은 사용자를 나타내지 않는 identity를 잘못 병합하는 보안 영향을 피하기 위해, Vault는 identity 엔진을 대소문자 구분 매칭 모드로 전환해 과거 동작을 존중하려고 해요. 하지만 대소문자 구분 매칭은 지원이 부족하고, Vault가 세우는 근본적인 보안 가정에서 벗어나며, 예기치 않은 동작으로 이어질 수 있어요.

예시 서버 로그(Example server log)

Vault 시스템 로그는 중복 별칭에 대한 경고를 제공하며, 여기에는 다음이 포함돼요.

  • 별칭 문자열
  • 연결된 마운트 경로(mount accessor)
  • 별칭 ID(id)
  • 별칭에 연결된 엔티티의 ID(canonical_id)
[WARN]  identity: 2 different-case entity alias duplicates found (potential security risk)

[WARN]  identity: entity-alias "alias-case" with mount accessor "auth_userpass_34aca7ec" duplicates 1 others: id=df3568a4-3b65-4104-9481-1129ecbed72f canonical_id=5f013d99-a6c7-9a00-6ad5-4ad724b14f60 force_deduplication="would merge into entity 7da76b0d-fe9b-a125-3362-2a8ff055dcf8"

[WARN]  identity: entity-alias "alias-cAsE" with mount accessor "auth_userpass_34aca7ec" duplicates 1 others: id=2992253b-1e99-4e47-b6f9-afb0c7cedf7a canonical_id=7da76b0d-fe9b-a125-3362-2a8ff055dcf8 force_deduplication="would merge others into this entity"

[WARN]  identity: entity-alias "alias-case" with mount accessor "auth_userpass_a555989a" duplicates 1 others: id=0e4bd46e-a868-4dd4-a34a-cb73f097e3a5 canonical_id=1ce06951-e2fd-0923-8ae0-a0e2c6c2378b force_deduplication="would merge into entity 37f41fcf-5e15-f13f-248d-9fa8405b1ecd"

[WARN]  identity: entity-alias "alias-cAsE" with mount accessor "auth_userpass_a555989a" duplicates 1 others: id=6cafe546-665c-4bd0-a4fd-5e699ba413c1 canonical_id=37f41fcf-5e15-f13f-248d-9fa8405b1ecd force_deduplication="would merge others into this entity"

[WARN]  identity: end of different-case entity-alias duplicates

중복 해결을 위해 시스템 로그를 검토할 때, 잠재적 중복을 그룹화할 때는 항상 authN 마운트와 네임스페이스를 고려해요. 예를 들어 예시 로그의 이름이 대소문자 구분 없이 동일해도, 네 개의 별칭은 두 개의 서로 다른 identity를 나타내요. 서로 다른 authN 마운트에서 왔기 때문이에요.

  • alias-casealias-cAsE는 마운트 auth_userpass_34aca7ec의 중복이며, 중복 제거 중 canonical ID 7da76b0d-fe9b-a125-3362-2a8ff055dcf8의 별칭 아래로 병합돼요.
  • alias-casealias-cAsE는 마운트 auth_userpass_a555989a의 중복이며, 중복 제거 중 canonical ID 37f41fcf-5e15-f13f-248d-9fa8405b1ecd의 별칭과 병합돼요.

different-case 중복을 해결하려면 대소문자 차이가 병합 가능한 중복(mergeable)인지 병합 불가능한 중복(unmergeable)인지 판단해야 해요.

  • 병합 가능한 중복 — 대소문자 차이가 의도적이지 않고 중복 항목이 같은 논리적 엔티티를 나타내는 경우예요. 병합 가능한 중복은 무시하고 Vault가 강제 병합하게 두면 기본 identity 매칭 동작을 세우고 강제할 수 있어요.
  • 병합 불가능한 중복 — 대소문자 차이가 의도적이고 소스 identity 공급자가 대소문자를 사용해 서로 다른 엔티티를 구분하려는 경우예요. 예를 들어 Alicealice는 서로 다른 권한 집합을 가진 서로 다른 사람에 해당하는 서로 다른 엔티티예요. 중복 제거 플래그를 활성화하기 전에 병합 불가능한 중복을 반드시 해결해야 해요.

사례 1: 병합 가능한 중복 해결(Resolving mergeable duplicates)

force-identity-deduplication 플래그로 강제된 identity 중복 제거를 활성화하면 Vault가 중복을 강제 병합해요. Vault는 중복에 연결된 정책도 병합하므로 최종 항목은 중복에 부여된 모든 권한의 합집합을 갖게 돼요.

중복 제거를 활성화하기 전에 로그 줄의 force_deduplication 라벨을 검토해 예상 병합 동작을 확인하는 것을 권장해요.

  1. 확인된 중복이 모두 병합 가능한지 확인한다.
  2. 통합 정책이 부여하는 권한이 identity에 적절한지 확인한다.

중복 제거 후에도 사용자는 사용자 이름의 어떤 대소문자 조합으로도 계속 로그인할 수 있지만, 그 로그인은 예상된 기본 Vault 동작에 따라 같은 정책으로 게이트된 단일 엔티티에 매핑돼요.

사례 2: 병합 불가능한 중복 해결(Resolving unmergeable duplicates)

경고: Vault가 지원하는 보안 모델을 복원하려면 가능한 한 빨리 중복을 해결하고 대소문자 구분 사용자 이름에서 벗어나는 것을 강력히 권장해요.

Vault는 대소문자 구분 이름을 공식적으로 지원하지 않아요. 상당한 보안 위험이 따르기 때문이에요. 그리고 해결되지 않은 중복은 관련 엔티티나 그룹을 삭제할 때 같은 저장소의 무관한 변경으로 인해 언제든지 병합될 수 있어요.

별칭 이름의 different-case 변형이 외부 시스템에서 실제로 다른 논리적 사용자나 엔티티를 나타낸다면, 중복을 해결하기 전에 각 별칭을 조사해요. 강제된 identity 중복 제거를 활성화하기 전에 각 마운트의 중복을 반드시 해결해야 해요.

중복 별칭을 유지해야 한다고 확인했다면, 대소문자 구분 별칭 생성을 멈추도록 authN 마운트 또는 외부 서비스를 재구성해야 해요. 예를 들어 authN 플러그인이 허용한다면, 플러그인 구성을 업데이트해 비슷한 사용자 이름을 구분하기 위해 별칭 이름에 고유 ID를 덧붙일 수 있어요.

병합 불가능한 중복을 어떻게 해결하든, 변경을 롤아웃할 때 수정된 동작이 사용자를 어떻게 방해할 수 있는지 염두에 두세요.

참고: 마운트나 외부 서비스 동작을 바꿔야 하는 특정 통합 사례를 우리는 알지 못하며, 그런 상황은 드물 것으로 예상해요. 배포에 authN 마운트나 외부 서비스 변경이 필요하다고 판단되면, Vault Enterprise 고객은 HashiCorp 지원팀과 협력해 최선의 전략과 구현을 정하길 권장합니다.

중복 별칭이 필요 없다고 확인할 수 있다면(또는 authN 마운트 전체가), 각 마운트에서 로그 줄에 id=로 표시된 ID를 사용해 엔티티 별칭을 하나만 남기고 모두 삭제해요.

vault delete/identity/entity-alias/id/{id} 경로를 사용해 중복 identity를 삭제해요.

$ vault delete /identity/entity-alias/id/<id>

예를 들어 중복 엔티티 로그 항목 중 하나에 id=df3568a4-3b65-4104-9481-1129ecbed72f가 포함된 경우:

$ vault delete /identity/entity-alias/id/df3568a4-3b65-4104-9481-1129ecbed72f
Success! Data deleted (if it existed) at: identity/entity-alias/id/df3568a4-3b65-4104-9481-1129ecbed72f

/identity/entity-alias/id/{id} 엔드포인트를 호출해 중복 항목을 삭제해요.

$ curl                                      \
   --request DELETE                         \
   --header "X-Vault-Token: ${VAULT_TOKEN}" \
   ${VAULT_ADDR}/v1/identity/entity-alias/id/<id>

예:

$ curl                                      \
   --request DELETE                         \
   --header "X-Vault-Token: ${VAULT_TOKEN}" \
   ${VAULT_ADDR}/v1/identity/entity-alias/id/df3568a4-3b65-4104-9481-1129ecbed72f | jq

중복을 삭제하거나 관련 서비스를 재구성해 해결한 뒤:

  1. 노드가 standby면 노드를 수동으로 다시 시작해요.
  2. 현재 노드의 시스템 로그를 다시 확인해 언실 중 로그에 중복이 더 이상 나타나지 않는지 확인해요.

다음 단계(Next steps)

남은 중복을 안전하게 강제 병합할 수 있다고 확인하면 강제된 identity 중복 제거를 활성화할 수 있어요.

더 알아보기 (Learn more)

  • identity 중복 제거 개요와 단계별 절차를 살펴보세요.
  • 엔티티·그룹 중복 수정 방법을 확인해 보세요.