Skip to main content

JFrog에서 OpenID Connect 구성

워크플로 내에서 OpenID Connect를 사용하여 JFrog로 인증할 수 있습니다.

개요

OIDC(OpenID Connect)를 사용하면 GitHub Actions 워크플로가 JFrog로 인증하여 GitHub에 JFrog 암호, 토큰 또는 API 키를 저장하지 않고도 아티팩트를 다운로드하고 게시할 수 있습니다.

이 가이드에서는 GitHub의 OIDC를 페더레이션 ID로 신뢰하도록 JFrog를 구성하는 방법에 대한 개요를 제공하고 GitHub Actions 워크플로에서 이 구성을 사용하는 방법을 보여 줍니다.

예제 GitHub Actions 워크플로의 경우 JFrog 설명서의 샘플 GitHub Actions 통합을 참조하세요.

JFrog CLI를 사용하는 예제 GitHub Actions 워크플로의 경우 jfrog-github-oidc-example 리포지토리의 build-publish.yml을 참조하세요.

필수 조건

  • GitHub가 OIDC(OpenID Connect)를 사용하는 방법과 아키텍처 및 이점에 대한 기본 개념을 알아보려면 “OpenID Connect를 사용한 보안 강화 정보”를 참조하세요.

  • 계속하기 전에 액세스 토큰이 예측 가능한 방식으로만 할당되도록 보안 전략을 계획해야 합니다. 클라우드 공급자가 액세스 토큰을 발급하는 방법을 제어하려면 신뢰할 수 없는 리포지토리가 클라우드 리소스에 대한 액세스 토큰을 요청할 수 없도록 하나 이상의 조건을 정의해야 합니다. 자세한 내용은 "OpenID Connect를 사용한 보안 강화 정보" 항목을 참조하세요.

  • GHE.com에서 이 가이드를 따르는 경우 다음 문서의 특정 값을 대체해야 한다는 점을 알아 두세요. "OpenID Connect를 사용한 보안 강화 정보" 항목을 참조하세요.

  • 보안을 위해 ID 매핑을 구성할 때 JFrog에서 클레임 JSON을 설정해야 합니다. 자세한 내용은 "AUTOTITLE" 및 "OpenID Connect를 사용한 보안 강화 정보" 항목을 참조하세요.

    예를 들어 isshttps://token.actions.githubusercontent.com에, repository를 그리고 "octo-org/octo-repo"와 같은 항목에 설정할 수 있습니다. 이렇게 하면 지정된 리포지토리의 Actions 워크플로만 JFrog 플랫폼에 액세스할 수 있습니다. 다음은 ID 매핑을 구성할 때의 클레임 JSON 예제입니다.

    JSON
    {
      "iss": "https://token.actions.githubusercontent.com",
      "repository": "octo-org/octo-repo"
    }
    

JFrog에 ID 공급자 추가

JFrog에서 OIDC를 사용하려면 GitHub Actions과 JFrog 플랫폼 간에 트러스트 관계를 설정합니다. 이 프로세스에 대한 자세한 내용은 JFrog 설명서의 OIDC(OpenID Connect) 통합을 참조하세요.

  1. JFrog 플랫폼에 로그인합니다.
  2. JFrog와 GitHub Actions 워크플로 간에 트러스트를 구성합니다.
  3. ID 매핑을 구성합니다.

GitHub Actions 워크플로 업데이트

GitHub Actions과 JFrog 플랫폼 간에 트러스트 관계를 설정하면 GitHub Actions 워크플로 파일을 업데이트할 수 있습니다.

GitHub Actions 워크플로 파일에서 JFrog 플랫폼에서 구성한 공급자 이름과 대상 그룹을 사용하고 있는지 확인합니다.

다음 예제에서는 자리 표시자 YOUR_PROVIDER_NAME을 사용합니다.

- name: Fetch Access Token from Artifactory
        id: fetch_access_token
        env:
          ID_TOKEN: $
        run: |
          ACCESS_TOKEN=$(curl \
          -X POST \
          -H "Content-type: application/json" \
          https://example.jfrog.io/access/api/v1/oidc/token \
          -d \
          "{\"grant_type\": \"urn:ietf:params:oauth:grant-type:token-exchange\", \"subject_token_type\":\"urn:ietf:params:oauth:token-type:id_token\", \"subject_token\": \"$ID_TOKEN\", \"provider_name\": \"YOUR_PROVIDER_NAME\"}" | jq .access_token | tr -d '"')
          echo ACCESS_TOKEN=$ACCESS_TOKEN >> $GITHUB_OUTPUT

다음 예제에서는 cURL을 사용하는 GitHub Actions 워크플로 파일의 일부를 보여줍니다.

- name: Get ID Token (cURL method)
        id: idtoken
        run: |
          ID_TOKEN=$(curl -sLS -H "User-Agent: actions/oidc-client" -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
          "${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=jfrog-github" | jq .value | tr -d '"')
          echo "ID_TOKEN=${ID_TOKEN}" >> $GITHUB_OUTPUT

또는 env 컨텍스트를 사용하여 대상 그룹을 환경 변수로 설정할 수 있습니다. env 컨텍스트에 대한 자세한 내용은 "워크플로 실행에 대한 컨텍스트 정보에 액세스"을 참조하세요.

Note

워크플로 또는 OIDC 정책에서 환경을 사용하는 경우 추가 보안을 위해 환경에 보호 규칙을 추가하는 것이 좋습니다. 예를 들어 환경에 배포할 수 있는 분기 및 태그를 제한하거나 환경 비밀에 액세스하도록 환경에 대한 배포 규칙을 구성할 수 있습니다. 자세한 내용은 "배포 환경 관리" 항목을 참조하세요.

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      OIDC_AUDIENCE: 'YOUR_AUDIENCE'

그런 다음 워크플로 파일에서 env 컨텍스트에 저장된 변수의 값을 검색합니다. 다음 예제에서는 env 컨텍스트를 사용하여 OIDC 대상 그룹을 검색합니다.

- name: Get ID Token (using env context)
        uses: actions/github-script@v6
        id: idtoken
        with:
          script: |
            const coredemo = require('@actions/core');
            let id_token = await coredemo.getIDToken(process.env.OIDC_AUDIENCE);
            coredemo.setOutput('id_token', id_token);