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-base
を true
として設定できます。 詳しくは、「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 を設定できます。
-
dependabot.yml
ファイルのプライベート レジストリの構成を定義します。 -
その後、次のいずれかを実行できます。
- キー レジストリを使用してプロジェクト ルート内の
.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 を設定できます。
-
dependabot.yml
ファイルのプライベート レジストリの構成を定義します。 -
その後、次のいずれかを実行できます。
- キー
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がレジストリへのアクセスに使う IP アドレスは、メタ API エンドポイントで dependabot キーの下にあります。 詳しくは、「メタデータ用 REST API エンドポイント」を参照してください。
- 現在の IP は次のとおりです。
- "18.213.123.130/32"
- "3.217.79.163/32"
- "3.217.93.44/32" 詳細については、Sonatype ドキュメントの「Nexus Repository Manager のセキュリティ保護」を参照してください。
プライベート レジストリで依存関係が使用できない場合に備えて、レジストリをパブリック レジストリにアクセスできるようにプロキシできます。 ただし、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 ログを確認します。