소개
프로세스를 안전하게 자동화하려면 엔터프라이즈 계정이 소유한 GitHub App를 만든 다음 자동화가 수행될 엔터프라이즈 또는 조직에 앱을 설치할 수 있습니다.
GitHub Apps 스크립트 및 워크플로에서 GitHub에 대한 API 호출을 인증하는 데 사용할 수 있는 토큰을 제공합니다. 이러한 토큰은 다음과 같은 이유로 특정 보안 및 감사 요구 사항이 있는 기업에 적합합니다.
- 임시
- 특정 계정 및 권한으로 범위 지정
- 사용자 계정이 아닌 앱의 ID와 연결됨
대기업의 일반적인 요구는 여러 조직에서 자동화를 일관되게 하고 최신 상태로 유지하는 것입니다. 프로그래밍 방식으로 앱을 설치하여 이 작업을 수행할 수 있습니다. 예를 들어 특정 정책 및 설정을 사용하여 모든 조직을 구성해야 하는 경우 모든 조직에서 이 작업에 대한 GitHub App를 설치할 수 있습니다.
이 가이드에서는 조직에서 엔터프라이즈 소유 GitHub App를 프로그래밍을 이용하여 설치하는 데 필요한 단계를 보여 줍니다. 앱이 설치되면 이를 사용하여 새 리포지토리를 만듭니다.
프로세스 개요
이 가이드에서는 GitHub CLI를 사용하여 액세스 토큰을 요청하고 조직에 앱을 설치하는 데 필요한 API 호출을 수행합니다. 실제로 이 프로세스는 회사의 요구에 맞는 사용자 지정 스크립트의 일부가 될 것입니다.
다음을 수행합니다.
- 엔터프라이즈 계정이 소유한 두 개의 앱을 만듭니다.
- 조직에 앱을 설치할 수 있는 권한이 있습니다.
- 다른 하나는 조직에서 프로세스를 자동화할 수 있는 권한을 갖습니다(이 경우 리포지토리 만들기).
- 첫 번째 앱을 인증하여 엔터프라이즈 범위 액세스 토큰을 가져옵니다.
- 엔터프라이즈 범위 토큰을 사용하여 조직에 자동화 앱을 설치하는 API를 호출합니다.
- 조직에서 설치한 앱을 인증하여 조직 범위 액세스 토큰을 가져옵니다.
- 조직 범위 토큰을 사용하여 조직에 리포지토리를 만드는 API를 호출합니다.
각 단계에서 특정 계정에서 특정 작업을 수행할 수 있는 권한만 있는 토큰을 사용합니다. 보안 및 감사 관점에서 이 방법은 엔터프라이즈 및 조직 전체에서 작업을 수행할 수 있는 권한이 있는 단일 토큰을 사용하는 것보다 우수합니다.
필수 조건
사용자 고유의 디바이스에서 이 가이드를 따르려면 다음을 수행해야 합니다.
- 엔터프라이즈 소유자가 됩니다.
- 자동화를 수행할 엔터프라이즈 소유 조직의 소유자여야 합니다.
- API 호출을 하려면 GitHub CLI을(를) 설치하십시오. GitHub CLI 리포지토리의 설치 를 참조하세요.
-
`openssl` JWT(JSON 웹 토큰)를 생성하기 위해 설치했습니다. 대부분의 디바이스에는 기본적으로 OpenSSL이 설치되어 있습니다. 설치되어 있는 경우 버전 번호를 반환하는 실행 `openssl -v`으로 확인할 수 있습니다. - Bash, ZSH 또는 Git Bash와 같은 Unix 셸을 사용합니다.
1. JWT 생성 준비
앱에서 액세스 토큰을 요청하려면 앱의 클라이언트 ID 및 프라이빗 키에서 생성된 JWT(JSON 웹 토큰)가 필요합니다. 많은 프로그래밍 언어에는 JWT를 생성하기 위한 기본 제공 메서드가 있습니다. 이 자습서에서는 Bash 스크립트를 사용하여 명령줄 openssl에서 JWT를 생성합니다.
-
[AUTOTITLE](/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-json-web-token-jwt-for-a-github-app#example-using-bash-to-generate-a-jwt)에서 JWT를 생성하기 위해 Bash 스크립트의 내용을 복사합니다. -
홈 디렉터리의 새 파일에 콘텐츠를 저장합니다
gen-jwt.sh. -
스크립트를 실행 가능하게 만듭니다.
Shell chmod +x ~/gen-jwt.sh
chmod +x ~/gen-jwt.sh
2. 두 개의 엔터프라이즈 앱 만들기
GitHub Apps은(는) 사용자가 허용하는 세분화된 권한과 계정 범위에서만 토큰을 생성할 수 있습니다. 이 단계에서는 두 개의 엔터프라이즈 소유 앱을 만듭니다. 하나는 엔터프라이즈 수준의 앱 설치 권한이 있고 다른 하나는 리포지토리를 만들 수 있는 조직 수준 권한이 있는 앱입니다.
a. 설치 관리자 앱 만들기
"설치 관리자 앱"은 엔터프라이즈 계정에 설치되며 조직에 다른 앱을 설치할 수 있는 권한이 있습니다.
-
엔터프라이즈 계정으로 새 앱을 만듭니다.
- 엔터프라이즈 계정 설정으로 이동합니다.
- 왼쪽 사이드바에서 GitHub Apps 을 클릭합니다.
-
**새 GitHub App** 을(를) 선택합니다.
-
다음을 제외하고 대부분의 값을 기본값으로 둘 수 있습니다.
- GitHub 사용자 이름으로
YOUR-HANDLE-installer-app를 바꾸어YOUR-HANDLE앱을 호출합니다. - "홈페이지 URL"을 .로
https://github.com설정합니다. -
**사용자 권한 부여 토큰 만료**를 선택 취소하고 "웹후크"에서 **활성**을 선택 취소합니다. - "엔터프라이즈 권한"에서 엔터프라이즈 조직 설치에 대한 읽기 및 쓰기 권한을 앱에 부여합니다.
- GitHub 사용자 이름으로
-
앱을 만든 후 클라이언트 ID 를 복사하여 라는
INSTALLER_APP_CLIENT_ID변수로 저장합니다. 예를 들어 명령줄에서 다음을 수행합니다.Shell export INSTALLER_APP_CLIENT_ID='abcde12345'
export INSTALLER_APP_CLIENT_ID='abcde12345' -
앱 페이지에서 아래로 스크롤하고 프라이빗 키 생성을 클릭합니다. 프라이빗 키 파일이 다운로드됩니다.
-
다음과 같은
~/YOUR-HANDLE-installer-app.DOWNLOAD-DATE.private-key.pem파일 경로를 기록해 둡다. -
앱 페이지의 왼쪽 사이드바에서 앱 설치를 클릭한 다음 엔터프라이즈 계정에 새 앱을 설치합니다. 앱을 설치하면 앱이 계정에서 작업을 수행할 수 있는 권한이 부여됩니다.
-
브라우저에서 URL을 확인하여 앱의 설치 ID를 찾습니다. URL 끝에 있는 숫자 문자열입니다
/enterprises/ENTERPRISE/settings/installations/ID. 이를 변수로 저장합니다INSTALLER_APP_INSTALL_ID.Shell export INSTALLER_APP_INSTALL_ID='12345678'
export INSTALLER_APP_INSTALL_ID='12345678' -
앱이 변수로 설치된 엔터프라이즈의 이름을 저장합니다.
Shell export ENTERPRISE='octo-enterprise'
export ENTERPRISE='octo-enterprise'
b. 자동화 앱 만들기
"자동화 앱"은 조직에 설치되며 해당 조직에 리포지토리를 만들 수 있는 권한이 있습니다. 실제로 조직에서 프로세스를 자동화하는 데 필요한 모든 권한을 이 앱에 부여합니다.
-
엔터프라이즈 계정으로 새 앱을 만듭니다.
- GitHub 사용자 이름으로
YOUR-HANDLE-automation-app를 바꾸어YOUR-HANDLE앱을 호출합니다. - "홈페이지 URL"을 .로
https://github.com설정합니다. -
**사용자 권한 부여 토큰 만료**를 선택 취소하고 "웹후크"에서 **활성**을 선택 취소합니다. - "리포지토리 권한"에서 앱에 관리에 대한 읽기 및 쓰기 권한을 부여합니다.
- GitHub 사용자 이름으로
-
앱을 만든 후 클라이언트 ID 를 복사하고 변수로
AUTOMATION_APP_CLIENT_ID저장합니다.Shell export AUTOMATION_APP_CLIENT_ID='abcde12345'
export AUTOMATION_APP_CLIENT_ID='abcde12345' -
아래로 스크롤하여 프라이빗 키 생성을 클릭합니다. 프라이빗 키 파일이 다운로드됩니다.
-
다음과 같은
~/YOUR-HANDLE-automation-app.DOWNLOAD-DATE.private-key.pem파일 경로를 기록해 둡다. -
앱이 변수로 설치될 조직의 이름을 저장합니다.
Shell export ORG='octo-org'
export ORG='octo-org'
3. 설치 관리자 앱 인증
앱을 인증하면 앱을 등록할 때 정의한 범위 및 사용 권한이 있는 토큰을 가져올 수 있습니다. 이 경우 조직에서 자동화 앱을 설치할 수 있는 권한을 부여하는 설치 관리자 앱에 대한 토큰을 가져옵니다.
-
저장한 Bash 스크립트를 사용하여 JWT를 생성합니다. 다음은 그 예입니다.
Shell ~/gen-jwt.sh $INSTALLER_APP_CLIENT_ID ~/YOUR-HANDLE-installer-app.DOWNLOAD-DATE.private-key.pem
~/gen-jwt.sh $INSTALLER_APP_CLIENT_ID ~/YOUR-HANDLE-installer-app.DOWNLOAD-DATE.private-key.pem -
JWT(이후
JWT=의 긴 문자열)를 복사하여 변수로 저장합니다.Shell export INSTALL_JWT='abcde12345'
export INSTALL_JWT='abcde12345' -
JWT를 사용하여 설치 액세스 토큰에 대한 요청을 인증합니다. 이 단계에서는 앱 API 엔드포인트 에 대한 설치 액세스 토큰 만들기를 사용하며 앱의 설치 ID가 필요합니다.
Shell gh api --method POST "/app/installations/$INSTALLER_APP_INSTALL_ID/access_tokens" --header "Authorization: Bearer $INSTALL_JWT"
gh api --method POST "/app/installations/$INSTALLER_APP_INSTALL_ID/access_tokens" --header "Authorization: Bearer $INSTALL_JWT" -
JSON 개체에
token속성이 포함되어 있는 것을 확인하십시오. 액세스 토큰(따옴표 없이 속성 값token)을 복사하고 변수로INSTALLER_APP_INSTALL_TOKEN저장합니다.Shell export INSTALLER_APP_INSTALL_TOKEN='abcde12345'
export INSTALLER_APP_INSTALL_TOKEN='abcde12345'
4. 자동화 앱 설치
방금 받은 설치 액세스 토큰은 조직에 앱을 설치하기 위해 API를 호출할 수 있는 권한을 제공합니다. 여기서는 토큰을 사용하여 특정 조직에 자동화 앱(사용자가 만든 두 번째 앱)을 설치합니다. 실제로 이 API를 여러 번 호출하여 여러 조직에 앱을 설치할 수 있습니다.
-
다음 명령을 실행합니다. 엔터프라이즈 소유 조직 API 엔드포인트 에 GitHub 앱 설치 를 사용하고, 방금 요청한 설치 토큰으로 인증하고, 설치하려는 자동화 앱의 클라이언트 ID를 전달합니다.
Shell gh api --method POST \ "/enterprises/$ENTERPRISE/apps/organizations/$ORG/installations" \ --header "Authorization: Bearer $INSTALLER_APP_INSTALL_TOKEN" \ --header "Accept: application/vnd.github+json" \ --header "X-GitHub-Api-Version: 2022-11-28" \ --field "client_id=$AUTOMATION_APP_CLIENT_ID" \ --field "repository_selection=all"
gh api --method POST \ "/enterprises/$ENTERPRISE/apps/organizations/$ORG/installations" \ --header "Authorization: Bearer $INSTALLER_APP_INSTALL_TOKEN" \ --header "Accept: application/vnd.github+json" \ --header "X-GitHub-Api-Version: 2022-11-28" \ --field "client_id=$AUTOMATION_APP_CLIENT_ID" \ --field "repository_selection=all" -
성공하면 앱의 설치 ID부터 시작하여 많은 수의 속성이 반환됩니다.
앱이 성공적으로 설치되었는지 확인하려면 ORG를
https://github.com/organizations/ORG/settings/installations조직 이름으로 바꿔서 이동합니다. 페이지에 새로 설치된 앱이 표시됩니다. -
새 설치의 설치 ID를 찾아서 저장합니다
AUTOMATION_APP_INSTALL_ID. ID를 찾으려면 API에서 반환된 첫 번째 ID 속성을 복사하거나 UI의 앱 설치 옆에 있는 구성 을 클릭하고 URL에서 ID를 복사할 수 있습니다.Shell export AUTOMATION_APP_INSTALL_ID='12345678'
export AUTOMATION_APP_INSTALL_ID='12345678'
5. 자동화 앱 인증
엔터프라이즈 범위 토큰을 얻기 위해 설치 관리자 앱을 인증한 것처럼 이제 자동화 앱에 대해 동일한 프로세스를 수행해야 합니다. 이렇게 하면 리포지토리를 만들 수 있는 권한이 있는 조직 범위 토큰이 제공됩니다.
-
자동화 앱의 클라이언트 ID 및 프라이빗 키를 사용하여 JWT를 생성합니다. 다음은 그 예입니다.
Shell ~/gen-jwt.sh $AUTOMATION_APP_CLIENT_ID ~/octocat-automation-app.2025-10-08.private-key.pem
~/gen-jwt.sh $AUTOMATION_APP_CLIENT_ID ~/octocat-automation-app.2025-10-08.private-key.pem -
JWT(이후
JWT=의 긴 문자열)를 복사하여 변수로 저장합니다.Shell export AUTO_JWT='abcde12345'
export AUTO_JWT='abcde12345' -
JWT를 사용하여 설치 액세스 토큰에 대한 요청을 인증합니다. 이번에는 새로 설치된 자동화 앱에 대한 설치 ID 및 JWT를 전달합니다.
Shell gh api --method POST "/app/installations/$AUTOMATION_APP_INSTALL_ID/access_tokens" --header "Authorization: Bearer $AUTO_JWT"
gh api --method POST "/app/installations/$AUTOMATION_APP_INSTALL_ID/access_tokens" --header "Authorization: Bearer $AUTO_JWT" -
새 설치 액세스 토큰을 복사하고 변수로
AUTOMATION_APP_INSTALL_TOKEN저장합니다.Shell export AUTOMATION_APP_INSTALL_TOKEN='abcde12345'
export AUTOMATION_APP_INSTALL_TOKEN='abcde12345'
6. 프로세스 자동화
방금 받은 설치 토큰은 앱이 설치된 조직에서 리포지토리를 만들 수 있는 권한을 부여합니다.
-
다음 명령을 실행합니다. 방금 얻은 설치 토큰으로 인증하고 있습니다.
Shell gh api --method POST \ "/orgs/$ORG/repos" \ --header "Authorization: Bearer $AUTOMATION_APP_INSTALL_TOKEN" \ --header "Accept: application/vnd.github+json" \ --header "X-GitHub-Api-Version: 2022-11-28" \ --field "name=automatic-repo" \ --field "description=Repository created automatically using GitHub App automation" \ --field "private=false" \ --field "auto_init=true"
gh api --method POST \ "/orgs/$ORG/repos" \ --header "Authorization: Bearer $AUTOMATION_APP_INSTALL_TOKEN" \ --header "Accept: application/vnd.github+json" \ --header "X-GitHub-Api-Version: 2022-11-28" \ --field "name=automatic-repo" \ --field "description=Repository created automatically using GitHub App automation" \ --field "private=false" \ --field "auto_init=true" -
리포지토리가 성공적으로 만들어졌는지 확인하려면 ORG를
https://github.com/orgs/ORG/repositories조직의 이름으로 바꿔서 이동합니다.
리포지토리가 성공적으로 만들어졌나요?
<a href="https://docs.github.io/success-test/yes.html" target="_blank" class="btn btn-outline mt-3 mr-3 no-underline">
<span>예</span></a><a href="https://docs.github.io/success-test/no.html" target="_blank" class="btn btn-outline mt-3 mr-3 no-underline"><span>아니요</span></a>
7. 앱 제거
보안을 위해 엔터프라이즈 및 조직에서 앱을 제거합니다. 그러면 앱과 연결된 모든 토큰이 해지됩니다. 지침은 설치된 GitHub 앱 검토 및 수정을(를) 참조하세요.
다음 단계
조직에서 프로그래밍 방식으로 앱을 설치하고 자동화를 실행하는 방법을 알아보았습니다. 이제 여러 조직에서 실제 프로세스를 자동화할 준비가 되었습니다. 앱이 수행할 수 있는 작업에 대한 자세한 내용은 GitHub 앱 만들기 정보을 참조하세요.
팁
실제 환경에서는 일회성 프로세스로 설치를 수행할 가능성이 높습니다. 조직 수준 자동화는 웹후크 또는 cron 작업에 의해 트리거되는 별도의 스크립트에 정의됩니다. 그러나 보안에 민감한 기업은 앱의 프라이빗 키가 노출될 경우 영향을 제한하기 위해 자동화가 실행될 때마다 앱을 설치하고 제거하는 것을 선호할 수 있습니다.