액세스 모니터링 규칙 참조
액세스 모니터링 규칙을 통해 관리자는 액세스 요청을 모니터링하고 특정 조건에 따라 알림 라우팅 규칙이나 자동 검토 규칙을 적용할 수 있습니다. 액세스 모니터링 규칙은 알림 라우팅 규칙과 자동 검토 규칙을 모두 구성하거나 하나만 포함할 수 있습니다.
액세스 모니터링 규칙을 통해 관리자는 액세스 요청을 모니터링하고 특정 조건에 따라 알림 라우팅 규칙이나 자동 검토 규칙을 적용할 수 있습니다.
액세스 모니터링 규칙은 알림 라우팅 규칙과 자동 검토 규칙을 모두 구성하거나 하나만 포함할 수 있습니다.
YAML 사양#
액세스 모니터링 규칙은 다음과 유사한 구조를 가진 동적 Teleport 리소스입니다:
kind: access_monitoring_rule
version: v1
metadata:
name: example_rule
spec:
# subjects는 모니터링할 주제의 종류를 지정합니다.
# 가능한 값: "access_request"
subjects:
- access_request
# condition은 액세스 모니터링 규칙을 적용하기 위해 충족해야 하는 조건을 지정합니다.
# 조건은 부울 값으로 평가되어야 하는 술어 표현식을 수락합니다.
#
# 이 조건은 다음 경우에 충족됩니다:
# - `access` 역할이 요청됨
# - 요청된 모든 리소스에 레이블 `env: dev`가 있음
# - 요청한 사용자에게 `team: dev` 사용자 특성이 있음.
condition: |-
contains_all(set("access"), access_request.spec.roles) &&
access_request.spec.resource_labels_intersection["env"].contains("dev") &&
contains_any(user.traits["team"], set("dev"))
# 선택 사항: desired_state는 규칙이 적용된 후 액세스 요청의 원하는 조정 상태를 지정합니다.
# 자동 검토를 활성화하려면 이 필드를 "reviewed"로 설정해야 합니다.
# 가능한 값: "reviewed".
desired_state: reviewed
# 선택 사항: automatic_review는 자동 검토 규칙을 구성합니다.
automatic_review:
# integration은 요청하는 사용자가 규칙 조건을 충족하는지 결정하는 데 도움이 되는
# 외부 통합 소스의 이름을 지정합니다.
# 외부 통합 없이 지정하려면 "builtin"을 사용합니다.
# 가능한 값: "builtin"
integration: builtin
# decision은 액세스 요청을 자동으로 승인 또는 거부할지 결정합니다.
# 가능한 값: "APPROVED" 또는 "DENIED"
decision: APPROVED
# 선택 사항: notification은 알림 라우팅 규칙을 구성합니다.
notification:
# name은 알림을 라우팅해야 하는 외부 통합을 지정합니다.
# 가능한 값: "email", "discord", "slack", "pagerduty", "jira",
# "mattermost", "msteams", "opsgenie", "servicenow", "datadog"
name: email
# recipients는 액세스 모니터링 규칙이 적용될 때 알림을 받을 수신자 목록을 지정합니다.
recipients:
- example@goteleport.com
# 선택 사항: schedules는 이 규칙에 적용할 명명된 일정의 맵을 정의합니다.
schedules:
demo-schedule:
time:
# timezone은 일정의 시간대를 지정합니다. 이 필드는 선택 사항이며
# 기본값은 "UTC"입니다. 허용되는 값은 IANA 시간대 데이터베이스에 정의된
# 시간대 식별자를 따릅니다. 예: "America/Los_Angeles", "Europe/Lisbon",
# "Asia/Singapore".
#
# 지원되는 값 목록은 https://data.iana.org/time-zones/tzdb/zone1970.tab를 참조하세요.
timezone: America/Los_Angeles
# shifts는 일정을 구성하는 시간 블록 목록입니다.
# 각 교대는 요일, 시작 시간, 종료 시간을 지정합니다.
# 시작 및 종료 시간은 포함됩니다.
shifts:
- weekday: Friday
start: 17:00
end: 23:59
- weekday: Saturday
start: 00:00
end: 23:59
알림 라우팅 규칙#
관리자는 액세스 모니터링 규칙을 사용하여 외부 알림 시스템으로 알림을 라우팅할 수 있습니다.
호스팅된 통합#
사용 가능한 호스팅된 통합의 이름을 나열하려면 다음 명령을 사용할 수 있습니다:
$ tctl get plugins
Name Status
------------- -----------
datadog RUNNING
email RUNNING
slack-default RUNNING
통합이 나열되지 않으면 먼저 플러그인을 등록하세요. 플러그인 등록 방법에 대한 단계별 가이드는 액세스 요청 플러그인을 참조하세요.
수신자#
recipients 필드의 허용 값은 선택한 알림 시스템에 따라 다릅니다.
| 알림 시스템 | 수신자 |
|---|---|
| Datadog | 이메일: user@example.com팀: example-datadog-team |
| Discord | 채널 ID: ...1234 |
이메일: user@example.com |
|
| Jira | - |
| Mattermost | 이메일: user@example.com팀/채널: example-team/example-channel |
| Microsoft Teams | 이메일: user@example.com채널: https://teams.microsoft.com/l/channel/... |
| Opsgenie | 일정: example-schedule |
| PagerDuty | 서비스: example-service |
| ServiceNow | 일정 ID: example-schedule-id |
| Slack | 이메일: user@example.com채널: example-channel |
알림 라우팅 규칙 예시#
다음 규칙이 구성된 경우 access 역할에 대한 액세스 요청이 생성될 때마다 #teleport-access Slack 채널로 알림이 전송됩니다.
kind: access_monitoring_rule
version: v1
metadata:
name: slack-notifications
spec:
subjects:
- access_request
condition: contains_any(access_request.spec.roles, set("access"))
notification:
name: slack-default
recipients:
- teleport-access
자동 검토 규칙#
관리자는 조건이 충족될 때 액세스 요청을 자동으로 검토하도록 액세스 모니터링 규칙을 구성할 수 있습니다.
자동 검토를 활성화하려면 spec.desired_state를 reviewed로 설정하고 automatic_review를 정의합니다.
검토 결정#
automatic_review.decision 옵션은 APPROVED 또는 DENIED일 수 있습니다.
자동 검토는 일반 검토처럼 작동합니다. 요청 상태를 직접 변경하지 않으며 필요한 검토 임계값을 준수합니다.
여러 자동 검토 규칙이 액세스 요청과 일치하면 DENIED 규칙이 우선합니다.
자동 검토 규칙 예시#
다음 규칙이 구성된 경우 team: sre 특성을 가진 사용자가 access 역할에 대한 액세스 요청을 생성할 때마다 자동으로 승인됩니다.
kind: access_monitoring_rule
version: v1
metadata:
name: sre-automatic-approval
spec:
subjects:
- access_request
condition: |-
contains_all(set("access"), access_request.spec.roles) &&
contains_any(user.traits["team"], set("sre"))
desired_state: reviewed
automatic_review:
integration: builtin
decision: APPROVED
리소스에 대한 자동 검토 규칙 예시#
다음 규칙이 구성된 경우 access 역할과 env: dev 레이블이 있는 리소스에 대한 액세스 요청은 자동으로 승인됩니다.
kind: access_monitoring_rule
version: v1
metadata:
name: env-dev-approval
spec:
subjects:
- access_request
condition: |-
contains_all(set("access"), access_request.spec.roles) &&
access_request.spec.resource_labels_intersection["env"].contains("dev")
desired_state: reviewed
automatic_review:
integration: builtin
decision: APPROVED
예약된 자동 검토 규칙 예시#
다음 규칙이 구성된 경우 access 역할과 env: dev 레이블이 있는 리소스에 대한 액세스 요청은 일요일(UTC 시간)에 자동으로 승인됩니다.
kind: access_monitoring_rule
version: v1
metadata:
name: env-dev-approval
spec:
subjects:
- access_request
condition: |-
contains_all(set("access"), access_request.spec.roles) &&
access_request.spec.resource_labels_intersection["env"].contains("dev")
desired_state: reviewed
automatic_review:
integration: builtin
decision: APPROVED
schedules:
dev-on-call:
time:
timezone: UTC
shifts:
- weekday: Sunday
start: 00:00
end: 23:59
와일드카드 또는 정규 표현식이 있는 자동 검토 규칙 예시#
다음 규칙이 구성된 경우 "on-call" 구문이 포함된 요청 이유로 access 역할에 대한 액세스 요청은 자동으로 승인됩니다.
kind: access_monitoring_rule
version: v1
metadata:
name: on-call-automatic-approval
spec:
subjects:
- access_request
condition: |-
regexp.match(set(access_request.spec.request_reason), "*on-call*")
desired_state: reviewed
automatic_review:
integration: builtin
decision: APPROVED
조건#
condition 필드는 부울 값으로 평가되고 규칙이 적용되는 액세스 요청을 결정하는 술어 표현식입니다.
조건 술어 표현식에서 허용되는 필드:
| 필드 | 설명 |
|---|---|
| access_request.spec.roles | 요청된 역할 집합. |
| access_request.spec.suggested_reviewers | 요청에 지정된 검토자 집합. |
| access_request.spec.system_annotations | 요청의 시스템 어노테이션 맵. |
| access_request.spec.user | 요청하는 사용자. |
| access_request.spec.request_reason | 요청 이유. |
| access_request.spec.creation_time | 요청 생성 시간. |
| access_request.spec.expiry | 요청의 만료 시간. |
| access_request.spec.resource_labels_intersection | 요청된 모든 리소스 레이블의 교집합을 포함하는 맵. |
| access_request.spec.resource_labels_union | 요청된 모든 리소스 레이블의 합집합을 포함하는 맵. |
| user.traits | 요청하는 사용자의 특성 맵. |
예시:
# 요청에 하나 이상의 역할이 포함된 경우 적용됩니다.
condition: !is_empty(access_request.spec.roles)
# "example_user"가 생성한 경우 적용됩니다.
condition: access_request.spec.user == "example_user"
# "example_role" 역할이 요청된 경우 적용됩니다.
condition: access_request.spec.roles.contains("example_role")
# 요청된 모든 역할이 "role_1" 또는 "role_2"인 경우 적용됩니다.
condition: set("role_1", "role_2").contains_all(access_request.spec.roles)
# 사용자에게 특성 "team: dev" 또는 "team: stage"가 있는 경우 적용됩니다.
condition: contains_any(user.traits["team"], set("dev", "stage"))
# 요청된 모든 리소스에 `env: dev` 레이블이 있는 경우 적용됩니다.
condition: access_request.spec.resource_labels_intersection["env"].contains("dev")
# 요청된 리소스 중 하나에 `env: prod` 레이블이 있는 경우 적용됩니다.
condition: access_request.spec.resource_labels_union["env"].contains("prod")
# 요청 이유에 "on-call" 구문이 포함된 경우 적용됩니다.
condition: regexp.match(set(access_request.spec.request_reason), "*on-call*")
자세한 내용은 술어 언어를 참조하세요.
SSO 사용자 및 IdP 속성#
액세스 모니터링 규칙은 IdP에서 제공하는 속성을 사용하는 SSO 사용자와 함께 사용할 수 있습니다.
예를 들어 다음 GitHub SSO 구성이 사용되면 example-team 팀의 GitHub 사용자는 github_teams: example-team 특성을 가진 Teleport 사용자로 매핑됩니다.
# github.yaml
kind: github
version: v3
metadata:
name: github
spec:
teams_to_roles:
- organization: example-org
roles:
- demo-access-request
team: example-team
...
이제 github_teams 특성을 기반으로 자동 검토를 적용하는 액세스 모니터링 규칙을 생성할 수 있습니다:
kind: access_monitoring_rule
version: v1
metadata:
name: dev-automatic-approval
spec:
subjects:
- access_request
condition: |-
contains_all(set("access"), access_request.spec.roles) &&
contains_any(user.traits["github_teams"], set("example-team"))
desired_state: reviewed
automatic_review:
integration: builtin
decision: APPROVED
특성 매핑은 SSO 공급자에 따라 다릅니다. 구성 지침은 단일 로그인 구성을 참조하세요.
인프라스트럭처 코드를 사용한 액세스 모니터링 규칙#
액세스 모니터링 규칙은 Terraform을 사용하여 인프라스트럭처 코드로 관리할 수 있습니다. 다음은 리소스 정의 예시입니다:
resource "teleport_access_monitoring_rule" "example_rule" {
version = "v1"
metadata = {
name = "example_rule"
}
spec = {
subjects = ["access_request"]
condition = "access_request.spec.roles.contains(\"example-role\")"
desired_state = "reviewed"
notification = {
name = "slack"
recipients = ["example-channel"]
}
automatic_review = {
integration = "builtin"
decision = "APPROVED"
}
}
}
자세한 내용은 Terraform 공급자를 참조하세요.
