Skip to main content

GitHub Actions 워크플로에서 GitHub 앱을 사용하여 인증된 API 요청 만들기

GitHub App의 설치 액세스 토큰을 사용하여 GitHub Actions 워크플로에서 인증된 API 요청을 만들 수 있습니다. 토큰을 사용자 지정 작업에 전달하여 해당 작업이 인증된 API 요청을 하도록 설정할 수도 있습니다.

GitHub Actions 인증 정보

GitHub Actions 워크플로에서 인증된 API 요청을 수행하거나 토큰이 필요한 사용자 지정 작업을 실행해야 하는 경우, 가능하면 기본 제공 GITHUB_TOKEN을 사용해야 합니다. 그러나 GITHUB_TOKEN은 워크플로의 리포지토리 내의 리소스에만 액세스할 수 있습니다. 조직이나 다른 리포지토리의 리소스와 같은 추가 리소스에 액세스해야 하는 경우 GitHub App을 사용할 수 있습니다. personal access token 대신 GitHub App을 사용하는 이유에 대한 자세한 내용은 "GitHub 앱 만들기 정보"을(를) 참조하세요.

GitHub App으로 인증

GitHub App을 사용하여 인증된 API 요청을 하려면 GitHub App을 등록하고, 앱의 자격 증명을 저장하고, 앱을 설치해야 합니다. 이 작업이 완료되면 앱을 사용하여 GitHub Actions 워크플로에서 인증된 API 요청을 만드는 데 사용할 수 있는 설치 액세스 토큰을 만들 수 있습니다. 설치 액세스 토큰을 토큰이 필요한 사용자 지정 작업에 전달할 수도 있습니다.

  1. GitHub App에 등록합니다. 원하는 리소스에 액세스하는 데 필요한 권한을 GitHub App 등록에 부여합니다. 자세한 내용은 "GitHub 앱 등록" 및 "GitHub 앱의 권한 선택"을(를) 참조하세요.

  2. GitHub App의 앱 ID를 GitHub Actions 구성 변수로 저장합니다. 앱의 설정 페이지에서 앱 ID를 찾을 수 있습니다. 앱 ID는 클라이언트 ID와 다릅니다. GitHub App의 설정 페이지로 이동하는 방법에 대한 자세한 내용은 "GitHub 앱 등록 수정"을(를) 참조하세요. 구성 변수 저장에 대한 자세한 내용은 "변수에 정보 저장" 항목을 참조하세요.

  3. 앱에 대한 프라이빗 키를 생성합니다. 결과 파일의 내용을 비밀로 저장합니다. (-----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY-----를 포함하여 파일의 전체 내용을 저장합니다.) 자세한 내용은 "GitHub 앱에 대한 프라이빗 키 관리"을(를) 참조하세요. 비밀을 저장하는 방법에 대한 자세한 내용은 "GitHub Actions에서 비밀 사용"을(를) 참조하세요.

  4. 사용자 계정 또는 조직에 GitHub App을 설치하고 워크플로에서 액세스하려는 모든 리포지토리에 대한 액세스 권한을 부여합니다. 자세한 내용은 "자신만의 GitHub 앱 설치"을(를) 참조하세요.

  5. GitHub Actions 워크플로에서 API 요청을 만드는 데 사용할 수 있는 설치 액세스 토큰을 만듭니다.

    이를 위해 다음 예제에 설명된 대로 GitHub 소유 작업을 사용할 수 있습니다. 이 작업을 사용하지 않으려면 actions/create-github-app-token 작업을 포크하고 수정하거나, 스크립트를 작성하여 워크플로에서 설치 토큰을 수동으로 만들도록 할 수 있습니다. 자세한 내용은 "GitHub 앱 설치로 인증"을(를) 참조하세요.

    다음 예제 워크플로에서는 actions/create-github-app-token 작업을 사용하여 설치 액세스 토큰을 생성합니다. 그런 다음 워크플로는 토큰을 사용하여 GitHub CLI를 통해 API 요청을 만듭니다.

    다음 워크플로에서 APP_ID를 앱 ID가 저장된 구성 변수의 이름으로 바꿉니다. APP_PRIVATE_KEY를 앱 프라이빗 키가 보관된 비밀의 이름으로 바꿉니다.

YAML

on:
  workflow_dispatch:
jobs:
  demo_app_authentication:
    runs-on: ubuntu-latest
    steps:
      - name: Generate a token
        id: generate-token
        uses: actions/create-github-app-token@v1
        with:
          app-id: ${{ vars.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}

      - name: Use the token
        env:
          GH_TOKEN: ${{ steps.generate-token.outputs.token }}
        run: |
          gh api octocat