プライベート レジストリについて
Dependabot version updates を使うと依存関係を最新の状態に保ち、Dependabot security updates を使うと脆弱な依存関係を更新することができます。 Dependabot からパブリック リポジトリにアクセスできます。 さらに、Dependabot にプライベート パッケージ レジストリとプライベート GitHub リポジトリへのアクセスを許可して、プライベートおよび内部ソースの依存関係をパブリック依存関係と同様に最新かつ安全に保つことができます。
ほとんどのエコシステムでは、プライベート依存関係は通常、プライベート パッケージ レジストリに発行されます。 これらのプライベート レジストリはパブリックに相当するものに似ていますが、認証が必要です。
特定のエコシステムでは、パブリック レジストリへの呼び出しを削除することでプライベート レジストリに_のみ_アクセスするように Dependabot を構成できます。 詳しくは、「パブリック レジストリへの Dependabot アクセスの削除」をご覧ください。
プライベートにホストされているレジストリまたは内部ネットワークに制限されているレジストリへの Dependabot アクセスを許可するには、Dependabot を GitHub Actions セルフホステッド ランナーで実行するように構成します。 詳細については、「セルフホステッド ランナーでの 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"
以下のオプションを使用して、アクセス設定を指定します。 レジストリの設定には、type
と url
、そして通常は username
と password
の組み合わせまたは token
を含める必要があります。
パラメーター | パーパス |
---|---|
REGISTRY_NAME | 必須: レジストリの識別子を定義します。 |
type | 必須: レジストリの種類を特定します。 |
認証の詳細 | 必須: 認証の詳細を指定するためにサポートされるパラメーターは、レジストリの種類によって異なります。 |
url | 必須: このレジストリ内の依存関係にアクセスするために使う URL。 プロトコルはオプションです。 指定しないと、https:// が想定されます。 Dependabot が必要に応じて末尾のスラッシュを追加または無視します。 |
replaces-base | ブール値が true の場合、Dependabot により、そのエコシステムのベース URL ではなく、指定した url を使って依存関係が解決されます。 |
使用できる構成オプションとサポートされる種類の詳細については、「Dependabot オプション リファレンス」を参照してください。
Dependabot で使用する資格情報の格納
GitHub でサポートされているプライベート レジストリへのアクセス権を Dependabot に付与するには、レジストリのアクセス トークンまたはシークレットをリポジトリまたは Organization のシークレット ストアに格納します。
Dependabot に対する暗号化されたシークレットについて
Dependabot シークレットとは、Organization レベルまたはリポジトリレベルで作成する、暗号化された資格情報のことです。 シークレットを Organization レベルで追加した場合、そのシークレットにどのリポジトリがアクセスできるかを指定できます。 シークレットを使用して、プライベートパッケージレジストリにある依存関係を Dependabot が更新できるようにすることができます。 シークレットを追加すると、それが GitHub に届く前に暗号化され、それを Dependabot によりプライベート パッケージ レジストリにアクセスするために使用されるまで暗号化されたままとなります。
Dependabot シークレットには、Dependabot pull request によってトリガーされる GitHub Actions ワークフローで使用されるシークレットも含まれます。 Dependabot 自体では、これらのシークレットが使用されない場合がありますが、ワークフローでは必要です。 詳しくは、「GitHub Actions での Dependabot のトラブルシューティング」をご覧ください。
Dependabot シークレットを追加後は、dependabot.yml
設定ファイルで ${{secrets.NAME}}
のように参照できます。「NAME」は、シークレットに付けた名前としてください。 次に例を示します。
password: ${{secrets.MY_ARTIFACTORY_PASSWORD}}
password: ${{secrets.MY_ARTIFACTORY_PASSWORD}}
シークレットに名前を付ける
Dependabot シークレットの名前には、以下の制限があります。
- 英数字 (
[A-Z]
、[0-9]
) またはアンダースコア (_
) のみを含めることができます。 スペースは使用できません。 小文字を入力すると、大文字に変換されます。 GITHUB_
プレフィックスで始めることはできません。- 最初を数字にすることはできません。
Dependabot にリポジトリシークレットを追加する
個人アカウントのリポジトリにシークレットを作成するには、そのリポジトリのオーナーでなければなりません。 組織リポジトリのシークレットを作成するには、admin
アクセス権が必要です。
-
GitHub で、リポジトリのメイン ページに移動します。
-
リポジトリ名の下にある [設定] をクリックします。 [設定] タブが表示されない場合は、 [] ドロップダウン メニューを選び、 [設定] をクリックします。
-
サイド バーの [セキュリティ] セクションで、 [シークレットと変数] を選択し、[Dependabot] をクリックします。
-
[新しいリポジトリ シークレット] をクリックします。
-
[名前] 入力ボックスにシークレットの名前を入力します。
-
シークレットの値を入力します。
-
[シークレットの追加] をクリックします。
シークレットの名前が、Dependabot シークレットのページに一覧表示されます。 [更新] をクリックしてシークレットの値を変更できます。 [削除] をクリックしてシークレットを削除できます。
Dependabot に Organization シークレットを追加する
Organizationでシークレットを作成する場合、ポリシーを使用して、そのシークレットにアクセスできるリポジトリを制限できます。 たとえば、すべてのリポジトリにアクセスを許可したり、プライベート リポジトリまたは指定したリポジトリ のリストのみにアクセスを制限したりできます。
組織レベルでシークレットを作成するには、admin
アクセス権が必要です。
-
GitHub で、organization のメイン ページに移動します。
-
組織名の下で、 [設定] をクリックします。 [設定] タブが表示されない場合は、 [] ドロップダウン メニューを選び、 [設定] をクリックします。
-
サイド バーの [セキュリティ] セクションで、 [シークレットと変数] を選択し、[Dependabot] をクリックします。 [Private Registries] オプションは無視します。これは、code scanning の既定の設定でのみ使われます。
-
[新しい組織シークレット] をクリックします。
-
[名前] 入力ボックスにシークレットの名前を入力します。
-
シークレットの [値] を入力します。
-
[リポジトリアクセス] ドロップダウンリストから、アクセスポリシーを選びます。
-
[選択したリポジトリ] を選択した場合は、次のようにします。
- をクリックします。
- ダイアログ ボックスで、このシークレットにアクセスできるリポジトリを選びます。
- [選択の更新] をクリックします。
-
[シークレットの追加] をクリックします。
シークレットの名前が、Dependabotシークレットのページに一覧表示されます。 [更新] をクリックしてシークレット値またはそのアクセスポリシーを変更できます。 [削除] をクリックしてシークレットを削除できます。
ファイアウォール IP 規則の構成
レジストリ IP 許可リストに Dependabot関連の IP アドレスを追加することができます。
プライベートレジストリが IP 許可リストとともに設定されているなら、Dependabotがレジストリへのアクセスに使う IP アドレスは、メタ API エンドポイントで dependabot
の下にあります。 GitHub Actions セルフホステッド ランナーで Dependabot を実行する場合は、代わりに actions
キーの下にある IP アドレスを使用する必要があります。 詳細については、「メタデータ用 REST API エンドポイント」および「GitHub Actions ランナーの Dependabot について」を参照してください。
外部コードの実行を許可する
Dependabot に 1 つ以上のレジストリへのアクセスを許可すると、侵害されたパッケージからコードを保護するために、外部コードの実行は自動的に無効になります。 ただし、一部のバージョン更新プログラムに失敗する場合があります。
Dependabot にプライベート パッケージ レジストリへのアクセスを許可し、外部コードの実行を制限する必要がある場合は、insecure-external-code-execution
を allow
に設定できます。 外部コードの実行は、それを囲む updates
設定に関連付けられたレジストリ内のパッケージ マネージャーにのみアクセスできます。 最上位の registries
構成で定義されているレジストリへのアクセスは許可されません。
この例では、構成ファイルで、Dependabot が ruby-github
プライベート パッケージ レジストリにアクセスするのを許可します。 同じ updates
設定で、insecure-external-code-execution
が allow
に設定されています。これは、依存関係によって実行されるコードは ruby-github
レジストリにのみアクセスし、dockerhub
レジストリにはアクセスしないことを指します。
# 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"
# 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
composer-repository
docker-registry
git
hex-organization
hex-repository
maven-repository
npm-registry
nuget-feed
pub-repository
python-index
rubygems-server
terraform-registry
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
からパスを省略することをお勧めします。
registries: composer: type: composer-repository url: https://repo.packagist.com/example-company/ username: octocat password: ${{secrets.MY_PACKAGIST_PASSWORD}}
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-registry
タイプは、ユーザー名とパスワードをサポートします。 アカウントが GitHub アカウントの場合は、パスワードの代わりに GitHub personal access token を使用できます。
このレジストリの種類は、url
オプションで指定されたパスのプレフィックスと一致します。 つまり、同じホストに複数の資格情報を指定でき、これを使用して異なるパスにアクセスできます。 ただし、同じホストに複数のレジストリがない場合は、レジストリへのすべてのパスが資格情報を受け取るように、url
からパスを省略することをお勧めします。
registries: dockerhub: type: docker-registry url: https://registry.hub.docker.com username: octocat password: ${{secrets.MY_DOCKERHUB_PASSWORD}} replaces-base: true
registries:
dockerhub:
type: docker-registry
url: https://registry.hub.docker.com
username: octocat
password: ${{secrets.MY_DOCKERHUB_PASSWORD}}
replaces-base: true
docker-registry
タイプは、静的な AWS 資格情報を使ってプライベート アマゾン 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}} replaces-base: true
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 を使用できます。
registries: github-octocat: type: git url: https://github.com username: x-access-token password: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
registries:
github-octocat:
type: git
url: https://github.com
username: x-access-token
password: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
hex-organization
hex-organization
タイプは、Organization とキーをサポートします。
このレジストリの種類は、url
オプションで指定されたパスのプレフィックスと一致します。 つまり、同じホストに複数の資格情報を指定でき、これを使用して異なるパスにアクセスできます。 ただし、同じホストに複数のレジストリがない場合は、レジストリへのすべてのパスが資格情報を受け取るように、url
からパスを省略することをお勧めします。
registries: github-hex-org: type: hex-organization organization: github key: ${{secrets.MY_HEX_ORGANIZATION_KEY}}
registries:
github-hex-org:
type: hex-organization
organization: github
key: ${{secrets.MY_HEX_ORGANIZATION_KEY}}
hex-repository
hex-repository
タイプでは認証キーがサポートされています。
repo
は必須フィールドです。これは、依存関係宣言で使用されるリポジトリの名前と一致する必要があります。
public-key-fingerprint
は省略可能な構成フィールドで、Hex リポジトリの公開キーのフィンガー プリントを表します。 public-key-fingerprint
は、プライベート リポジトリとの信頼を確立するために Hex で使用されます。 public-key-fingerprint
フィールドはプレーン テキストで一覧表示することも、Dependabot シークレットとして格納することもできます。
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}}
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
からパスを省略することをお勧めします。
registries: maven-artifactory: type: maven-repository url: https://acme.jfrog.io/artifactory/my-maven-registry username: octocat password: ${{secrets.MY_ARTIFACTORY_PASSWORD}}
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 を使用してください。
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
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
registries: npm-github: type: npm-registry url: https://npm.pkg.github.com token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}} replaces-base: true
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 を使用できます。
registries: nuget-example: type: nuget-feed url: https://nuget.example.com/v3/index.json username: [email protected] password: ${{secrets.MY_NUGET_PASSWORD}}
registries:
nuget-example:
type: nuget-feed
url: https://nuget.example.com/v3/index.json
username: [email protected]
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: [email protected] password: ${{secrets.MY_AZURE_DEVOPS_TOKEN}}
registries:
nuget-azure-devops:
type: nuget-feed
url: https://pkgs.dev.azure.com/.../_packaging/My_Feed/nuget/v3/index.json
username: [email protected]
password: ${{secrets.MY_AZURE_DEVOPS_TOKEN}}
pub-repository
pub-repository
タイプは、URL とトークンをサポートします。
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
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
からパスを省略することをお勧めします。
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
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
registries: python-azure: type: python-index url: https://pkgs.dev.azure.com/octocat/_packaging/my-feed/pypi/example username: [email protected] password: ${{secrets.MY_AZURE_DEVOPS_TOKEN}} replaces-base: true
registries:
python-azure:
type: python-index
url: https://pkgs.dev.azure.com/octocat/_packaging/my-feed/pypi/example
username: [email protected]
password: ${{secrets.MY_AZURE_DEVOPS_TOKEN}}
replaces-base: true
rubygems-server
rubygems-server
タイプは、ユーザー名とパスワード、またはトークンをサポートします。 アカウントが GitHub アカウントの場合は、パスワードの代わりに GitHub personal access token を使用できます。
このレジストリの種類は、url
オプションで指定されたパスのプレフィックスと一致します。 つまり、同じホストに複数の資格情報を指定でき、これを使用して異なるパスにアクセスできます。 ただし、同じホストに複数のレジストリがない場合は、レジストリへのすべてのパスが資格情報を受け取るように、url
からパスを省略することをお勧めします。
registries: ruby-example: type: rubygems-server url: https://rubygems.example.com username: [email protected] password: ${{secrets.MY_RUBYGEMS_PASSWORD}} replaces-base: true
registries:
ruby-example:
type: rubygems-server
url: https://rubygems.example.com
username: [email protected]
password: ${{secrets.MY_RUBYGEMS_PASSWORD}}
replaces-base: true
registries: ruby-github: type: rubygems-server url: https://rubygems.pkg.github.com/octocat/github_api token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}} replaces-base: true
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
タイプは、トークンをサポートします。
registries: terraform-example: type: terraform-registry url: https://terraform.example.com token: ${{secrets.MY_TERRAFORM_API_TOKEN}}
registries:
terraform-example:
type: terraform-registry
url: https://terraform.example.com
token: ${{secrets.MY_TERRAFORM_API_TOKEN}}