Skip to main content

このバージョンの GitHub Enterprise サーバーはこの日付をもって終了となりました: 2024-07-09. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise サーバーにアップグレードしてください。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせください

Dependabot のプライベート レジストリの構成に関するガイダンス

この記事では、プライベート レジストリの構成に関する詳細情報と、コマンド ラインから実行してパッケージ マネージャーをローカルで構成できるコマンドについて説明します。

Dependabot のプライベート レジストリの構成について

この記事には、プライベート レジストリにアクセスするように Dependabot を構成するのに役立つ推奨事項とアドバイスが含まれています。

  • 各パッケージ マネージャーの dependabot.yml 構成ファイルの詳細なスニペット。
  • 重要な制限事項または注意事項。
  • 構成が機能していることをテストする方法を説明する手順。
  • 必要に応じた追加の構成オプション (たとえば、npm には設定する必要がある構成ファイルがあります)。
  • レジストリ ホストの構成に関するアドバイス。

次のパッケージ マネージャーのセットアップに関する詳細なガイダンスがあります。

また、次のレジストリ ホストのセットアップに関する推奨事項も記載してあります。

パッケージ マネージャーの構成

バンドル

Artifactory、Artifacts、GitHub Packages レジストリ、Nexus、および ProGet でサポートされています。

ユーザー名とパスワード、またはトークンを使用して認証できます。 詳しくは、「dependabot.yml ファイルの構成オプション」の ruby-gems を参照してください。

ユーザー名とパスワードを dependabot.yml 使用したファイルのスニペット。

registries:
  ruby-example:
    type: rubygems-server
    url: https://rubygems.example.com
    username: octocat@example.com
    password: ${{secrets.MY_RUBYGEMS_PASSWORD}}

次のファイルの dependabot.yml スニペットでは、トークンを使用します。 GitHub Packages レジストリ (xyz.pkg.github.com) を使用するこの種類のレジストリでは、トークンは実際には GitHub personal access token (PAT) です。

registries:
  ruby-github:
    type: rubygems-server
    url: https://rubygems.pkg.github.com/octocat/github_api
    token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}

メモ

GitHub リポジトリから直接ソースされた依存関係により、GitHub UI を介してリポジトリにアクセス Dependabot できます。 Dependabot にプライベート GitHub 依存関係へのアクセスを許可する方法については、「Dependabot によるプライベート依存関係へのアクセスを許可する」を参照してください。

Docker

Docker では、レジストリのユーザー名とパスワードの使用がサポートされています。 詳しくは、「dependabot.yml ファイルの構成オプション」の docker-registry を参照してください。

ユーザー名とパスワードを使用した dependabot.yml ファイルのスニペット。

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

docker-registry は、静的な AWS 認証情報を使ってプライベート Amazon ECR からプルするためにも使用できます。

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}}

メモ

Dependabot は、OCI 流通仕様を実装するすべてのコンテナー レジストリで動作します。 詳細については、https://github.com/opencontainers/distribution-spec/blob/main/spec.mdを参照してください。

Dependabot では、中央トークン サービスまたは HTTP 基本認証を介したプライベート レジストリへの認証がサポートされています。詳しくは、Docker ドキュメントのトークン認証仕様と Wikipedia の基本アクセス認証に関するページを参照してください。

制限事項と回避策

  • イメージ名は、Containerfiles、Helm ファイル、または yaml ファイルで常に検出されるとは限りません。
  • Dockerfile は、最初の FROM ディレクティブのバージョン更新のみを受け取る場合があります。
  • Dockerfile は、ARGディレクティブで指定されたイメージの更新を受け取りません。 COPY ディレクティブには使用可能な回避策があります。 詳細については、dependabot/dependabot-core リポジトリの「Dependabot は COPY Dockerfile ステートメントのイメージ参照を無視する」を参照してください。
  • Dependabot では、マルチステージ Docker ビルドはサポートされていません。 詳細については、dependabot/dependabot-core リポジトリの「Docker マルチステージ ビルドのサポート」を参照してください。

Gradle

Dependabot では Gradle は実行されませんが、特定の Gradle ファイルの更新はサポートされます。 詳しくは、「dependabot.yml ファイルの構成オプション」の「Gradle」を参照してください。

Gradle では、maven-repositoryレジストリ型がサポートされています。 詳しくは、「dependabot.yml ファイルの構成オプション」の maven-repository を参照してください。

maven-repository タイプは、ユーザー名とパスワードをサポートします。 アカウントが GitHub アカウントの場合は、パスワードの代わりに GitHub personal access token を使用できます。

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:
      - gradle-artifactory
    schedule:
      interval: "monthly"

メモ

特に、一部の依存関係がビルド時の依存関係である場合は、依存関係グラフで表されているすべての依存関係が表示されない場合があります。 依存関係送信 API を使用して、他の依存関係について GitHub に通知し、それらのセキュリティ更新プログラムを受け取ることができます。 詳しくは、「Dependency Submission API を使用する」を参照してください。

Maven

Maven では、ユーザー名とパスワードによる認証をサポートしています。 詳しくは、「dependabot.yml ファイルの構成オプション」の maven-repository を参照してください。

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

アカウントが GitHub アカウントの場合は、パスワードの代わりに GitHub personal access token を使用できます。

version: 2
registries:
  maven-github:
    type: maven-repository
    url: https://maven.pkg.github.com/octocat
    username: octocat
    password: ${{secrets.OCTOCAT_GITHUB_PAT}}
updates:
  - package-ecosystem: "maven"
    directory: "/"
    registries:
      - maven-github
    schedule:
      interval: "monthly"

メモ

特に、一部の依存関係がビルド時の依存関係である場合は、依存関係グラフで表されているすべての依存関係が表示されない場合があります。 依存関係送信 API を使用して、他の依存関係について GitHub に通知し、それらのセキュリティ更新プログラムを受け取ることができます。 詳しくは、「Dependency Submission API を使用する」を参照してください。

npm

dependabot.yml ファイル内の構成は、npm-registry型を使用して定義することも、指定したベース URL を介してすべてのレジストリ要求を送信するように Dependabot を構成することもできます。

構成ファイルを使用した npm-registry 型を使用

プライベート レジストリの構成を npm-registry 型で使用する dependabot.yml ファイルで定義できます。 詳しくは、「dependabot.yml ファイルの構成オプション」を参照してください。

次の dependabot.yml ファイルのスニペットでは、トークンが使用されます。 GitHub Packages レジストリ (xyz.pkg.github.com) を使用するこの種類のレジストリでは、トークンは実際には GitHub personal access token (PAT) です。

registries:
  npm-github:
    type: npm-registry
    url: https://npm.pkg.github.com
    token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}

npm エコシステムでは、プライベート レジストリの URL を含む .npmrc ファイルをリポジトリにチェックインする必要があります。

サンプル .npmrc ファイルの内容:

registry=https://<private-registry-url>

または、次のコマンドを使用して、既存の .npmrc ファイルにプライベート レジストリ URL を追加できます。

npm config set registry <url>

詳細については、npm のドキュメントのレジストリを参照してください。

また、構成のスコープを 単独の依存関係または組織のみに設定することもできます。この場合、トークンは組織に対してのみ有効になり、同じリポジトリの異なる組織に対して異なるトークンを使用できます。

npm config set @<org-name>:registry <url>

これにより、レジストリを持つ '.npmrc' が生成されます。

@<org-name>:registry=https://<private-registry-url>

npm は、replace-registry-hostを含むロックファイルでプライベート レジストリの URL を使用するように構成できます。 詳細については、npm ドキュメントの「レジストリ ホストの置き換え」を参照してください。

npm config set replace-registry-host "never"

replace-registry-host を使用する場合は、プライベート レジストリ URL を使用するようにロックファイルを再生成するためにローカルで npm install を実行する必要があります。 Dependabot は、更新を提供するときに同じ URL を使用します。

レジストリが構成されたら、構成が正しく有効であることを確認するために npm login を実行することもできます。 ロックファイルを再生成して、再度 npm install を実行することで、新しいプライベート レジストリを使用することもできます。

.npmrc ファイルがプロジェクト package.json と同じディレクトリにチェックされていること、およびファイルに環境変数やシークレットが含まれていないことを確認する必要があります。 monorepo を使用する場合、.npmrc ファイルはプロジェクトのルート ディレクトリに存在する必要があります。

指定したベース URL を介してレジストリ要求を送信するように Dependabot を構成する

指定したベース URL を介してすべてのレジストリ要求を送信するように Dependabot を構成できます。 Dependabot がパブリック依存関係にアクセスするには、レジストリに要求されたバージョンの依存関係の複製されたコピーがあるか、依存関係が使用できない場合にパブリック レジストリからトラフィックをフェッチできるようにする必要があります。

.npmrc ファイルにグローバル レジストリが定義されていない場合は、dependabot.ymlファイルで replaces-basetrue として設定できます。 詳しくは、「dependabot.yml ファイルの構成オプション」の replaces-base を参照してください。

メモ

GitHub リポジトリから直接ソースされた依存関係により、GitHub UI を介してリポジトリにアクセス Dependabot できます。 Dependabot にプライベート GitHub 依存関係へのアクセスを許可する方法については、「Dependabot によるプライベート依存関係へのアクセスを許可する」を参照してください。

スコープ付き依存関係 (@my-org/my-dep) の場合、Dependabot では、プロジェクトの .npmrc file でプライベート レジストリが定義されている必要があります。 個々のスコープのプライベート レジストリを定義するには、@myscope:registry=https://private_registry_url を使います。

レジストリは、httpsプロトコルを使用して構成する必要があります。

ニューゲット

Artifactory、Artifacts、GitHub Packages レジストリ、Nexus、および ProGet でサポートされています。

nuget-feed タイプは、ユーザー名とパスワード、またはトークンをサポートします。 詳しくは、「dependabot.yml ファイルの構成オプション」の nuget-feed を参照してください。

registries:
  nuget-example:
    type: nuget-feed
    url: https://nuget.example.com/v3/index.json
    username: octocat@example.com
    password: ${{secrets.MY_NUGET_PASSWORD}}
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}}

メモ

dependabot.yml ファイルでトークンを使用することもできます。 GitHub Packages レジストリ (xyz.pkg.github.com) を使用するこの種類のレジストリでは、トークンは実際には GitHub personal access token (PAT) です。

registries:
  nuget-azure-devops:
    type: nuget-feed
    url: https://pkgs.dev.azure.com/.../_packaging/My_Feed/nuget/v3/index.json
    token: ${{secrets.MY_AZURE_DEVOPS_TOKEN}}

Python

Artifactory、Azure Artifacts、Nexus、および ProGet でサポートされています。 GitHub Packages レジストリはサポートされていません。

python-index タイプは、ユーザー名とパスワード、またはトークンをサポートします。 詳しくは、「dependabot.yml ファイルの構成オプション」の python-index を参照してください。

registries:
  python-example:
    type: python-index
    url: https://example.com/_packaging/my-feed/pypi/example
    username: octocat
    password: ${{secrets.MY_BASIC_AUTH_PASSWORD}}
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}}
registries:
  python-gemfury:
    type: python-index
    url: https://pypi.fury.io/my_org
    token: ${{secrets.MY_GEMFURY_TOKEN}}

メモ

GitHub リポジトリから直接ソースされた依存関係により、GitHub UI を介してリポジトリにアクセス Dependabot できます。 Dependabot にプライベート GitHub 依存関係へのアクセスを許可する方法については、「Dependabot によるプライベート依存関係へのアクセスを許可する」を参照してください。

url には、URL、組織、および「フィード」またはリポジトリが含まれている必要があります。

Yarn

Yarn レジストリでは、npm レジストリと同様の構成が使用されます。 詳しくは、「dependabot.yml ファイルの構成オプション」の npm-registry を参照してください。

registries:
  yarn-github:
    type: npm-registry
    url: https://npm.pkg.github.com
    token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
  • プライベート レジストリの場合は、.yarnrc.ymlファイル (Yarn 3 の場合) または .yarnrc ファイル (Yarn クラシックの場合) にチェックインする必要があります。
  • yarn 構成ファイルには環境変数を含めてはなりません。
  • https を使用して、dependabot.ymlファイルに一覧表示されているプライベート レジストリを構成する必要があります。

Yarn Classic

dependabot.yml ファイルでプライベート レジストリ構成を指定するか、標準のパッケージ マネージャーの手順に従って Yarn Classic を設定できます。

dependabot.yml ファイルのプライベート レジストリの構成を定義します

dependabot.yml ファイルのプライベート レジストリの構成を定義できます。 詳しくは、「dependabot.yml ファイルの構成オプション」の「プライベート レジストリの設定オプション」をご覧ください。

プライベート レジストリがプロジェクトの yarn.lock ファイルの依存関係ソースとして確実にリストされるようにするには、プライベート レジストリにアクセスできるマシンで yarn install を実行する必要があります。 Yarn によって、プライベート レジストリの URL を含むように解決済みフィールドが更新されるはずです。

encoding@^0.1.11:
  version "0.1.13"
  resolved "https://private_registry_url/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
  dependencies:
    iconv-lite "^0.6.2"
パッケージ マネージャーからの標準的な手順に従う

yarn.lock ファイルでプライベート レジストリが依存関係ソースとしてリストされない場合は、標準パッケージ マネージャーの手順に従って Yarn Classic を設定できます。

  1. dependabot.yml ファイルのプライベート レジストリの構成を定義します。

  2. その後、次のいずれかを実行できます。

    • キー レジストリを使用してプロジェクト ルート内の .yarnrc.yml ファイルにレジストリを追加して、プライベート レジストリを .yarnrc ファイルに手動で設定するか、または
    • ターミナルで yarn config set registry <private registry URL> を実行して、同じアクションを実行します。

    定義されたプライベート レジストリを持つ .yarnrc の例:registry https://nexus.example.com/repository/yarn-all

Yarn Berry (v3)

構成の詳細については、Yarn ドキュメントの 「設定 (.yarnrc.yml) 」を参照してください。

Yarn Classic と同様に、dependabot.ymlファイルでプライベート レジストリ構成を指定するか、パッケージ マネージャーの指示に従って Yarn Berry を設定できます。

dependabot.yml ファイルのプライベート レジストリの構成を定義します

dependabot.yml ファイルのプライベート レジストリの構成を定義できます。 詳しくは、「dependabot.yml ファイルの構成オプション」の「プライベート レジストリの設定オプション」をご覧ください。

プライベート レジストリがプロジェクトの yarn.lock ファイルの依存関係ソースとして確実にリストされるようにするには、プライベート レジストリにアクセスできるマシンで yarn install を実行します。 Yarn によって、プライベート レジストリの URL を含むように解決済みフィールドが更新されるはずです。

encoding@^0.1.11:
  version "0.1.13"
  resolved "https://private_registry_url/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
  dependencies:
    iconv-lite "^0.6.2"

npmAuthIdent または npmAuthToken でプライベート レジストリを構成することもできます。 詳しくは、Yarn ドキュメントの「npmAuthIdent」と「npmAuthToken」を参照してください。

yarn config set registry <url>

構成のスコープは、単独の依存関係または組織にのみ適用できます。

yarn config set @<SCOPE>:registry <url>

最後に、構成が正しく有効であることを確認するために yarn login を実行することをお勧めします。 ロックファイルを再生成して、再度 yarn install を実行することで、新しいプライベート レジストリを使用することもできます。

パッケージ マネージャーからの標準的な手順に従う

yarn.lock ファイルでプライベート レジストリが依存関係ソースとしてリストされない場合は、通常のパッケージ マネージャーの手順に従って Yarn Berry を設定できます。

  1. dependabot.yml ファイルのプライベート レジストリの構成を定義します。

  2. その後、次のいずれかを実行できます。

    • キー npmRegistryServer を使用してプロジェクト ルート内の .yarnrc.yml ファイルにレジストリを追加して、プライベート レジストリを .yarnrc ファイルに手動で設定するか、または
    • ターミナルで yarn config set npmRegistryServer <private registry URL> を実行して、同じアクションを実行します。

    構成されたプライベート レジストリを持つ .yarnrc.yml ファイルの例: npmRegistryServer: "https://nexus.example.com/repository/yarn-all"

    詳細については、Yarn ドキュメントの「npmRegistryServer」を参照してください。

メモ

GitHub リポジトリから直接ソースされた依存関係により、GitHub UI を介してリポジトリにアクセス Dependabot できます。 Dependabot にプライベート GitHub 依存関係へのアクセスを許可する方法については、「Dependabot によるプライベート依存関係へのアクセスを許可する」を参照してください。

スコープ付き依存関係 (@my-org/my-dep) の場合、Dependabot では、プロジェクトの .yarnrc file でプライベート レジストリが定義されている必要があります。 個々のスコープのプライベート レジストリを定義するには、@myscope:registry" "https://private_registry_url" を使います。

プライベート レジストリ ホストの構成

Artifactory

Artifactory の構成の詳細については、JFrog Artifactory ドキュメントの 「Artifactory の構成」を参照してください。

リモート リポジトリ

リモート リポジトリは、ビルド成果物と依存関係のキャッシュとして機能します。 ビルド ツールでは、グローバル依存関係リポジトリにアクセスする必要なく、成果物キャッシュを使用できるため、ビルド時間が短縮されます。 詳細については、JFrog Artifactory ドキュメントの「リモート リポジトリ」を参照してください。

この replace-base 設定を使用する場合は、プライベート レジストリに依存関係が見つからない場合に、Dependabot が別のレジストリにアクセスできるようにする場合は、Artifactory のリモート リポジトリも構成する必要があります。

仮想レジストリ

仮想レジストリを使用して、すべてのプライベート依存関係とパブリック依存関係を 1 つのドメインでグループ化できます。 詳細については、JFrog Artifactory ドキュメントの「npm Registry」を参照してください。

制限事項と回避策

この target branch 設定は、Artifactory の Dependabot security updates では機能しません。 401 認証エラーが発生した場合は、dependabot.ymlファイルから target-branch プロパティを削除する必要があります。 詳細については、JFrog Artifactory ドキュメントの「セキュリティ更新プログラムのために Artifactory npm プライベート レジストリとの接続が開始されたとき、ARTIFACTORY: GitHub Dependabot セキュリティ更新プログラムが 401 認証エラーで失敗する理由」を参照してください。

Azure Artifacts

Azure Artifacts の詳細と、Azure Artifacts を使用するように Dependabot を構成する方法については、Azure Artifacts ドキュメントの「Azure DevOps」と「Azure Artifacts で GitHub の Dependabot を使用する」をそれぞれ参照してください。

Azure Artifacts レジストリの例:

registries:
  nuget-azure-devops:
    type: nuget-feed
    url: https://pkgs.dev.azure.com/my_org/_packaging/public/nuget/v3/index.json
    token: ${{secrets.AZURE_DEVOPS_TOKEN}}

Azure Artifacts パスワードは、エンコードされていないトークンである必要があり、トークン後に : を含める必要があります。 さらに、パスワードを base64 でエンコードすることはできません。

プライベート レジストリが正常にアクセスされたかどうかをチェックするには、Dependabot ログを確認します。

GitHub Packages レジストリ

GitHub Packages レジストリについて詳しくは、「GitHub Packagesレジストリの利用」をご覧ください。 この記事では、次のレジストリを構成する方法を説明するページにアクセスできます。

  • Bundler (rubygems)
  • Docker (コンテナー)
  • GitHub Actions
  • グレイドル
  • メイヴン
  • Npm
  • NuGet
  • Yarn
registries:
  github:
    type: npm-registry
    url: https://npm.pkg.github.com
    token: ${{ secrets.<token> }}

メモ

Python コンテナー レジストリはありません。

特定の組織を対象とするプライベート レジストリの場合、Dependabot は URL に組織名を dependabot.yml ファイルに含める必要があります。

Nexus

Nexus の構成の詳細については、Sonatype ドキュメントの「リポジトリ マネージャー 3」を参照してください。

メモ

Nexus Repository Pro では、ユーザー トークンを有効にすることができます。 詳細については、Sonatype ドキュメントの ユーザー トークン を参照してください。

Nexus レジストリの例:

registries:
  npm-nexus:
    type: npm-registry
    url: https://registry.example.com/repository/npm-internal/
    token: ${{secrets.NEXUS_NPM_TOKEN}}

リバース プロキシの背後で Nexus を実行している場合は、curl -v -H 'Authorization: Bearer <token>' 'https://<nexus-repo-url>/repository/<repo-name>/@<scope>%2<package>' を使用することで認証トークンを使用してサーバーにアクセスできるようにする必要があります。 詳細については、Sonatype ドキュメントの「リバース プロキシの背後で実行」を参照してください。

Nexus ホストに到達できる IP を制限する場合は、Dependabot IP を許可リストに追加する必要があります。

プライベート レジストリで依存関係が使用できない場合に備えて、レジストリをパブリック レジストリにアクセスできるようにプロキシできます。 ただし、Dependabot でプライベート レジストリにのみアクセスし、パブリック レジストリにまったくアクセスしないようにすることもできます。 詳細については、Sonatype ドキュメントの「クイック スタート ガイド - Maven と NPM のプロキシ」および「パブリック レジストリへの Dependabot アクセスの削除」を参照してください。

ProGet

ProGet の詳細と、ProGet でフィードを操作するように Dependabot を構成する方法については、ProGet のドキュメントを参照してください。

NuGet フィードの ProGet レジストリ構成の例:

registries:
  proget-nuget-feed:
    type: nuget-feed
    url: https://proget.corp.local/nuget/MyNuGetFeed/v3/index.json
    token: ${{secrets.PROGET_APK_KEY}}

Bundler (rubygems) の ProGet レジストリ構成の例:

registries:
  proget-gems-feed:
    type: rubygems-server
    url: https://proget.corp.local/rubygems/MyRubygemsFeed
    token: ${{secrets.PROGET_APK_KEY}}

Python (PyPI) の ProGet レジストリ構成の例:

registries:
  proget-python-feed:
    type: python-index
    url: https://proget.corp.local/pypi/MyPythonFeed
    token: ${{secrets.PROGET_APK_KEY}}

メモ

token は、パッケージを表示するアクセス権を持つ API キーである必要があります。 詳細については、ProGet ドキュメントの「API アクセスと API キー」を参照してください。

プライベート レジストリが正常にアクセスされたかどうかをチェックするには、Dependabot ログを確認します。