콘텐츠로 이동

콘솔, CLI, 접근 권한

콘솔과 CLI는 같은 JSON API(레퍼런스)를 사용하므로 인증, 역할, 감사 로그를 공유합니다.

역할

역할 할 수 있는 일
viewer 대상, 백업, 차이 비교, 변경 요약, 복원, 샌드박스 조회.
operator + 지금 백업, 지금 검증, 일시 중지와 재개, 샌드박스로 복원, 샌드박스 쿼리와 관리, 감사 로그 읽기.
restorer + 새 데이터베이스나 다운로드로 복원.
restorer-admin + 제자리 복원, 백업 고정과 고정 해제.

역할은 차트에서 이메일과 Cloudflare Access 그룹으로 매핑합니다.

auth:
  provider: cloudflare-access
  roles:
    viewer: ["*@example.com"]
    operator: ["group:sre"]
    restorer: [alice@example.com]
    restorer-admin: [bob@example.com]
  scopes:                               # optional: limit someone to some orgs or projects
    contractor@example.com: { orgs: [acme] }

Tenax는 모든 요청에서 Cf-Access-Jwt-Assertion JWT(팀 도메인과 audience)를 검증하므로, 터널을 우회한 요청은 거부됩니다. Tenax가 콘솔을 게시하면(아래 참고) 팀 도메인과 audience를 스스로 찾습니다. 직접 관리하는 Access 애플리케이션이라면 auth.cloudflareAccess.teamDomain과 audience를 설정하세요. auth.provider: none(로컬 개발 전용)이면 모든 요청이 auth.devRole을 받습니다.

콘솔에 접근하기

접근 방법은 두 가지이며, 함께 사용할 수 있습니다.

  • 클러스터 접근 권한이 없는 사람: 로그인 뒤의 공개 주소. 호스트 이름을 설정하면 Tenax가 Cloudflare 터널을 통해 그곳에 콘솔을 게시합니다. 샌드박스 경로와 같은 사람들(expose.cloudflare.allowEmails / allowGroups)을 들여보내는 Access 애플리케이션, DNS 레코드, tenax-api로 가는 경로가 만들어집니다. 사용자는 브라우저에서 https://tenax.example.com을 열거나 tenax login --server https://tenax.example.com을 한 번 실행한 뒤 이메일로 로그인하며, kubeconfig는 전혀 필요하지 않습니다. 역할은 auth.roles에서 정해집니다.

    auth:
      provider: cloudflare-access
      roles: { viewer: ["*@example.com"], restorer: [alice@example.com] }
    expose:
      provider: cloudflare
      cloudflare: { zone: example.com, apiTokenSecret: tenax-cloudflare-api, allowEmails: ["*@example.com"] }
      cloudflared: { enabled: true, consoleHostname: tenax.example.com }
    

    컨트롤러는 경로를 유지하고, 애플리케이션의 팀 도메인과 audience를 tenax-api가 읽는 Secret tenax-console-access에 저장합니다. 이 Secret이 생기기 전까지 콘솔은 "console login not ready"로 응답합니다. 팀 도메인을 읽으려면 API 토큰에 Access: Organizations, Identity Providers, and Groups: Read 권한이 필요합니다. 이 권한이 없으면 Tenax는 콘솔의 로그인 리디렉션에서 이를 읽으며, auth.cloudflareAccess.teamDomain을 설정해도 됩니다.

  • 클러스터 접근 권한이 있는 사람: tenax console. kubeconfig를 통해 로컬 포트를 콘솔로 포워딩하고 브라우저에서 엽니다. Ctrl+C를 누를 때까지 계속 실행되며, 다른 터미널에서는 export TENAX_SERVER=http://127.0.0.1:8080으로 다른 명령어가 이를 사용합니다. auth.provider: cloudflare-access인 경우 이 포워딩에는 Access 로그인이 필요 없습니다. tenax-api가 파드 내부의 127.0.0.1에서만 제공하는 포트에 연결되며, 그 포트는 kubectl port-forward로만 접근할 수 있으므로 누가 들어올지는 Kubernetes RBAC(Tenax 네임스페이스의 pods/portforward)가 결정합니다. 역할은 auth.portForwardRole입니다(기본값 restorer-admin, 비워 두면 포트가 꺼짐).

CLI

설치와 연결: CLI 설치. 모든 명령어: CLI 레퍼런스.

감사 로그

모든 쓰기(지금 백업, 복원, 고정, 샌드박스 변경)와 모든 쿼리는 사용자, 역할, 대상, 결과, 출발지 주소와 함께 tenax-api의 구조화된 로그와 콘솔의 감사 페이지에 기록됩니다.