Acerca de la configuración de Dependabot para registros privados
Este artículo contiene recomendaciones y consejos para ayudarle a configurar Dependabot para acceder al registro privado, junto con:
- Fragmentos detallados del archivo de configuración
dependabot.yml
para cada administrador de paquetes. - Limitaciones o advertencias importantes.
- Pasos que explican cómo probar que la configuración funciona.
- Opciones de configuración adicionales, siempre que corresponda (por ejemplo, npm tiene un archivo de configuración que debe establecerse).
- Asesoramiento sobre la configuración de hosts del Registro.
Encontrarás instrucciones detalladas para la configuración de los siguientes administradores de paquetes:
También encontrará recomendaciones para la configuración de los siguientes hosts del Registro:
Configuración de administradores de paquetes
Bundler
Compatible con Artifactory, Artifacts, el registro , Nexus y ProGet.
Puede autenticarse con un nombre de usuario y una contraseña o con un token. Para más información, consulta ruby-gems
en "Opciones de configuración para el archivo dependabot.yml".
Fragmento de un archivo dependabot.yml
mediante un nombre de usuario y una contraseña.
registries:
ruby-example:
type: rubygems-server
url: https://rubygems.example.com
username: octocat@example.com
password: ${{secrets.MY_RUBYGEMS_PASSWORD}}
El fragmento de código del archivo dependabot.yml
siguiente usa un token. Para este tipo de registro utilizando el registro GitHub Packages (xyz.pkg.github.com
), el token es de hecho uno 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}}
Notas
Las dependencias procedentes directamente de un repositorio GitHub proporcionan acceso a Dependabot al repositorio a través de la interfaz de usuario de GitHub. Para obtener información sobre cómo permitir que Dependabot accedan a dependencias privadas de GitHub, vea "Permitir que Dependabot accedan a dependencias privadas".
Docker
Docker admite el uso de un nombre de usuario y una contraseña para los registros. Para más información, consulta docker-registry
en "Opciones de configuración para el archivo dependabot.yml".
Fragmento de archivo dependabot.yml
mediante un nombre de usuario y una contraseña.
registries:
dockerhub:
type: docker-registry
url: https://registry.hub.docker.com
username: octocat
password: ${{secrets.MY_DOCKERHUB_PASSWORD}}
docker-registry
también se puede utilizar para extraer de Amazon ECR privado utilizando credenciales estáticas de AWS.
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}}
Notas
Dependabot funciona con cualquier registro de contenedores que aplique la Especificación de Distribución de la Iniciativa de Contenedores Abiertos (OCI). Para obtener más información, vea https://github.com/opencontainers/distribution-spec/blob/main/spec.md.
Dependabot admite la autenticación en registros privados a través de un servicio de token central o HTTP Basic Auth. Para más información, consulte Especificación de autenticación por token en la documentación de Docker y Autenticación básica de acceso en Wikipedia.
Limitaciones y soluciones alternativas
- Es posible que los nombres de imagen no siempre se detecten en archivos Containerfiles, archivos de Helm o archivos yaml.
- Dockerfiles sólo pueden recibir una actualización de la versión de la primera directiva
FROM
. - Dockerfiles no reciben actualizaciones de las imágenes especificadas con la directiva
ARG
. Hay una solución alternativa disponible para la directivaCOPY
. Para obtener más información, consulte "Dependabot omite las referencias de imagen en la instrucción COPY Dockerfile" del repositoriodependabot/dependabot-core
. - Dependabot no admite compilaciones de Docker de varias fases. Para obtener más información, consulte "Compatibilidad con compilaciones de varias fases de Docker" en el repositorio
dependabot/dependabot-core
.
Gradle
Dependabot no ejecuta Gradle, pero admite actualizaciones de ciertos archivos Gradle. Para más información, consulte "Gradle" en "Opciones de configuración para el archivo dependabot.yml".
Gradle admite el tipo de registro maven-repository
. Para más información, consulta maven-repository
en "Opciones de configuración para el archivo dependabot.yml".
El tipo maven-repository
admite el nombre de usuario y la contraseña. Si la cuenta es una cuenta de GitHub, puede usar un GitHub personal access token en lugar de la contraseña.
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"
Notas
Es posible que no veas todas las dependencias representadas en el gráfico de dependencias, especialmente si algunas dependencias son dependencias en tiempo de compilación. Puedes usar la API de envío de dependencias para informar a API de envío de dependencias sobre las demás dependencias y recibir actualizaciones de seguridad para ellas. Para más información, consulta "Uso de la Dependency submission API".
Maven
Maven admite la autenticación mediante nombre de usuario y contraseña. Para más información, consulta maven-repository
en "Opciones de configuración para el archivo dependabot.yml".
registries:
maven-artifactory:
type: maven-repository
url: https://acme.jfrog.io/artifactory/my-maven-registry
username: octocat
password: ${{secrets.MY_ARTIFACTORY_PASSWORD}}
Si la cuenta es una cuenta de GitHub, puede usar un GitHub personal access token en lugar de la contraseña.
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"
Notas
Es posible que no veas todas las dependencias representadas en el gráfico de dependencias, especialmente si algunas dependencias son dependencias en tiempo de compilación. Puedes usar la API de envío de dependencias para informar a API de envío de dependencias sobre las demás dependencias y recibir actualizaciones de seguridad para ellas. Para más información, consulta "Uso de la Dependency submission API".
npm
Puede definir la configuración en el archivo dependabot.yml
utilizando el tipo npm-registry
, o configurar Dependabot para enviar todas las solicitudes de registro a través de una URL base especificada.
Uso del tipo npm-registry
en el archivo de configuración
Puede definir la configuración del registro privado en un archivo dependabot.yml
utilizando el tipo npm-registry
. Para obtener más información, vea «Opciones de configuración para el archivo dependabot.yml».
El fragmento de código de un archivo dependabot.yml
siguiente usa un token. Para este tipo de registro utilizando el registro GitHub Packages (xyz.pkg.github.com
), el token es de hecho uno GitHub personal access token (PAT) .
registries:
npm-github:
type: npm-registry
url: https://npm.pkg.github.com
token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
El ecosistema npm requiere que se registre en el repositorio un archivo .npmrc
con la dirección URL del registro privado.
Ejemplo del contenido de un archivo.npmrc
:
registry=https://<private-registry-url>
Como alternativa, puedes agregar la dirección URL del registro privado a un archivo .npmrc
existente con el siguiente comando.
npm config set registry <url>
Para más información, consulte el registro en la documentación de npm.
También puede definir el ámbito de la configuración en una sola dependencia u organización, en cuyo caso el token solo será válido para la organización y se pueden usar tokens diferentes para diferentes organizaciones para el mismo repositorio.
npm config set @<org-name>:registry <url>
Esto daría lugar a ".npmrc" en el registro:
@<org-name>:registry=https://<private-registry-url>
npm se puede configurar para usar la dirección URL del registro privado en archivos de bloqueo con replace-registry-host
. Para más información, consulte replace-registry-host en la documentación de npm.
npm config set replace-registry-host "never"
Si usa replace-registry-host
, debe ejecutar npm install
localmente para volver a generar el archivo de bloqueo para usar la dirección URL del Registro privado. Dependabot usará la misma dirección URL al proporcionar actualizaciones.
Una vez configurado el registro, también puede ejecutar npm login
para comprobar que la configuración es correcta y válida. El archivo de bloqueo también se puede volver a generar para usar el nuevo registro privado ejecutando npm install
de nuevo.
Debe asegurarse de que el archivo .npmrc
está protegido en el mismo directorio que package.json
del proyecto y que el archivo no incluye ninguna variable de entorno ni secretos.
Si usa un monorepo, el archivo .npmrc
debe estar en el directorio raíz del proyecto.
Configuración de Dependabot para enviar solicitudes del registro a través de una dirección URL base especificada
Puede configurar Dependabot para enviar todas las solicitudes del Registro a través de una dirección URL base especificada. Para que Dependabot accedan a una dependencia pública, el registro debe tener una copia clonada de la dependencia con la versión solicitada o permitir que el tráfico capture desde un registro público si la dependencia no está disponible.
Si no hay ningún registro global definido en un archivo .npmrc
, puede establecer replaces-base
como true
en el archivo dependabot.yml
. Para más información, consulte "replaces-base
" en "Opciones de configuración para el archivo dependabot.yml".
Notas
Las dependencias procedentes directamente de un repositorio GitHub proporcionan acceso a Dependabot al repositorio a través de la interfaz de usuario de GitHub. Para obtener información sobre cómo permitir que Dependabot accedan a dependencias privadas de GitHub, vea "Permitir que Dependabot accedan a dependencias privadas".
En el caso de las dependencias con ámbito (@my-org/my-dep
), Dependabot requiere que el registro privado se defina en .npmrc file
del proyecto. Para definir registros privados para ámbitos individuales, usa @myscope:registry=https://private_registry_url
.
Los registros deben configurarse mediante el protocolo https
.
NuGet
Compatible con Artifactory, Artifacts, el registro , Nexus y ProGet.
El tipo nuget-feed
admite el nombre de usuario y la contraseña, o el token. Para más información, consulta nuget-feed
en "Opciones de configuración para el archivo dependabot.yml".
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}}
Notas
También puede usar un token en el archivo dependabot.yml
. Para este tipo de registro utilizando el registro GitHub Packages (xyz.pkg.github.com
), el token es de hecho uno 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
Compatible con Artifactory, Azure Artifacts, Nexus y ProGet. El registro GitHub Packages no es compatible.
El tipo python-index
admite el nombre de usuario y la contraseña, o el token. Para más información, consulta python-index
en "Opciones de configuración para el archivo dependabot.yml".
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}}
Notas
Las dependencias procedentes directamente de un repositorio GitHub proporcionan acceso a Dependabot al repositorio a través de la interfaz de usuario de GitHub. Para obtener información sobre cómo permitir que Dependabot accedan a dependencias privadas de GitHub, vea "Permitir que Dependabot accedan a dependencias privadas".
url
debe contener la dirección URL, la organización y el repositorio "feed".
Yarn
El registro de Yarn usa una configuración similar a la del registro de npm. Para más información, consulte "npm-registry
" en Opciones de configuración para el archivo dependabot.yml".
registries:
yarn-github:
type: npm-registry
url: https://npm.pkg.github.com
token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
- Para los registros privados, tiene que registrar un archivo
.yarnrc.yml
(para Yarn 3) o un archivo.yarnrc
(para Yarn Classic). - Los archivos de configuración de yarn no deben contener variables de entorno.
- Debe configurar registros privados enumerados en el archivo
dependabot.yml
mediantehttps
.
Yarn Classic
Puede especificar la configuración del Registro privado en el archivo dependabot.yml
o configurar Yarn Classic según las instrucciones del administrador de paquetes estándar.
Definición de la configuración del registro privado en el archivo dependabot.yml
Puede definir la configuración del registro privado en su archivo dependabot.yml
. Para obtener más información, vea "Opciones de configuración para registros privados" en "Opciones de configuración para el archivo dependabot.yml".
Para asegurarse de que el registro privado aparece como fuente de dependencia en el archivo yarn.lock
del proyecto, debe ejecutar yarn install
en una máquina con acceso al registro privado. Yarn debe actualizar el campo resuelto para incluir la URL del registro privado.
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"
Siguiendo las instrucciones estándar del administrador de paquetes
Si el archivo yarn.lock
no lista el registro privado como origen de la dependencia, puede configurar Yarn Classic según las instrucciones estándar del administrador de paquetes.
-
Defina la configuración del registro privado en el archivo
dependabot.yml
. -
Después puede hacer lo siguiente:
- Establecer manualmente el registro privado en el archivo
.yarnrc
agregando el registro a un archivo.yarnrc.yml
en la raíz del proyecto con el registro de claves o - Realizar la misma acción ejecutando
yarn config set registry <private registry URL>
en el terminal.
Ejemplo de
.yarnrc
con un registro privado definido:registry https://nexus.example.com/repository/yarn-all
- Establecer manualmente el registro privado en el archivo
Yarn Berry (v3)
Para obtener información sobre la configuración, consulte Configuración (.yarnrc.yml) en la documentación de Yarn.
Al igual que con Yarn Classic, puede especificar la configuración del registro privado en el archivo dependabot.yml
o configurar Yarn Berry según las instrucciones del administrador de paquetes.
Definición de la configuración del registro privado en el archivo dependabot.yml
Puede definir la configuración del registro privado en su archivo dependabot.yml
. Para obtener más información, vea "Opciones de configuración para registros privados" en "Opciones de configuración para el archivo dependabot.yml".
Para asegurarte de que el registro privado aparece como origen de dependencia en el archivo yarn.lock
del proyecto, ejecuta yarn install
en una máquina con acceso privado al registro. Yarn debe actualizar el campo resuelto para incluir la URL del registro privado.
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"
También puede configurar registros privados con npmAuthIdent
o npmAuthToken
. Para más información, consulte "npmAuthIdent" y "npmAuthToken" en la documentación de Yarn.
yarn config set registry <url>
Puede definir el ámbito de la configuración para que solo cubra una sola dependencia u organización.
yarn config set @<SCOPE>:registry <url>
Por último, se recomienda ejecutar yarn login
para comprobar que la configuración es correcta y válida. El archivo de bloqueo también se puede volver a generar para usar el nuevo registro privado ejecutando yarn install
de nuevo.
Siguiendo las instrucciones estándar del administrador de paquetes
Si el archivo yarn.lock
no muestra el registro privado como origen de dependencia, puede configurar Yarn Berry según las instrucciones normales del administrador de paquetes.
-
Defina la configuración del registro privado en el archivo
dependabot.yml
. -
Después puede hacer lo siguiente:
- Establecer manualmente el registro privado en el archivo
.yarnrc
agregando el registro a un archivo.yarnrc.yml
en la raíz del proyecto con la clavenpmRegistryServer
o - Realizar la misma acción ejecutando
yarn config set npmRegistryServer <private registry URL>
en el terminal.
Ejemplo de un archivo
.yarnrc.yml
con un registro privado configurado:npmRegistryServer: "https://nexus.example.com/repository/yarn-all"
Para más información, consulte npmRegistryServer en la documentación de Yarn.
- Establecer manualmente el registro privado en el archivo
Notas
Las dependencias procedentes directamente de un repositorio GitHub proporcionan acceso a Dependabot al repositorio a través de la interfaz de usuario de GitHub. Para obtener información sobre cómo permitir que Dependabot accedan a dependencias privadas de GitHub, vea "Permitir que Dependabot accedan a dependencias privadas".
En el caso de las dependencias con ámbito (@my-org/my-dep
), Dependabot requiere que el registro privado se defina en .yarnrc file
del proyecto. Para definir registros privados para ámbitos individuales, usa @myscope:registry" "https://private_registry_url"
.
Configuración de hosts de registro privados
Artifactory
Para obtener información sobre la configuración de Artifactory, consulte Configuración de Artifactory en la documentación de JFrog Artifactory.
Repositorios remotos
Los repositorios remotos sirven como memoria caché para crear artefactos y dependencias. En lugar de tener que ponerse en contacto con un repositorio de dependencias global, la herramienta de compilación puede usar la caché de artefactos, lo que acelerará los tiempos de compilación. Para obtener más información, consulte Repositorios remotos en la documentación de JFrog Artifactory.
Si usa la configuraciónreplace-base
, también debe configurar un repositorio remoto para Artifactory si desea que Dependabot acceda a otro registro siempre que no se encuentre la dependencia en el registro privado.
Registro virtual
Puede usar un registro virtual para agrupar todas las dependencias públicas y privadas en un solo dominio. Para obtener más información, consulte npm Registry en la documentación de JFrog Artifactory.
Limitaciones y soluciones alternativas
La configuración target branch
no funciona con Dependabot security updates
en Artifactory. Si recibe un error de autenticación 401, debe quitar la propiedad target-branch
del archivo dependabot.yml
. Para más información, consulte ARTIFACTORY: Por qué las actualizaciones de seguridad de GitHub Dependabot están fallando con un error de autenticación 401, al iniciar una conexión con el registro privado Artifactory npm para actualizaciones de seguridad en la documentación de JFrog Artifactory.
Azure Artifacts
Para obtener información sobre Azure Artifacts e instrucciones sobre cómo configurar Dependabot para trabajar con Azure Artifacts, consulte Azure DevOps en la documentación de Azure Artifacts y Uso de Dependabot en GitHub con Azure Artifacts, respectivamente.
Ejemplo del registro de 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}}
La contraseña de Azure Artifacts debe ser un token no codificado y debe incluir :
después del token. Además, la contraseña no puede codificarse en base64.
Puedes comprobar si se ha accedido correctamente al registro privado si examinas los registros de Dependabot.
Registro GitHub Packages
Para más información sobre GitHub Packages, consulte "Trabajar con un registro de Paquetes de GitHub". Desde ese artículo, puede acceder a las páginas que describen cómo configurar los registros siguientes.
- Bundler (rubygems)
- Docker (contenedores)
- GitHub Actions
- Gradle
- Maven
- npm
- NuGet
- Yarn
registries:
github:
type: npm-registry
url: https://npm.pkg.github.com
token: ${{ secrets.<token> }}
Notas
No hay ningún registro de contenedor de Python.
En el caso de los registros privados cuyo ámbito es una organización determinada, Dependabot espera que la dirección URL incluya el nombre de la organización en el archivo dependabot.yml
.
Nexus
Para obtener información sobre la configuración de Nexus, vea Administrador de Repositorios 3 en la documentación de Sonatype.
Notas
Con Nexus Repository Pro, puede habilitar tokens de usuario. Para obtener más información, consulte Tokens de usuario en la documentación de Sonatype.
Ejemplo del registro Nexus:
registries:
npm-nexus:
type: npm-registry
url: https://registry.example.com/repository/npm-internal/
token: ${{secrets.NEXUS_NPM_TOKEN}}
Si ejecuta Nexus detrás de un proxy inverso, debe asegurarse de que el servidor sea accesible mediante un token de autenticación mediante curl -v -H 'Authorization: Bearer <token>' 'https://<nexus-repo-url>/repository/<repo-name>/@<scope>%2<package>'
. Para obtener más información, vea Ejecutar detrás de un proxy inverso en la documentación de Sonatype.
Si va a restringir las direcciones IP que pueden llegar al host de Nexus, debe agregar las direcciones IP de Dependabot a la lista de permitidos.
- Puede encontrar las direcciones IP que utiliza Dependabot para acceder al registro en el punto de conexión de meta API, en la clave dependabot. Para obtener más información, vea «Puntos de conexión de la API de REST para metadatos».
- Estas son las direcciones IP actuales:
- "18.213.123.130/32"
- "3.217.79.163/32"
- "3.217.93.44/32" Para obtener más información, vea Protección del Administrador de repositorios nexus en la documentación de Sonatype.
Los registros se pueden redirigir mediante proxy para comunicarse con un registro público en caso de que una dependencia no esté disponible en el registro privado. Sin embargo, es posible que quieras que Dependabot solo acceda al registro privado y no acceda de ninguna manera al registro público. Para más información, consulte la "Guía de inicio rápido - Proxy de Maven y NPM" en la documentación de Sonatype, y "Eliminación del acceso de Dependabot a registros públicos".
ProGet
Para obtener información sobre ProGet e instrucciones sobre cómo configurar Dependabot para trabajar con fuentes en ProGet, consulta la documentación de ProGet.
Ejemplo de configuración del registro ProGet para una fuente NuGet:
registries:
proget-nuget-feed:
type: nuget-feed
url: https://proget.corp.local/nuget/MyNuGetFeed/v3/index.json
token: ${{secrets.PROGET_APK_KEY}}
Ejemplo de configuración del Registro ProGet para Bundler (rubygems):
registries:
proget-gems-feed:
type: rubygems-server
url: https://proget.corp.local/rubygems/MyRubygemsFeed
token: ${{secrets.PROGET_APK_KEY}}
Ejemplo de configuración del registro ProGet para Python (PyPI):
registries:
proget-python-feed:
type: python-index
url: https://proget.corp.local/pypi/MyPythonFeed
token: ${{secrets.PROGET_APK_KEY}}
Notas
token
debe ser una clave de API con acceso para ver los paquetes. Para más información, consulta Acceso a API y claves de API en la documentación de ProGet.
Puedes comprobar si se ha accedido correctamente al registro privado si examinas los registros de Dependabot.