이 글은 PAT 대신 Github App으로 연동하는 방법과, 왜 Github App이 PAT보다 덜 위험한지 그 원리를 정리합니다. 원리를 알면 “Github App을 쓰면 안전하다”는 말을 그대로 믿지 않고, 무엇이 안전해지고 무엇이 여전히 위험한지 직접 판단할 수 있습니다.
ArgoCD에서 private github repo를 연동하려면 보통 Github PAT(Personal Access Token)를 씁니다. 그런데 PAT는 한 번 발급하면 만료가 없는 영구 자격증명이라, 유출되면 그대로 보안사고로 이어집니다. 영구자격증명이 아닌 임시자격증명을 사용하는 Github APP을 ArgoCD에도 사용할 수 있습니다.

Github App은 무엇으로 repo에 접근하는가
PAT는 github user에 묶인 영구 토큰입니다. 토큰 하나로 그 user가 가진 모든 권한에 접근할 수 있고, 만료 시점을 따로 지정하지 않으면 계속 살아 있습니다.
Github App은 접근 방식이 다릅니다. App은 private key를 가지고 있고, github repo에 직접 접근할 때는 이 private key로 만든 임시 access token을 씁니다. 흐름은 다음과 같습니다.
- Github App이 private key로 JWT(JSON Web Token)에 서명합니다. JWT에는 App ID와 발급 시각이 담깁니다.
- 이 JWT를 github에 보내 installation access token을 받습니다.
- 이 installation access token으로 repo에 접근합니다.
Github App이 PAT보다 안전한가
먼저 분명히 할 점은, Github App도 완전히 안전하지 않습니다. App이 임시 토큰을 받기 위해 쓰는 private key가 유출되면, 공격자가 그 key로 JWT를 만들어 똑같이 임시 토큰을 받을 수 있습니다. 결국 보호해야 할 자격증명이 PAT에서 private key로 바뀌었을 뿐입니다.
그래도 Github App이 PAT보다 덜 위험한 이유는 세 가지라고 생각합니다.
- 권한 범위가 다릅니다. PAT는 github user의 권한을 따라가지만, Github App은 App 자체에 부여한 권한만 가집니다. 아래 설정처럼 Contents를 Read only로 묶으면, key가 유출돼도 공격자가 할 수 있는 일이 읽기로 제한됩니다.
- revoke가 가능합니다. installation access token은 만료 전이라도 철회할 수 있고, App 자체를 정지시키면 이후 토큰 발급을 막을 수 있습니다.
- IP 접근 제한을 걸 수 있습니다. private key를 쓸 수 있는 server IP를 제한하면, key가 유출돼도 허용된 IP가 아니면 토큰을 받지 못합니다.
ArgoCD Github App 설정 과정
ArgoCD에서 Github App으로 repo를 연동하려면 두 가지가 필요합니다.
1. Github App 생성
2. Github App의 private key
1. Github App 생성
Github App은 개인 계정 profile 또는 Github Org에서 생성할 수 있습니다. 이 글은 소개가 목적이라 개인 계정 profile을 예제로 썼습니다.
- github profile 방문: https://github.com/settings/profile
- 왼쪽 메뉴에서 Developer settings 클릭
- Github Apps 생성

Homepage URL과 Callback URL에는 ArgoCD 주소를 입력합니다.

permission에서 Contents를 Read only로 설정합니다. ArgoCD는 repo의 manifest를 읽기만 하면 되므로, 쓰기 권한을 주지 않습니다. 앞서 설명한 대로, 권한을 좁히는 것이 Github App을 PAT보다 안전하게 만드는 첫 번째 요소입니다.

2. private key 생성과 IP 접근 제한
ArgoCD가 Github App을 쓰려면 private key 등록이 필요합니다. 이 private key는 App이 github에 임시 access token을 요청할 때 JWT에 서명하는 데 쓰입니다.
private key는 Github App 화면의 Generate a private key 기능으로 만듭니다. private key가 유출되면 PAT와 마찬가지로 보안사고가 나므로, ArgoCD server만 private key를 쓸 수 있도록 server IP를 제한합니다.

3. Github repo에 Github App 연동
App을 만들었으면 접근할 repo를 선택해 설치(install)합니다. 이 글은 개인 계정 profile을 예제로 썼습니다.
- github profile 방문: https://github.com/settings/profile
- 왼쪽 메뉴에서 Applications 클릭
- 생성한 Github App의 Configure 버튼 클릭

4. Review request 버튼 클릭

5. 연동할 github repo 선택

4. ArgoCD에서 Github App으로 repo 등록
ArgoCD UI에서 등록하거나 kubernetes secret으로 등록할 수 있습니다. 아래는 secret으로 등록하는 예시입니다. PAT 대신 githubAppPrivateKey를 넣는 점이 핵심이며, ArgoCD는 이 key로 앞서 설명한 JWT 서명과 임시 토큰 발급을 내부에서 처리합니다.
apiVersion: v1
kind: Secret
metadata:
name: github-app-repo-creds
namespace: argocd
labels:
argocd.argoproj.io/secret-type: repo-creds
app.kubernetes.io/name: github-app-repo-creds
app.kubernetes.io/part-of: pull-request-generator-demo
type: Opaque
stringData:
type: git
url: https://github.com//.git
githubAppID: "<GITHUB_APP_ID>" # App 화면 상단의 App ID
githubAppInstallationID: "<GITHUB_APP_INSTALLATION_ID>" # repo에 install할 때 부여되는 ID
githubAppPrivateKey: |
-----BEGIN PRIVATE KEY-----
<GITHUB_APP_PRIVATE_KEY>
-----END PRIVATE KEY-----
참고자료
- Token expiration and revocation - GitHub Docs (installation access token은 발급 후 1시간 만료)
- Generating an installation access token for a GitHub App - GitHub Docs (JWT 서명 -> installation access token 발급 흐름)
- 확인 필요: ArgoCD 공식 docs의 Github App credential(repo-creds) 등록 문서
'전공영역 공부 기록' 카테고리의 다른 글
| AWS CodeBuild에서 Github 토큰도 없이 어떻게 private repository를 clone할까? (0) | 2026.06.23 |
|---|---|
| kubernetes에서 NVIDIA GPU를 여러 pod가 함께 쓰는 방법 (0) | 2026.06.15 |
| heremes agent discord연결 원리와 연결방법 (0) | 2026.06.14 |
| Hermes Agent에서 AI provider 설정하는 방법 (0) | 2026.06.14 |
| Full proxy와 TCP 종료 전파 (0) | 2026.06.07 |