Vault 역할과 AD FS 클레임 발급 정책 간 매핑 오류 트러블슈팅

Vault 역할과 AD FS 클레임 발급 정책 간 매핑 오류 트러블슈팅

디버깅 데이터가 Vault 역할과 AD FS 클레임 발급 정책(Claim Issuance Policy) 사이에 잘못되었거나 존재하지 않는 매핑이 있음을 시사하는 문제를 해결해 봐요.

출처: 문서

본문

디버깅 데이터 예시

[DEBUG] auth.saml.auth_saml_1d2227e7: validating user context for role: api=callback role_name=default-saml
role="{
  "token_bound_cidrs":null,
  "token_explicit_max_ttl":0,
  "token_max_ttl":0,
  "token_no_default_policy":false,
  "token_num_uses":0,
  "token_period":0,
  "token_policies":["default"],
  "token_type":0,
  "token_ttl":0,
  "BoundSubjects":["*@example.com","*@ext.example.com"],
  "BoundSubjectsType":"glob",
  "BoundAttributes":{"http://schemas.xmlsoap.org/claims/Group":["VaultAdmin","VaultUser"]},
  "BoundAttributesType":"string",
  "GroupsAttribute":"groups"
  }"
user context="{
  "attributes":
  {
    "http://schemas.xmlsoap.org/claims/Group":["Domain Users","VaultAdmin"],
    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress":["[email protected]"]
  },
  "subject":"[email protected]"
}"

분석

vault read를 사용해 현재 역할 구성을 확인하세요.

$ vault read auth/<SAML_PLUGIN_PATH>/role/<ADFS_ROLE>

Key                        Value
---                        -----
bound_attributes           map[http://schemas.xmlsoap.org/claims/Group:[VaultAdmin VaultUser]]
bound_attributes_type      string
bound_subjects             [*@example.com *@ext.example.com]
bound_subjects_type        glob
groups_attribute           groups
token_bound_cidrs          []
token_explicit_max_ttl     0s
token_max_ttl              0s
token_no_default_policy    false
token_num_uses             0
token_period               0s
token_policies             [default]
token_ttl                  0s
token_type                 default

Vault 역할은 그룹 속성으로 groups를 사용하므로, Vault는 SAML 응답의 사용자 컨텍스트에 다음과 같은 형태의 groups 속성이 포함되기를 기대해요.

user context="{
  "attributes":
  {
    "groups":["<LIST_OF_BOUND_GROUPS>"],
    ...
  }
}"

하지만 SAML 응답은 클레임 발급 정책이 그룹 속성으로 Group을 사용함을 나타내므로, 사용자 컨텍스트는 바인딩된 그룹을 Group 키로 사용해요.

user context="{
  "attributes":
  {
    "http://schemas.xmlsoap.org/claims/Group":["Domain Users","VaultAdmin"],
    ...
  },
  "subject":"[email protected]"
}"

해결 방법

문제를 해결하는 첫 번째 방법은 Vault 역할의 group_attributeGroup으로 업데이트하는 거예요.

$ vault write auth/<SAML_PLUGIN_PATH>/role/<ADFS_ROLE> \
    groups_attribute=http://schemas.xmlsoap.org/claims/Group

예를 들면:

$ vault write auth/saml/role/adfs-default \
    groups_attribute=http://schemas.xmlsoap.org/claims/Group

문제를 해결하는 두 번째 방법은 AD FS 구성을 groups를 사용하도록 업데이트하고 Vault의 바인딩 속성이 기대하는 그룹과 일치하는지 확인하는 거예요.

  • AD FS의 클레임 발급 정책을 정규화되지 않은 이름에 groups를 사용하도록 업데이트하세요. LDAP 속성: Token-Groups - Unqualified Names, 나가는 클레임 유형: groups
  • Vault 역할의 바인딩 속성이 SAML 응답에 나열된 그룹과 일치하는지 확인하세요. 예를 들면:
$ vault write auth/<SAML_PLUGIN_PATH>/role/<ADFS_ROLE> \
    bound_attributes=groups="<AD_GROUP_LIST>"
$ vault write auth/saml/role/default-adfs \
    bound_attributes=groups="VaultAdmin,VaultUser"

더 알아보기 (Learn more)

  • SAML 인증 메서드 문서
  • SAML API 문서
  • AD FS 랩 환경 구축하기