Acerca de los registros privados
Dependabot version updates mantiene actualizadas las dependencias y Dependabot security updates actualiza las dependencias vulnerables. Dependabot puede acceder a registros privados. Además, puede conceder a Dependabot acceso a registros de paquetes y repositorios privados GitHub para mantener sus dependencias privadas e internas tan actualizadas y seguras como sus dependencias públicas.
En la mayoría de los ecosistemas, las dependencias privadas suelen publicarse en registros de paquetes privados. Estos registros privados son similares a sus equivalentes públicos, pero requieren autenticación.
Para ecosistemas específicos, puede configurar Dependabot para que acceda solo a registros privados mediante la eliminación de llamadas a registros públicos. Para más información, consulta Eliminación del acceso de Dependabot a registros públicos.
Configuración de registros privados
También puedes configurar el acceso de Dependabot a registros privados en el archivo dependabot.yml. La clave registries de nivel superior es opcional y especifica los detalles de autenticación.
Hay 2 ubicaciones en el archivo dependabot.yml donde puede usar la clave registries:
- En el nivel superior, donde se definen los registros y su información de acceso, si es necesario.
- Dentro de los bloques
updates, donde puede utilizarregistries: "*"para indicar a Dependabot utilizar cualquiera o todos los registros definidos en el nivel superior.
# 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" Utilizarás las siguientes opciones para especificar la configuración de acceso. La configuración del registro debe contener un elemento type y otro url, y normalmente incluirán una combinación username y password, o un elemento token.
| Parámetros | Fin |
|---|---|
REGISTRY_NAME | Obligatorio: define un identificador para el registro. |
type | Obligatorio: identifica el tipo de registro. |
| Detalles de la autenticación | Obligatorio: los parámetros admitidos para proporcionar detalles de autenticación varían para los registros de diferentes tipos. |
url | Obligatorio: la URL que se usa para acceder a las dependencias en este registro. El protocolo es opcional. Si no se especifica, se da por hecho el valor https://. El Dependabot agrega o ignora las diagonales iniciales conforme sea necesario. |
replaces-base | Si el valor booleano es true, Dependabot resuelve las dependencias mediante el valor url especificado en lugar de la URL base de ese ecosistema. |
Para obtener más información sobre las opciones de configuración disponibles y sobre los tipos admitidos, consulte Referencia de opciones de Dependabot.
Almacenamiento de credenciales para que las use Dependabot
Para conceder a Dependabot acceso a los registros privados que admite GitHub, debes almacenar el token de acceso o el secreto del registro en el almacén de secretos del repositorio o la organización.
Acerca de los secretos cifrados para Dependabot
Los secretos del Dependabot son credenciales cifradas que creas ya sea a nivel de la organización o del repositorio. Cuando agregas un secreto a nivel de la organización, puedes especificar qué repositorios pueden acceder a éste. Puedes utilizar secretos para permitir que el Dependabot actualice las dependencias que se ubiquen en los registros del paquete. Cuando agregas un secreto, está cifrado antes de llegar a GitHub y permanece cifrado hasta que lo usa Dependabot para acceder a un registro de paquetes privado.
Los secretos de Dependabot también incluyen secretos de los que hacen uso los flujos de trabajo de GitHub Actions desencadenados por solicitudes de incorporación de cambios de Dependabot. Dependabot podría no usar estos secretos, pero los flujos de trabajo los requieren. Para más información, consulta Solución de problemas de Dependabot en acciones de GitHub.
Después de agregar un secreto de Dependabot, puede hacer referencia a él en el archivo de configuración dependabot.yml como este: ${{secrets.NAME}}, donde "NAME" es el nombre que ha elegido para el secreto. Por ejemplo:
password: ${{secrets.MY_ARTIFACTORY_PASSWORD}} password: ${{secrets.MY_ARTIFACTORY_PASSWORD}} Nombrar tus secretos
El nombre de un secreto del Dependabot:
- Solo puede contener caracteres alfanuméricos (
[A-Z]o[0-9]) o caracteres de subrayado (_). No se permiten espacios. Si escribes en minúscula, se cambiará todo a mayúsculas. - No debe comenzar con el prefijo
GITHUB_. - No puede iniciar con un número.
Agregar un secreto de repositorio para el Dependabot
Para crear secretos para un repositorio de una cuenta personal, deberás ser el propietario del repositorio. A fin de crear secretos para un repositorio de la organización, debe tener acceso admin.
-
En GitHub, navegue hasta la página principal del repositorio.
-
Debajo del nombre del repositorio, haz clic en Settings. Si no puedes ver la pestaña "Configuración", selecciona el menú desplegable y, a continuación, haz clic en Configuración.

-
En la sección "Security" de la barra lateral, selecciona Secrets and variables y luego haz clic en Dependabot.
-
Haga clic en New repository secret.
-
Escriba un nombre para su secreto en el cuadro de entrada Name.
-
Ingresa el valor de tu secreto.
-
Haga clic en Add Secret.
El nombre del secreto se lista en la página de secretos del Dependabot. Puede hacer clic en Update (Actualizar) para cambiar el valor del secreto. Puede hacer clic en Remove (Quitar) para eliminar el secreto.
Agregar un secreto de organización para el Dependabot
Cuando creas un secreto en una organización, puedes utilizar una política para limitar el acceso de los repositorios a este. Por ejemplo, puedes otorgar acceso a todos los repositorios, o limitarlo a solo los repositorios privados o a una lista específica de estos.
Para crear secretos en el nivel de la organización, debe tener acceso admin.
-
En GitHub, navega a la página principal de tu organización.
-
Debajo del nombre de la organización, haz clic en Settings. Si no puedes ver la pestaña "Configuración", selecciona el menú desplegable y, a continuación, haz clic en Configuración.

-
En la sección "Security" de la barra lateral, selecciona Secrets and variables y luego haz clic en Dependabot.
-
Haga clic en New organization secret.
-
Escriba un nombre para su secreto en el cuadro de entrada Name.
-
Introduzca el valor del secreto en Value.
-
En la lista desplegable Repository access (Acceso al repositorio), elija una directiva de acceso.
-
Si ha elegido Selected repositories (Repositorios seleccionados):
- Haz clic en .
- En el cuadro de diálogo, seleccione los repositorios que pueden acceder a este secreto.
- Haga clic en Update selection (Actualizar selección).
-
Haga clic en Add Secret.
El nombre del secreto se indica en la página de secretos de Dependabot. Puede hacer clic en Update (Actualizar) para cambiar el valor del secreto o su directiva de acceso. Puede hacer clic en Remove (Quitar) para eliminar el secreto.
Permitir la ejecución de código externo
Al conceder acceso a Dependabot a uno o varios registros, la ejecución de código externo se deshabilita automáticamente para proteger el código de los paquetes en peligro. Sin embargo, es posible que se produzca un error en algunas actualizaciones de versión.
Si necesita permitir que Dependabot acceda a un registro de paquete privado y habilitar la ejecución limitada de código externo, puede configurar insecure-external-code-execution en allow. Permitir que Dependabot ejecute código externo en el manifiesto durante las actualizaciones no es tan aterrador como parece:
- Cualquier ejecución de código externo solo tendrá acceso a los administradores de paquetes de los registros asociados a la configuración de
updatesenvolvente. - No se permite el acceso a ninguno de los registros definidos en la configuración de
registriesde nivel superior.
Es habitual que las herramientas, como bundler, mix, pipy swift, permitan la ejecución de código externo de forma predeterminada.
En este ejemplo, el archivo de configuración permite que Dependabot acceda al registro de paquetes privados ruby-github. En la misma configuración de updates, insecure-external-code-execution se establece en allow, lo que significa que el código ejecutado mediante dependencias solo tendrá acceso al registro de ruby-github y no al de 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" Registros privados admitidos
Ejemplos de cómo configurar el acceso a los registros privados compatibles con Dependabot.
cargo-registrycomposer-repositorydocker-registrygitgoproxy-serverhex-organizationhex-repositorymaven-repositorynpm-registrynuget-feedpub-repositorypython-indexrubygems-serverterraform-registry
cargo-registry
El tipo cargo-registry admite un token.
Este tipo de registro coincidirá en el prefijo con la ruta de acceso proporcionada en la opción url. Esto significa que puedes proporcionar varias credenciales al mismo host, que se puede usar para acceder a distintas rutas de acceso. Sin embargo, si no tienes varios registros en el mismo host, se recomienda omitir la ruta de acceso de url para que todas las rutas de acceso al registro reciban credenciales.
registries: cargo-example: type: cargo-registry registry: "name-of-your-registry" url: https://cargo.cloudsmith.io/foobaruser/test/ token: "Token ${{secrets.CARGO_TOKEN}}" Hemos probado esta configuración en el registro privado https://cargo.cloudsmith.io.
composer-repository
El tipo composer-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.
Este tipo de registro coincidirá en el prefijo con la ruta de acceso proporcionada en la opción url. Esto significa que puedes proporcionar varias credenciales al mismo host, que se puede usar para acceder a distintas rutas de acceso. Sin embargo, si no tienes varios registros en el mismo host, se recomienda omitir la ruta de acceso de url para que todas las rutas de acceso al registro reciban credenciales.
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 funciona con los registros de contenedor que implementan la especificación del registro de contenedor OCI. Para obtener más información, consulta https://github.com/opencontainers/distribution-spec/blob/main/spec.md. Dependabot admite autenticación en registros privados a través de un servicio de token central o una autenticación http básica. Para obtener más información, consulta Especificación de autenticación de tokens en la documentación de Docker y Autenticación de acceso básico en Wikipedia.
El tipo docker-registry 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.
Este tipo de registro coincidirá en el prefijo con la ruta de acceso proporcionada en la opción url. Esto significa que puedes proporcionar varias credenciales al mismo host, que se puede usar para acceder a distintas rutas de acceso. Sin embargo, si no tienes varios registros en el mismo host, se recomienda omitir la ruta de acceso de url para que todas las rutas de acceso al registro reciban credenciales.
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 El tipo docker-registry también se puede usar para incorporar cambios de Amazon ECR privado mediante 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}} 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
El tipo git 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: 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}} goproxy-server
El tipo goproxy-server 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.
Este tipo de registro coincidirá en el prefijo con la ruta de acceso proporcionada en la opción url. Esto significa que puedes proporcionar varias credenciales al mismo host, que se puede usar para acceder a distintas rutas de acceso. Sin embargo, si no tienes varios registros en el mismo host, se recomienda omitir la ruta de acceso de url para que todas las rutas de acceso al registro reciban credenciales.
registries: my-private-registry: type: goproxy-server url: https://acme.jfrog.io/artifactory/api/go/my-repo username: octocat password: ${{secrets.MY_GO_REGISTRY_TOKEN}} registries: my-private-registry: type: goproxy-server url: https://acme.jfrog.io/artifactory/api/go/my-repo username: octocat password: ${{secrets.MY_GO_REGISTRY_TOKEN}} hex-organization
El tipo hex-organization admite la organización y la clave.
Este tipo de registro coincidirá en el prefijo con la ruta de acceso proporcionada en la opción url. Esto significa que puedes proporcionar varias credenciales al mismo host, que se puede usar para acceder a distintas rutas de acceso. Sin embargo, si no tienes varios registros en el mismo host, se recomienda omitir la ruta de acceso de url para que todas las rutas de acceso al registro reciban credenciales.
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
El tipo hex-repository admite una clave de autenticación.
repo es un campo obligatorio, que debe coincidir con el nombre del repositorio usado en la declaración de dependencia.
public-key-fingerprint es un campo de configuración opcional, que representa la huella digital de la clave pública para el repositorio hexadecimal. public-key-fingerprint es usado por hexadecimal para establecer la confianza con el repositorio privado. El public-key-fingerprint campo puede aparecer en texto no cifrado o almacenarse como un secreto de 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
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.
Este tipo de registro coincidirá en el prefijo con la ruta de acceso proporcionada en la opción url. Esto significa que puedes proporcionar varias credenciales al mismo host, que se puede usar para acceder a distintas rutas de acceso. Sin embargo, si no tienes varios registros en el mismo host, se recomienda omitir la ruta de acceso de url para que todas las rutas de acceso al registro reciban credenciales.
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
El tipo npm-registry admite el nombre de usuario y la contraseña, o el token. Si la cuenta es una cuenta de GitHub, puede usar un GitHub personal access token en lugar de la contraseña.
Al usar el nombre de usuario y la contraseña, el token de autenticación de .npmrc puede contener un elemento _password codificada en base64; pero la contraseña a la que se hace referencia en el archivo de configuración de Dependabot debe ser la contraseña original (sin codificar).
Nota:
Al usar npm.pkg.github.com, no incluyas una ruta de acceso. En su lugar, usa la dirección URL https://npm.pkg.github.com sin una ruta de acceso.
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 Por motivos de seguridad, Dependabot no establece variables de entorno. Yarn (v2 y versiones posteriores) requiere que se establezcan las variables de entorno a las que se acceda. Al acceder a variables de entorno en el archivo .yarnrc.yml, debes proporcionar un valor de reserva como ${ENV_VAR-fallback} o ${ENV_VAR:-fallback}. Para obtener más información, consulta Archivos Yarnrc en la documentación de Yarn.
nuget-feed
El tipo nuget-feed admite el nombre de usuario y la contraseña, o el token. Si la cuenta es una cuenta de GitHub, puede usar un GitHub personal access token en lugar de la contraseña.
nuget-feed no admite el parámetro replaces-base.
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-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}} 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
El tipo pub-repository admite una URL y un token.
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
El tipo python-index admite el nombre de usuario y la contraseña, o el token. Si la cuenta es una cuenta de GitHub, puede usar un GitHub personal access token en lugar de la contraseña.
Este tipo de registro coincidirá en el prefijo con la ruta de acceso proporcionada en la opción url. Esto significa que puedes proporcionar varias credenciales al mismo host, que se puede usar para acceder a distintas rutas de acceso. Sin embargo, si no tienes varios registros en el mismo host, se recomienda omitir la ruta de acceso de url para que todas las rutas de acceso al registro reciban credenciales.
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: octocat@example.com 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: octocat@example.com password: ${{secrets.MY_AZURE_DEVOPS_TOKEN}} replaces-base: true rubygems-server
El tipo rubygems-server admite el nombre de usuario y la contraseña, o el token. Si la cuenta es una cuenta de GitHub, puede usar un GitHub personal access token en lugar de la contraseña.
Este tipo de registro coincidirá en el prefijo con la ruta de acceso proporcionada en la opción url. Esto significa que puedes proporcionar varias credenciales al mismo host, que se puede usar para acceder a distintas rutas de acceso. Sin embargo, si no tienes varios registros en el mismo host, se recomienda omitir la ruta de acceso de url para que todas las rutas de acceso al registro reciban credenciales.
registries: ruby-example: type: rubygems-server url: https://rubygems.example.com username: octocat@example.com password: ${{secrets.MY_RUBYGEMS_PASSWORD}} replaces-base: true registries: ruby-example: type: rubygems-server url: https://rubygems.example.com username: octocat@example.com 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
El tipo terraform-registry admite un token.
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}}