Sentinel로 Vault 정책 관리하기
Sentinel로 Vault 정책 관리하기
Vault Enterprise는 HashiCorp Sentinel을 통합해 풍부한 접근 제어 기능을 제공합니다. Vault는 고위험 시크릿과 자산을 신뢰받는 보안 중심 제품이고 기본 거부(default-deny) 입장을 취하므로, Vault와의 통합은 심층 방어(defense-in-depth) 방식으로 구현됩니다. 이는 여러 유형의 정책과 고정된 평가 순서의 형태를 취합니다.
출처: 문서
본문
정책 유형 (Policy types)
Vault의 정책 시스템은 세 가지 유형의 정책을 지원하도록 확장되었습니다.
- ACL: 기존의 Vault 정책이며 변경되지 않았습니다.
- RGP (Role Governing Policies): 특정 토큰, ID 엔티티, 또는 ID 그룹에 연결된 Sentinel 정책입니다. Vault의 다양한 측면에 걸쳐 풍부한 제어 집합에 접근할 수 있습니다.
- EGP (Endpoint Governing Policies): 토큰 대신 특정 경로에 연결된 Sentinel 정책입니다. 가능한 한 많은 요청 정보에 접근할 수 있지만, 로그인 경로 같은 인증되지 않은 경로에서도 효력을 발휘할 수 있습니다.
모든 비인증 경로가 EGP를 지원하는 것은 아닙니다. 예를 들어 루트 토큰 생성과 관련된 경로는 EGP를 지원할 수 없습니다. 잘못 구성된 EGP로 인해 모든 클라이언트가 Vault에서 잠겨도 이미 최후의 수단 메커니즘이기 때문입니다.
ACL과 마찬가지로 루트 토큰은 Sentinel 정책 검사 대상이 아닙니다.
Sentinel 실행은 일반 ACL 정책 검사보다 상당히 느리다고 간주해야 합니다. 고성능이 필요하면 Sentinel 정책 도입 시 적절히 테스트를 수행해야 합니다.
정책 시행 수준 (Policy enforcement levels)
Sentinel 정책에는 선택할 수 있는 세 가지 시행 수준이 있습니다.
| 수준 | 설명 |
|---|---|
| advisory | 정책이 실패하도록 허용됨. 새 사용자를 교육하는 도구로 사용할 수 있음. |
| soft-mandatory | 재정의(override)가 지정되지 않는 한 정책은 통과해야 함. |
| hard-mandatory | 정책은 통과해야 함. |
정책 평가 (Policy evaluation)
Vault는 들어오는 요청을 적용 가능한 모든 유형의 정책에 대해 평가합니다.
- 요청이 인증되지 않았으면 EGP 평가로 건너뜁니다. 그렇지 않으면 토큰의 ACL 정책을 평가합니다. 이들은 접근을 부여해야 합니다. 항상 그렇듯 ACL 정책으로 경로에 기능(capability)이 부여되지 않으면 요청이 거부됩니다.
- 클라이언트 토큰에 연결된 RGP를 평가합니다. 모든 정책은 시행 수준에 따라 통과해야 합니다.
- 요청된 경로에 설정된 EGP와 덜 구체적인 경로에 설정된 접두사 일치 EGP를 평가합니다. 모든 정책은 시행 수준에 따라 통과해야 합니다.
이 단계 중 어느 하나라도 실패하면 요청이 거부됩니다.
RGP와 네임스페이스
정책, 인증 메서드, 시크릿 엔진, 토큰은 생성된 네임스페이스에 고정됩니다. 그러나 ID 그룹은 다른 네임스페이스의 엔티티와 그룹을 끌어올 수 있습니다.
팁: 단계별 지침은 Secure Multi-Tenancy with Namespaces 튜토리얼의 Set up entities and groups 섹션을 참고하세요.
경고: 다음 버전부터 Vault는 하위 네임스페이스의 엔티티에 ID 그룹 구성원에서 파생된 RGP만 적용합니다:
- 1.15.0+
- 1.14.4+
- 1.13.8+
아래 시나리오는 관련 변경사항을 더 자세히 설명합니다.
버전 1.15.0, 1.14.4, 1.13.8 이상
training 네임스페이스는 education 네임스페이스의 하위 네임스페이스입니다. training 네임스페이스에서 생성된 "Sun Shine" 엔티티는 education 네임스페이스에 정의된 "Tester" 그룹의 구성원입니다. 그룹 구성원은 그룹 수준 정책을 상속합니다.
버전 1.15.0-rc1, 1.14.3, 1.13.7 이하
training 네임스페이스는 education 네임스페이스의 하위 네임스페이스입니다. education 네임스페이스에서 생성된 "Sun Shine" 엔티티는 training 네임스페이스에 정의된 "Tester" 그룹의 구성원입니다. 그룹 구성원은 그룹 수준 정책을 상속합니다.
ACL 정책과 EGP는 특정 경로에 규칙을 설정하지만, RGP는 대상 경로를 지정하지 않습니다. RGP는 토큰, ID 엔티티, 또는 ID 그룹에 연결되므로 경로를 지정하지 않고 규칙을 작성할 수 있습니다.
training 네임스페이스의 deny-all RGP가 다음과 같다고 가정해보세요.
deny-all.sentinel:
precond = rule {
identity.entity.metadata.org_id is "A012345X"
}
main = rule when precond {
false
}
Vault는 요청 토큰의 엔티티 메타데이터를 확인합니다. org_id 메타데이터가 존재하고 값이 A012345X이면 시행 수준이 hard-mandatory이므로 요청이 거부됩니다. deny-all RGP에는 경로가 연결되어 있지 않으므로 요청이 /education 또는 /education/training, 심지어 /foo로 시작하는 경로를 호출하는지는 중요하지 않습니다.
정책 재정의 (Policy overriding)
Vault는 일반적인 Sentinel 재정의 동작을 지원합니다. 재정의 요청은 명령줄의 policy-override 플래그로, 또는 HTTP 요청에서 X-Vault-Policy-Override 헤더를 true로 설정해 지정할 수 있습니다.
재정의 요청은 Vault의 감사 로그에 표시됩니다. 또한 재정의 요청과 그 최종 상태(결국 필요했는지 여부)는 Vault 서버 로그에 경고로 기록됩니다.
MFA
Sentinel 정책은 Vault Enterprise의 ID 기반 MFA 시스템을 지원합니다. 단일 요청 내에서 이름 있는 MFA 메서드에 대한 여러 검사는, ACL, RGP, EGP 중 무엇으로 유효성을 검사하든 그 메서드에 대해 인증 동작을 한 번만 트리거합니다.
EGP를 사용해 로그인 경로 같은 원래 인증되지 않은 경로에 MFA를 요구할 수 있습니다. 그러한 경로에서 요청 데이터는 MFA에 사용할 적절한 Identity 정보를 발견하려고 선행 검색(lookahead)을 수행합니다. 엔드포인트가 원래 요청만으로 얻을 수 있는 것보다 MFA에 더 많은 정보가 필요하면 Identity 항목을 미리 채우거나 요청과 함께 추가 매개변수를 제공해야 할 수 있습니다.
Using Sentinel
구성 (Configuration)
Sentinel 정책은 sys/policies/rgp/ 및 sys/policies/egp/ 엔드포인트를 통해 구성할 수 있습니다. 자세한 내용은 문서를 참고하세요.
일단 설정되면 RGP는 ACL 정책처럼 ID 엔티티·그룹이나 토큰에 할당할 수 있습니다. 그 결과 ACL 정책과 이름을 공유할 수 없습니다.
EGP를 설정할 때 해당 EGP가 효력을 발휘해야 하는 경로 목록을 제공해야 합니다. 엔드포인트에는 여러 개의 개별 EGP를 설정할 수 있으며, 각 요청에 대해 모두 평가됩니다. 경로는 경로의 마지막 문자로 glob 문자(*)를 사용해 접두사 일치를 수행할 수 있습니다. *만으로 구성된 경로는 API의 루트에 적용됩니다. 요청은 요청된 경로와 정확히 일치하는 EGP와 요청 경로 더 위에 있는 glob EGP 모두의 대상이 되므로, 경로가 *인 EGP는 모든 요청에 효력을 발휘합니다.
속성과 예시
작동 중인 Sentinel 예시는 Examples 페이지를, 상세 속성 문서는 Properties 페이지를 참고하세요.
튜토리얼
Vault에서 Sentinel 정책을 작성하는 방법은 Sentinel Policies 튜토리얼을 참고하세요.