Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

개발 환경의 자동 승인 범위 설정

개발이나 스테이징 환경의 승인 요건은 CEL 정책으로 조정합니다. Apollo에는 환경의 모든 변경을 일괄 자동 승인하는 기본 스위치가 없습니다. 관리자는 자동 승인할 변경 유형, 환경과 작성자를 정하고 해당 정책에 조건을 구성해야 합니다.

공간 관리자는 Space Settings에서 정책을 확인합니다. 여러 활성 정책이 같은 변경에 승인자를 요구하면 그 요건을 모두 충족해야 하므로, 자동 승인할 유형에 적용되는 정책들을 함께 검토합니다.

정책 변수에 환경 추가

환경 안의 변경을 처리하는 기본 정책에는 처음에는 비어 있는 autoApproveEnvironments 변수가 있습니다. 해당 정책이 처리하는 변경을 자동 승인할 환경을 이 변수에 추가할 수 있습니다.

변수 편집 화면에서는 Variable type이 Environment, Value shape가 List of values인 환경 목록을 확인할 수 있습니다. Values에서 대상을 선택할 때 환경 ID 등 상세 정보를 확인합니다.

가령 entity-create-policy에 개발 환경을 추가하면 그 정책이 처리하는 새 배포 개체 설치를 자동 승인할 수 있습니다. 구성 변경이나 다른 작업도 자동 승인하려면 각 변경 유형을 처리하는 정책의 변수도 수정해야 합니다.

k8s-namespace-approval-policy와 network-security-approval-policy는 높은 권한을 사용하는 작업을 통제하므로 특히 신중하게 범위를 정해야 합니다. 개발 환경이라는 이유만으로 네임스페이스 삭제나 네트워크 보안 변경까지 같은 승인 조건을 적용하지 않습니다.

레이블로 환경 선택

새 개발 환경을 자주 추가하면 정책마다 환경 목록을 갱신해야 합니다. 같은 레이블을 검사하도록 정책을 구성하면 환경에 레이블을 적용하여 자동 승인 대상을 선택할 수 있습니다.

  1. 가상의 레이블 security/enable-auto-approval을 생성합니다.
  2. Suggested resource types에 environment를 추가합니다.
  3. Accepted values에는 true, false를 지정합니다.
  4. 자동 승인하려는 변경 유형의 각 정책에 환경 레이블 조건을 추가합니다.
  5. 대상 개발 환경에 레이블을 적용합니다.

참조 리소스의 레이블 값은 문자열입니다. 다음 조건은 레이블이 있고 그 값이 문자열 "true"일 때 참입니다.

referencedResources.environment.labels[?"security/enable-auto-approval"].orValue("false") == "true"

[?...]는 키가 없어도 오류 대신 값이 없음을 나타내는 optional 값을 반환합니다. orValue("false")는 값이 없을 때 문자열 "false"를 사용하므로, 레이블이 없는 환경은 이 자동 승인 조건을 통과하지 않습니다.

레이블을 붙이는 것만으로 정책이 바뀌지는 않습니다. 이 조건을 넣은 정책이 처리하는 변경에만 영향을 줍니다.

신뢰할 작성자로 제한

환경만 선택하는 조건은 누가 요청했는지 제한하지 않습니다. 작성자가 대상 환경의 운영자 역할을 가진 경우에만 자동 승인하도록 제한할 수 있습니다.

검사입력
개발 환경 레이블referencedResources.environment.labels
작성자의 환경 역할referencedResources.environment.authorRoles
환경 운영자 역할 IDapollo-environments:operator

다음은 개체 구성 변경에 적용하는 가상의 정책입니다. Apollo 자체 서비스 계정의 기존 자동 승인 처리를 유지하고, 나머지 요청은 개발 환경 레이블과 작성자의 역할을 함께 검사합니다.

type == "UPDATE_ENTITY" ? (
  should_auto_approve_service_user(type, author, onBehalfOf, editors)
    ? approve("신뢰하는 Apollo 서비스 계정의 변경입니다.")
    : (
        "apollo-environments:operator" in referencedResources.environment.authorRoles &&
        referencedResources.environment.labels[?"security/enable-auto-approval"].orValue("false") == "true"
          ? approve("자동 승인을 허용한 환경의 운영자가 작성한 변경입니다.")
          : require_role(
              referencedResources.installation.rid,
              "entity:operator",
              "개체 운영자의 승인이 필요합니다."
            )
      )
) : no_op()

이 정책의 개발 환경 분기는 레이블과 작성자 역할을 모두 요구합니다. 레이블이 없거나 값이 "false"인 경우, 또는 작성자에게 환경 운영자 역할이 없는 경우에는 개체 운영자의 승인을 요구합니다. 다른 변경 유형은 해당 유형의 정책에서 처리합니다.

조직의 운영 방식에 따라 작성자의 팀이나 다른 참조 리소스의 권한을 기준으로 삼을 수도 있습니다. 이 경우 변경 유형별 입력에서 사용할 수 있는 참조를 확인하고, 기존 정책의 검토 요건과 Apollo 자동화 처리 범위를 유지해야 합니다.