Copilot 앱 권한이 Read-only인데, 왜 조직에 비용이 청구될까요

테크
조회 7

밤마다 돌아가는 코드 분석 에이전트가 누군가의 개인 로그인에 기대고 있다면, 그 사람의 계정 상태가 서비스의 문제가 될 수 있어요. GitHub는 10월 27일 Copilot SDK에 조직 설치 GitHub App의 서버 간 인증을 공개 미리보기로 추가했어요. 이제 서비스가 조직에 설치된 앱의 신원으로 Copilot을 호출할 수 있어요. 여기서 눈에 걸리는 표현이 하나 있어요. 필요한 권한은 Read-only인데, 요청은 조직의 AI 크레딧을 써요.

읽기 권한이 무료 호출을 뜻하지는 않아요

새 인증은 사람의 로그인 정보를 빌리는 대신 앱 설치에 묶인 짧은 수명의 토큰을 사용해요. 조직 권한 Copilot Requests를 Read-only로 지정하고 그 조직에 앱을 설치해요. 사용량과 청구는 그 설치를 소유한 조직에 귀속돼요. 권한 이름의 읽기는 저장소를 수정하느냐는 인상과 다르게, 여기서는 비용이 드는 Copilot 요청을 허용하는 의미예요.

직접 제작한 인증 경로 비교예요. 위는 조직 설치 앱의 Copilot Requests: Read-only, 아래는 GitHub Actions의 GITHUB_TOKEN과 copilot-requests: write예요. 실제 제품 화면이나 실행 결과는 아니에요.
직접 제작한 인증 경로 비교예요. 위는 조직 설치 앱의 Copilot Requests: Read-only, 아래는 GitHub Actions의 GITHUB_TOKEN과 copilot-requests: write예요. 실제 제품 화면이나 실행 결과는 아니에요.

예를 들어 가상의 회사에서 야간 분석 앱과 문서 요약 앱을 함께 쓴다고 해 볼게요. 두 앱 모두 Read-only라고 적혀 있어도 조직의 사용량을 만들 수 있어요. 저장소 파일을 바꾸지 않는 작업이라는 사실과 모델 호출이 비용을 만든다는 사실은 함께 성립해요. 이번 변경은 인증의 주인을 사람에서 업무로 옮기지만, 비용을 없애 주지는 않아요.

GitHub Actions와 외부 서버는 입구가 달라요

외부 서버나 다른 CI에서는 앱의 설치 액세스 토큰을 발급해 SDK의 gitHubToken 같은 명시적 옵션에 넣어요. 조직 설치만 이 방식의 대상이에요. 개인 계정 설치나 기업 계정 설치까지 같은 것으로 취급하면 안 돼요. 지난번 다룬 기업 설치의 일반 제공과 이번 Copilot 인증 미리보기는 적용 범위가 달라요.

GitHub Actions의 조직 저장소 워크플로는 내장 GITHUB_TOKEN 경로가 있어요. 이 경로의 YAML에는 copilot-requests: write를 주고 조직의 Allow use of Copilot CLI billed to the organization 정책을 켜야 해요. 반면 조직 설치 앱 인증에는 그 정책이 필요하지 않아요. 앱 화면의 Read-only와 Actions의 write는 서로 다른 인증 경로의 표기이므로 하나를 다른 쪽에 그대로 옮겨 적으면 혼란스러워져요.

한 시간 뒤에도 같은 신원으로 돌아가려면

설치 토큰은 한 시간 뒤 만료돼요. 오래 실행되는 서비스라면 새 토큰을 발급하는 것뿐 아니라 런타임에 전달하는 과정도 필요해요. 공식 SDK 문서는 자식 프로세스의 클라이언트를 새 토큰으로 재시작하고, 프로세스 내 실행이나 기존 런타임은 호스트 런타임을 재시작하도록 안내해요. 토큰 파일만 갈아 놓는 것과 실행 중인 프로세스가 새 값을 쓰는 것은 다른 일이에요.

또 useLoggedInUser: false는 저장된 사용자 인증으로의 자동 탐색을 끄며 환경변수 토큰 탐색도 꺼요. 이 설정을 쓸 때는 토큰을 명시적 SDK 옵션으로 전달해야 해요. 개발자 노트북에서는 성공하고 서버에서는 인증이 없는 것처럼 보인다면, 다른 로그인으로 우연히 통과했는지와 실제 런타임에 전달한 값을 나누어 살펴볼 만해요.

가상 수명 예시예요. 설치 토큰의 1시간 만료 전에 새 토큰을 발급하고 실행 프로세스에도 반영해야 해요. 시간축은 설명용이며 실제 서비스 측정값이 아니에요. 직접 제작.
가상 수명 예시예요. 설치 토큰의 1시간 만료 전에 새 토큰을 발급하고 실행 프로세스에도 반영해야 해요. 시간축은 설명용이며 실제 서비스 측정값이 아니에요. 직접 제작.

앱별로 보이지만, 예산은 조직 단위예요

조직 소유자는 AI 사용량 CSV의 organization과 app_client_id를 보고 앱 사용량을 찾을 수 있어요. 설치 목록 API의 client_id와 맞추면 app_slug로 앱을 식별할 수 있어요. 현재 웹 AI 사용량 화면에 같은 앱 구분이 표시되는 것은 아니에요. 앱별 숫자를 볼 수 있다는 사실이 앱별 예산을 만들 수 있다는 뜻도 아니에요. 예산은 조직 단위이며 알림 전용 예산은 초과 사용을 막지 않아요.

특정 앱을 멈추려면 설치를 일시 중단하거나 제거할 수 있어요. 다만 그 설치의 다른 조직 자원 접근도 함께 막혀요. 조직의 모델 정책과 지출 통제 안에서 어떤 업무가 어느 앱으로 실행되는지 보이게 되는 것이 이번 변화의 실질적인 의미예요. 서비스를 사람의 계정에서 떼어 낼 때는 토큰의 교체 경로와 비용의 소유자도 함께 옮겨야 자연스럽게 이어져요.

더 읽을 공식 자료

GitHub Changelog · 2026-10-27

GitHub Docs · Server-to-server authentication

GitHub Docs · Manage app Copilot access