Skip to main content

Dependabot에 대한 개인 레지스트리 액세스 구성

개인 레지스트리에 저장된 종속성에 액세스하도록 Dependabot을(를) 구성할 수 있습니다. 비밀번호 및 액세스 토큰과 같은 인증 정보를 암호화된 비밀로 저장한 다음 Dependabot 구성 파일에서 이를 참조할 수 있습니다. 개인 네트워크에 레지스트리가 있는 경우 자체 호스트형 실행기에서 Dependabot을(를) 실행할 때 Dependabot 액세스를 구성할 수도 있습니다.

누가 이 기능을 사용할 수 있나요?

쓰기 권한이 있는 사용자

개인 레지스트리 정보

Dependabot version updates는 종속성을 최신 상태로 유지하고 Dependabot security updates는 취약한 종속성을 업데이트합니다. 이(가) 공용 레지스트리에 액세스할 수 있습니다. 또한 프라이빗 패키지 레지스트리 및 프라이빗 GitHub 리포지토리에 대한 Dependabot 액세스 권한을 부여하여 프라이빗 및 내부 소스 종속성을 공용 종속성과 동일한 최신 상태로 유지하고 안전하게 보호할 수 있습니다.

대부분의 에코시스템에서 개인 종속성은 일반적으로 개인 패키지 레지스트리에 게시됩니다. 이러한 개인 레지스트리는 공용 레지스트리와 유사하지만 인증이 필요합니다.

특정 에코시스템의 경우 공용 레지스트리에 대한 호출을 제거하여 개인 레지스트리_에만_ 액세스하도록 Dependabot을(를) 구성할 수 있습니다. 자세한 내용은 공용 레지스트리에 대한 Dependabot 액세스 제거을(를) 참조하세요.

비공개로 호스팅되거나 내부 네트워크로 제한된 레지스트리에 Dependabot 액세스를 허용하려면 GitHub Actions 자체 호스트형 실행기에서 Dependabot을(를) 실행하도록 구성합니다. 자세한 내용은 자체 호스팅 실행기에서 Dependabot 관리을(를) 참조하세요.

개인 레지스트리 구성

dependabot.yml 파일의 개인 레지스트리에 대한 Dependabot의 액세스 권한을 구성합니다. 최상위 registries 키는 선택 사항이며 인증 세부 정보를 지정합니다.

dependabot.yml 파일에는 registries 키를 사용할 수 있는 2개의 위치가 있습니다.

  • 최상위 수준으로 필요한 경우 레지스트리 및 해당 액세스 정보를 정의할 수 있습니다.
  • updates 블록 내에서 registries: "*"를 사용하여 Dependabot에게 최상위 수준에서 정의한 레지스트리의 일부 또는 전부를 사용하도록 지시할 수 있습니다.
# registries: gradle-artifactory - provides access details for the gradle-artifactory registry
# registries: "*" - allows Dependabot to use all the defined registries specified at the top level

version: 2
registries:
  gradle-artifactory:
    type: maven-repository
    url: https://acme.jfrog.io/artifactory/my-gradle-registry
    username: octocat
    password: ${{secrets.MY_ARTIFACTORY_PASSWORD}}
updates:
  - package-ecosystem: "gradle"
    directory: "/"
    registries: "*"
    schedule:
      interval: "monthly"

다음 옵션을 사용하여 액세스 설정을 지정합니다. 레지스트리 설정은 typeurl을 포함해야 하며, 일반적으로 usernamepassword 조합이나 token을 포함해야 합니다.

매개 변수목적
REGISTRY_NAME필수: 레지스트리에 대한 식별자를 정의합니다.
type필수: 레지스트리의 형식을 식별합니다.
인증 세부 정보필수: 인증 세부 정보를 제공하는 데 지원되는 매개 변수는 다양한 유형의 레지스트리에 따라 다릅니다.
url필수: 이 레지스트리의 종속성에 액세스하는 데 사용할 URL입니다. 프로토콜은 선택 사항입니다. 지정하지 않으면 https://가 가정됩니다. Dependabot은 필요에 따라 후행 슬래시를 추가하거나 무시합니다.
replaces-base부울 값이 true인 경우, Dependabot은 해당 에코시스템의 기본 URL이 아닌 지정된 url을(를) 사용하여 종속성을 해결합니다.

사용 가능한 구성 옵션 및 지원되는 유형에 대한 자세한 내용은 Dependabot 옵션 참조을(를) 참조하세요.

Dependabot에서 사용할 자격 증명 저장

Dependabot에게 GitHub이(가) 지원하는 개인 레지스트리에 대한 액세스 권한을 부여하려면 레지스트리의 액세스 토큰 또는 비밀을 리포지토리 또는 조직의 비밀 저장소에 저장합니다.

Dependabot에 대한 암호화된 비밀 정보

Dependabot 비밀은 조직 수준 또는 리포지토리 수준에서 만드는 암호화된 자격 증명입니다. 조직 수준에서 비밀을 추가하는 경우 비밀에 액세스할 수 있는 리포지토리를 지정할 수 있습니다. 비밀을 사용하여 Dependabot에서 프라이빗 패키지 레지스트리에 있는 종속성을 업데이트할 수 있습니다. 비밀을 추가하면 GitHub에 도달하기 전에 암호화되고 Dependabot에서 프라이빗 패키지 레지스트리에 액세스하는 데 사용될 때까지 암호화된 상태로 유지됩니다.

Dependabot 또한 시크릿에는 워크플로에서 끌어오기 요청에 의해 트리거된 시크릿도 포함됩니다. 자체에서 이러한 비밀을 사용할 수는 없지만 워크플로에는 이러한 비밀이 필요합니다. 자세한 내용은 GitHub Actions의 Dependabot 문제 해결을(를) 참조하세요.

Dependabot 비밀을 추가한 후 dependabot.yml구성 파일(예: ${{secrets.NAME}})에서 참조할 수 있습니다. 여기서 “NAME”은 비밀에 대해 선택한 이름입니다. 예시:

YAML
password: ${{secrets.MY_ARTIFACTORY_PASSWORD}}

비밀 이름 지정

Dependabot 비밀의 이름입니다.

  • 영숫자 문자([A-Z], [0-9]) 또는 밑줄(_)만 포함할 수 있습니다. 공백은 사용할 수 없습니다. 소문자를 입력하면 대문자로 변경됩니다.
  • GITHUB_ 접두사로 시작하지 않아야 합니다.
  • 숫자로 시작할 수 없습니다.

Dependabot에 대한 리포지토리 비밀 추가

개인용 계정 리포지토리에 대한 비밀을 만들려면 리포지토리 소유자여야 합니다. 조직 리포지토리에 대한 비밀을 만들려면 admin 액세스 권한이 있어야 합니다.

  1. GitHub에서 리포지토리의 기본 페이지로 이동합니다.

  2. 리포지토리 이름 아래에서 설정을 클릭합니다. "설정" 탭이 표시되지 않으면 드롭다운 메뉴를 선택한 다음 설정을 클릭합니다.

    탭을 보여 주는 리포지토리 헤더의 스크린샷. "설정" 탭이 진한 주황색 윤곽선으로 강조 표시됩니다.

  3. 사이드바의 "보안" 섹션에서 비밀 및 변수를 선택하고 Dependabot 을(를) 클릭합니다.

  4. 새 리포지토리 비밀을 선택합니다.

  5. 이름 입력 상자에 비밀의 이름을 입력합니다.

  6. 비밀 값을 입력합니다.

  7. 비밀 추가를 클릭합니다.

    비밀의 이름은 Dependabot 비밀 페이지에 나열됩니다. 업데이트를 클릭하여 비밀 값을 변경할 수 있습니다. 제거를 클릭하여 비밀을 삭제할 수 있습니다.

Dependabot에 대한 조직 암호 추가

조직에서 비밀을 만들 때 정책을 사용하여 해당 비밀에 액세스할 수 있는 리포지토리를 제한할 수 있습니다. 예를 들어 모든 리포지토리에 대한 액세스 권한을 부여하거나 프라이빗 리포지토리 또는 지정된 리포지토리 목록에 대해서만 액세스를 제한할 수 있습니다.

조직 수준에서 비밀을 만들려면 admin 액세스 권한이 있어야 합니다.

  1. GitHub에서 조직의 기본 페이지로 이동합니다.

  2. 조직 이름에서 설정을 클릭합니다. "설정" 탭이 표시되지 않으면 드롭다운 메뉴를 선택한 다음 설정을 클릭합니다.

    조직 프로필에 있는 여러 탭의 스크린샷. "설정" 탭이 진한 주황색으로 표시됩니다.

  3. 사이드바의 "보안" 섹션에서 비밀 및 변수를 선택하고 Dependabot 을(를) 클릭합니다. "프라이빗 레지스트리" 옵션은 무시합니다. 이 옵션은 code scanning 기본 설정에서만 사용됩니다.

  4. 새 조직 비밀을 클릭합니다.

  5. 이름 입력 상자에 비밀의 이름을 입력합니다.

  6. 필드에 비밀 값을 입력합니다.

  7. 리포지토리 액세스 드롭다운 목록에서 액세스 정책을 선택합니다.

  8. 선택한 리포지토리를 선택한 경우:

    • 을(를) 클릭하세요.
    • 대화 상자에서 이 비밀에 액세스할 수 있는 리포지토리를 선택하세요.
    • 선택 항목 업데이트를 클릭합니다.
  9. 비밀 추가를 클릭합니다.

    비밀의 이름은 Dependabot 비밀 페이지에 나열됩니다. 업데이트를 클릭하여 비밀 값 또는 해당 액세스 정책을 변경할 수 있습니다. 제거를 클릭하여 비밀을 삭제할 수 있습니다.

방화벽 IP 규칙 구성

레지스트리 IP 허용 목록에 Dependabot 관련 IP 주소를 추가할 수 있습니다.

개인 레지스트리가 IP 허용 목록으로 구성된 경우 Dependabot에서 dependabot 키 아래 메타 API 엔드포인트의 레지스트리에 액세스하는 데 사용하는 IP 주소를 찾을 수 있습니다. GitHub Actions 자체 호스트형 실행기에서 Dependabot을(를) 실행하는 경우, 대신 actions 키 아래의 IP 주소를 사용해야 합니다. 자세한 내용은 메타 데이터에 대한 REST API 엔드포인트GitHub Actions 실행기의 Dependabot 정보을(를) 참조하세요.

외부 코드 실행 허용

하나 이상의 레지스트리에 대한 Dependabot 액세스 권한을 부여하면 손상된 패키지로부터 코드를 보호하기 위해 외부 코드 실행이 자동으로 사용하지 않도록 설정됩니다. 그러나 일부 버전 업데이트는 실패할 수 있습니다.

Dependabot에서 프라이빗 패키지 레지스트리에 액세스하고 제한된 외부 코드 실행을 사용하도록 설정해야 하는 경우 insecure-external-code-executionallow로 설정할 수 있습니다. 외부 코드 실행은 둘러싼 updates 설정과 연결된 레지스트리의 패키지 관리자에만 액세스할 수 있습니다. 최상위 registries 구성에 정의된 레지스트리에는 액세스가 허용되지 않습니다.

이 예제에서 구성 파일을 사용하면 Dependabot에서 ruby-github 프라이빗 패키지 레지스트리에 액세스할 수 있습니다. 동일한 updates 설정에서 insecure-external-code-executionallow로 설정되어 있으므로 종속성으로 실행되는 코드는 dockerhub 레지스트리가 아닌 ruby-github 레지스트리에만 액세스하게 됩니다.

YAML
# Allow external code execution when updating dependencies from private registries

version: 2
registries:
  ruby-github:
    type: rubygems-server
    url: https://rubygems.pkg.github.com/octocat/github_api
    token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
updates:
  - package-ecosystem: "bundler"
    directory: "/rubygems-server"
    insecure-external-code-execution: allow
    registries: "*"
    schedule:
      interval: "monthly"

지원되는 프라이빗 레지스트리

Dependabot에서 지원하는 프라이빗 레지스트리에 대한 액세스를 구성하는 방법의 예입니다.

cargo-registry

cargo-registry 유형은 토큰을 지원합니다.

이 레지스트리 유형은 url 옵션에 제공된 경로와 접두사가 일치합니다. 즉, 동일한 호스트에 여러 자격 증명을 제공할 수 있으며, 이 자격 증명은 고유 경로에 액세스하는 데 사용할 수 있습니다. 그러나 동일한 호스트에 여러 레지스트리가 없는 경우 레지스트리의 모든 경로가 자격 증명을 받도록 url에서 경로를 생략하는 것이 좋습니다.

registries:
  cargo-example:
    type: cargo-registry
    registry: "name-of-your-registry"
    url: https://cargo.cloudsmith.io/foobaruser/test/
    token: "Token ${{secrets.CARGO_TOKEN}}"

프라이빗 레지스트리 https://cargo.cloudsmith.io에 대해 이 구성을 테스트했습니다.

composer-repository

composer-repository 유형은 사용자 이름 및 암호를 지원합니다. 계정이 GitHub 계정인 경우 암호 대신 GitHub personal access token을(를) 사용할 수 있습니다.

이 레지스트리 유형은 url 옵션에 제공된 경로와 접두사가 일치합니다. 즉, 동일한 호스트에 여러 자격 증명을 제공할 수 있으며, 이 자격 증명은 고유 경로에 액세스하는 데 사용할 수 있습니다. 그러나 동일한 호스트에 여러 레지스트리가 없는 경우 레지스트리의 모든 경로가 자격 증명을 받도록 url에서 경로를 생략하는 것이 좋습니다.

YAML
registries:
  composer:
    type: composer-repository
    url: https://repo.packagist.com/example-company/
    username: octocat
    password: ${{secrets.MY_PACKAGIST_PASSWORD}}

docker-registry

Dependabot은 OCI 컨테이너 레지스트리 사양을 구현하는 모든 컨테이너 레지스트리에서 작동합니다. 자세한 내용은 https://github.com/opencontainers/distribution-spec/blob/main/spec.md 페이지를 참조하세요. Dependabot은 중앙 토큰 서비스 또는 HTTP 기본 인증을 통해 프라이빗 레지스트리에 대한 인증을 지원합니다. 자세한 내용은 Docker 설명서의 토큰 인증 사양 및 Wikipedia의 기본 액세스 인증을 참조하세요.

docker-registry 유형은 사용자 이름 및 암호를 지원합니다. 계정이 GitHub 계정인 경우 암호 대신 GitHub personal access token을(를) 사용할 수 있습니다.

이 레지스트리 유형은 url 옵션에 제공된 경로와 접두사가 일치합니다. 즉, 동일한 호스트에 여러 자격 증명을 제공할 수 있으며, 이 자격 증명은 고유 경로에 액세스하는 데 사용할 수 있습니다. 그러나 동일한 호스트에 여러 레지스트리가 없는 경우 레지스트리의 모든 경로가 자격 증명을 받도록 url에서 경로를 생략하는 것이 좋습니다.

YAML
registries:
  dockerhub:
    type: docker-registry
    url: https://registry.hub.docker.com
    username: octocat
    password: ${{secrets.MY_DOCKERHUB_PASSWORD}}
    replaces-base: true

docker-registry 유형을 통해 정적 AWS 자격 증명을 사용하여 프라이빗 Amazon ECR에서 끌어올 수도 있습니다.

YAML
registries:
  ecr-docker:
    type: docker-registry
    url: https://1234567890.dkr.ecr.us-east-1.amazonaws.com
    username: ${{secrets.ECR_AWS_ACCESS_KEY_ID}}
    password: ${{secrets.ECR_AWS_SECRET_ACCESS_KEY}}
    replaces-base: true

git

git 유형은 사용자 이름 및 암호를 지원합니다. 계정이 GitHub 계정인 경우 암호 대신 GitHub personal access token을(를) 사용할 수 있습니다.

YAML
registries:
  github-octocat:
    type: git
    url: https://github.com
    username: x-access-token
    password: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}

hex-organization

hex-organization 유형은 조직 및 키를 지원합니다.

이 레지스트리 유형은 url 옵션에 제공된 경로와 접두사가 일치합니다. 즉, 동일한 호스트에 여러 자격 증명을 제공할 수 있으며, 이 자격 증명은 고유 경로에 액세스하는 데 사용할 수 있습니다. 그러나 동일한 호스트에 여러 레지스트리가 없는 경우 레지스트리의 모든 경로가 자격 증명을 받도록 url에서 경로를 생략하는 것이 좋습니다.

YAML
registries:
  github-hex-org:
    type: hex-organization
    organization: github
    key: ${{secrets.MY_HEX_ORGANIZATION_KEY}}

hex-repository

hex-repository 형식은 인증 키를 지원합니다.

repo는 필수 필드이며, 종속성 선언에 사용되는 리포지토리의 이름과 일치해야 합니다.

public-key-fingerprint는 선택적 구성 필드로, 16진수 리포지토리에 대한 공개 키의 지문을 나타냅니다. public-key-fingerprint는 16진수에서 프라이빗 리포지토리와의 트러스트를 설정하는 데 사용됩니다. public-key-fingerprint 필드는 일반 텍스트로 나열하거나 Dependabot 비밀로 저장할 수 있습니다.

YAML
registries:
   github-hex-repository:
     type: hex-repository
     repo: private-repo
     url: https://private-repo.example.com
     auth-key: ${{secrets.MY_AUTH_KEY}}
     public-key-fingerprint: ${{secrets.MY_PUBLIC_KEY_FINGERPRINT}}

maven-repository

maven-repository 유형은 사용자 이름 및 암호를 지원합니다. 계정이 GitHub 계정인 경우 암호 대신 GitHub personal access token을(를) 사용할 수 있습니다.

이 레지스트리 유형은 url 옵션에 제공된 경로와 접두사가 일치합니다. 즉, 동일한 호스트에 여러 자격 증명을 제공할 수 있으며, 이 자격 증명은 고유 경로에 액세스하는 데 사용할 수 있습니다. 그러나 동일한 호스트에 여러 레지스트리가 없는 경우 레지스트리의 모든 경로가 자격 증명을 받도록 url에서 경로를 생략하는 것이 좋습니다.

YAML
registries:
  maven-artifactory:
    type: maven-repository
    url: https://acme.jfrog.io/artifactory/my-maven-registry
    username: octocat
    password: ${{secrets.MY_ARTIFACTORY_PASSWORD}}

npm-registry

npm-registry 유형은 사용자 이름 및 암호 또는 토큰을 지원합니다. 계정이 GitHub 계정인 경우 암호 대신 GitHub personal access token을(를) 사용할 수 있습니다.

사용자 이름 및 암호를 사용하는 경우 .npmrc의 인증 토큰에 base64로 인코드된 _password가 포함될 수 있습니다. 그러나 Dependabot 구성 파일에서 참조된 암호는 원래(인코드되지 않은) 암호여야 합니다.

Note

npm.pkg.github.com을 사용할 때는 경로를 포함하지 마세요. 대신 경로 없이 https://npm.pkg.github.com URL을 사용합니다.

YAML
registries:
  npm-npmjs:
    type: npm-registry
    url: https://registry.npmjs.org
    username: octocat
    password: ${{secrets.MY_NPM_PASSWORD}}  # Must be an unencoded password
    replaces-base: true
YAML
registries:
  npm-github:
    type: npm-registry
    url: https://npm.pkg.github.com
    token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
    replaces-base: true

보안상의 이유로 Dependabot은(는) 환경 변수를 설정하지 않습니다. Yarn(v2 이상)을 사용하려면 액세스하는 모든 환경 변수를 설정해야 합니다. .yarnrc.yml 파일에서 환경 변수에 액세스할 때는 ${ENV_VAR-fallback} 또는 ${ENV_VAR:-fallback}과 같은 대체 값을 제공해야 합니다. 자세한 내용은 Yarn 설명서의 Yarnrc 파일을 참조하세요.

nuget-feed

nuget-feed 유형은 사용자 이름 및 암호 또는 토큰을 지원합니다. 계정이 GitHub 계정인 경우 암호 대신 GitHub personal access token을(를) 사용할 수 있습니다.

YAML
registries:
  nuget-example:
    type: nuget-feed
    url: https://nuget.example.com/v3/index.json
    username: octocat@example.com
    password: ${{secrets.MY_NUGET_PASSWORD}}
YAML
registries:
  nuget-azure-devops:
    type: nuget-feed
    url: https://pkgs.dev.azure.com/.../_packaging/My_Feed/nuget/v3/index.json
    username: octocat@example.com
    password: ${{secrets.MY_AZURE_DEVOPS_TOKEN}}

pub-repository

pub-repository 유형은 URL 및 토큰을 지원합니다.

YAML
registries:
  my-pub-registry:
    type: pub-repository
    url: https://example-private-pub-repo.dev/optional-path
    token: ${{secrets.MY_PUB_TOKEN}}
updates:
  - package-ecosystem: "pub"
    directory: "/"
    schedule:
      interval: "weekly"
    registries:
      - my-pub-registry

python-index

python-index 유형은 사용자 이름 및 암호 또는 토큰을 지원합니다. 계정이 GitHub 계정인 경우 암호 대신 GitHub personal access token을(를) 사용할 수 있습니다.

이 레지스트리 유형은 url 옵션에 제공된 경로와 접두사가 일치합니다. 즉, 동일한 호스트에 여러 자격 증명을 제공할 수 있으며, 이 자격 증명은 고유 경로에 액세스하는 데 사용할 수 있습니다. 그러나 동일한 호스트에 여러 레지스트리가 없는 경우 레지스트리의 모든 경로가 자격 증명을 받도록 url에서 경로를 생략하는 것이 좋습니다.

YAML
registries:
  python-example:
    type: python-index
    url: https://example.com/_packaging/my-feed/pypi/example
    username: octocat
    password: ${{secrets.MY_BASIC_AUTH_PASSWORD}}
    replaces-base: true
YAML
registries:
  python-azure:
    type: python-index
    url: https://pkgs.dev.azure.com/octocat/_packaging/my-feed/pypi/example
    username: octocat@example.com
    password: ${{secrets.MY_AZURE_DEVOPS_TOKEN}}
    replaces-base: true

rubygems-server

rubygems-server 유형은 사용자 이름 및 암호 또는 토큰을 지원합니다. 계정이 GitHub 계정인 경우 암호 대신 GitHub personal access token을(를) 사용할 수 있습니다.

이 레지스트리 유형은 url 옵션에 제공된 경로와 접두사가 일치합니다. 즉, 동일한 호스트에 여러 자격 증명을 제공할 수 있으며, 이 자격 증명은 고유 경로에 액세스하는 데 사용할 수 있습니다. 그러나 동일한 호스트에 여러 레지스트리가 없는 경우 레지스트리의 모든 경로가 자격 증명을 받도록 url에서 경로를 생략하는 것이 좋습니다.

YAML
registries:
  ruby-example:
    type: rubygems-server
    url: https://rubygems.example.com
    username: octocat@example.com
    password: ${{secrets.MY_RUBYGEMS_PASSWORD}}
    replaces-base: true
YAML
registries:
  ruby-github:
    type: rubygems-server
    url: https://rubygems.pkg.github.com/octocat/github_api
    token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
    replaces-base: true

terraform-registry

terraform-registry 유형은 토큰을 지원합니다.

YAML
registries:
  terraform-example:
    type: terraform-registry
    url: https://terraform.example.com
    token: ${{secrets.MY_TERRAFORM_API_TOKEN}}