Sentinel로 ACL 정책 적용
Sentinel로 ACL 정책 적용
Consul 배포에서 Sentinel을 사용하여 ACL 정책을 적용하는 방법을 설명해 드릴게요. Sentinel 정책은 정적 "read", "write", "deny" 정책을 넘어 완전한 조건부 로직과 외부 시스템 통합을 지원하도록 ACL 시스템을 확장해요.
출처: 문서
본문
엔터프라이즈
이 기능은 Consul Enterprise가 필요해요.
이 페이지는 Consul 배포에서 ACL 정책을 적용하기 위해 Sentinel을 사용하는 방법을 설명해요. Sentinel 정책은 정적 "read", "write", "deny" 정책을 넘어 완전한 조건부 로직과 외부 시스템 통합을 지원하도록 Consul의 ACL 시스템을 확장하는 데 도움을 줘요.
Consul의 Sentinel
Sentinel 정책은 KV 저장소에 대한 쓰기 중에 적용돼요.
Consul KV에 대한 ACL 정책 정의에 코드와 적용 수준을 지정하는 선택적 sentinel 필드를 추가할 수 있어요. 다음 정책은 KV 업데이트 중에 기록되는 값이 "dc1"로 끝나야 함을 보장해요.
KV 업데이트 중 기록되는 값이 'dc1'로 끝나도록 보장
key "datacenter_name" {
policy = "write"
sentinel {
code = <<EOF
import "strings"
main = rule { strings.has_suffix(value, "dc1") }
EOF
enforcementlevel = "soft-mandatory"
}
}
enforcementlevel 속성을 설정하지 않으면 기본값은 "hard-mandatory"예요.
가져오기 (Imports)
Consul은 Sentinel에서 http를 제외한 모든 표준 가져오기를 가져와요. 이 가져오기의 모든 함수는 정책에서 사용할 수 있어요.
주입된 변수
Consul은 일부 컨텍스트를 변수로 Sentinel에 전달하며, 이는 작성하는 모든 정책 내에서 사용할 수 있어요.
KV 저장소 쓰기 중 주입되는 변수
| Variable Name | Type | Description |
|---|---|---|
key |
string |
기록되는 키 |
value |
string |
기록되는 값 |
flags |
uint64 |
플래그 |
Sentinel 예시
다음은 Sentinel 규칙이 있는 ACL 정책의 두 가지 예시예요.
필수 키 접미사
'dc1' 키 아래 저장된 값은 'dev'로 끝나야 함
key "dc1" {
policy = "write"
sentinel {
code = <<EOF
import "strings"
main = rule { strings.has_suffix(value, "dev") }
EOF
}
}
제한된 업데이트 시간
'haproxy_version' 키는 업무 시간에만 업데이트될 수 있음
key "haproxy_version" {
policy = "write"
sentinel {
code = <<EOF
import "time"
main = rule { time.now.hour > 8 and time.now.hour < 17 }
EOF
}
}