En esta página se describe cómo restringir las descargas de artefactos de tus repositorios de Artifact Registry creando y gestionando reglas de descarga.
Las reglas de descarga te permiten permitir o denegar las descargas de artefactos de tus repositorios y paquetes. También puede definir condiciones para que la regla se aplique a etiquetas o versiones específicas.
Para obtener información sobre cómo funcionan las reglas de descarga, consulta la sección Restringir las descargas de artefactos del artículo sobre cómo controlar el acceso y proteger los artefactos.
Antes de empezar
- Si aún no tienes uno, crea un repositorio estándar con formato Docker.
- (Opcional) Configura los valores predeterminados de los comandos de Google Cloud CLI.
Roles obligatorios
Para obtener los permisos que necesitas para crear y gestionar reglas de descarga, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en el repositorio:
-
Crear, actualizar, obtener, enumerar y eliminar reglas:
Administrador de repositorios de Artifact Registry (
roles/artifactregistry.repoAdmin
) -
Obtener y enumerar reglas:
Lector de Artifact Registry (
roles/artifactregistry.reader
)
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Crear reglas de descarga
gcloud
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
RULE_NAME
: el nombre de la regla. El nombre debe ser único en tu repositorio, tener una longitud máxima de 256 caracteres y estar formado por caracteres alfanuméricos, caracteres codificados como porcentaje o caracteres de la lista [-
,.
,_
,~
,:
,@
,+
,^
].ACTION
: la acción aplicada a una descarga que coincida con esta regla. Elige entreALLOW
, donde la regla permite que se produzcan descargas coincidentes, yDENY
, donde la regla impide que se produzcan descargas coincidentes.PACKAGE
: (opcional) el nombre del paquete. Si se proporciona, la regla se aplica solo al paquete especificado en lugar de a todo el repositorio.CONDITION
: (opcional) expresión CEL que define una regla de coincidencia. Si se proporciona, solo aplica la regla a las descargas que cumplan la condición especificada. Por ejemplo,pkg.version.id < '3.0'
.PROJECT
: su Google Cloud ID de proyecto. Si el ID de tu proyecto contiene dos puntos (:
), consulta Proyectos con ámbito de dominio.LOCATION
: la ubicación regional o multirregional del repositorio.REPOSITORY
: el ID del repositorio.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud artifacts rules create RULE_NAME \ --action=ACTION \ --project=PROJECT \ --location=LOCATION \ --repository=REPOSITORY \ --package=PACKAGE \ --condition="CONDITION"
Windows (PowerShell)
gcloud artifacts rules create RULE_NAME ` --action=ACTION ` --project=PROJECT ` --location=LOCATION ` --repository=REPOSITORY ` --package=PACKAGE ` --condition="CONDITION"
Windows (cmd.exe)
gcloud artifacts rules create RULE_NAME ^ --action=ACTION ^ --project=PROJECT ^ --location=LOCATION ^ --repository=REPOSITORY ^ --package=PACKAGE ^ --condition="CONDITION"
Created rule [RULE_NAME].
gcloud artifacts rules create
.
API
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
RULE_NAME
: el nombre de la regla. El nombre debe ser único en tu repositorio, tener una longitud máxima de 256 caracteres y estar formado por caracteres alfanuméricos, caracteres codificados como porcentaje o caracteres de la lista [-
,.
,_
,~
,:
,@
,+
,^
].ACTION
: la acción aplicada a una descarga que coincida con esta regla. Elige entreALLOW
, donde la regla permite que se produzcan descargas coincidentes, yDENY
, donde la regla impide que se produzcan descargas coincidentes.PACKAGE
: (opcional) el nombre del paquete. Si se proporciona, la regla se aplica solo al paquete especificado en lugar de a todo el repositorio.CONDITION
: (opcional) expresión CEL que define una regla de coincidencia. Si se proporciona, solo aplica la regla a las descargas que cumplan la condición especificada. Por ejemplo,pkg.version.id < '3.0'
.PROJECT
: su Google Cloud ID de proyecto. Si el ID de tu proyecto contiene dos puntos (:
), consulta Proyectos con ámbito de dominio.LOCATION
: la ubicación regional o multirregional del repositorio.REPOSITORY
: el ID del repositorio.
Método HTTP y URL:
POST https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules?ruleID=RULE_NAME
Cuerpo JSON de la solicitud:
{ "action":"ACTION", "packageId":"PACKAGE", "condition": { "expression":"CONDITION" } }
Para enviar tu solicitud, despliega una de estas opciones:
Se crea una regla con el siguiente resultado:{ "name": "projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME", "action": ACTION, "operation": "DOWNLOAD" }
Mostrar reglas de descarga
gcloud
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
PROJECT
: su Google Cloud ID de proyecto. Si el ID de tu proyecto contiene dos puntos (:
), consulta Proyectos con ámbito de dominio.LOCATION
: la ubicación regional o multirregional del repositorio.REPOSITORY
: el nombre del repositorio.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud artifacts rules list \ --project=PROJECT \ --location=LOCATION \ --repository=REPOSITORY
Windows (PowerShell)
gcloud artifacts rules list ` --project=PROJECT ` --location=LOCATION ` --repository=REPOSITORY
Windows (cmd.exe)
gcloud artifacts rules list ^ --project=PROJECT ^ --location=LOCATION ^ --repository=REPOSITORY
RULE: my-rule PACKAGE: example.com/foo ACTION: DENY OPERATION: DOWNLOAD CONDITION: pkg.version.id < '3.0'
gcloud artifacts rules list
.
API
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
PROJECT
: su Google Cloud ID de proyecto. Si el ID de tu proyecto contiene dos puntos (:
), consulta Proyectos con ámbito de dominio.LOCATION
: la ubicación regional o multirregional del repositorio.REPOSITORY
: el nombre del repositorio.
Método HTTP y URL:
GET https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules
Para enviar tu solicitud, despliega una de estas opciones:
Se muestra una lista de reglas del proyecto, la ubicación y el repositorio especificados, similar a la siguiente:{ "rules": [ { "name": "projects/my-project/locations/us-central1/repositories/my-repo/rules/my-rule", "action": "DENY", "operation": "DOWNLOAD", "condition": { "expression": "pkg.version.id \u003c '3.0'" }, "packageId": "example.com/foo" } ] }
Describe las reglas de descarga
gcloud
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
RULE_NAME
: el nombre de la regla. El nombre debe ser único en tu repositorio.PROJECT
: su Google Cloud ID de proyecto. Si el ID de tu proyecto contiene dos puntos (:
), consulta Proyectos con ámbito de dominio.LOCATION
: la ubicación regional o multirregional del repositorio.REPOSITORY
: el nombre del repositorio.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud artifacts rules describe RULE_NAME \ --project=PROJECT \ --location=LOCATION \ --repository=REPOSITORY
Windows (PowerShell)
gcloud artifacts rules describe RULE_NAME ` --project=PROJECT ` --location=LOCATION ` --repository=REPOSITORY
Windows (cmd.exe)
gcloud artifacts rules describe RULE_NAME ^ --project=PROJECT ^ --location=LOCATION ^ --repository=REPOSITORY
RULE: my-rule PACKAGE: example.com/foo ACTION: DENY OPERATION: DOWNLOAD CONDITION: pkg.version.id < '3.0'
gcloud artifacts rules describe
.
API
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
RULE_NAME
: el nombre de la regla. El nombre debe ser único en tu repositorio.PROJECT
: su Google Cloud ID de proyecto. Si el ID de tu proyecto contiene dos puntos (:
), consulta Proyectos con ámbito de dominio.LOCATION
: la ubicación regional o multirregional del repositorio.REPOSITORY
: el nombre del repositorio.
Método HTTP y URL:
GET https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME
Para enviar tu solicitud, despliega una de estas opciones:
Los detalles de la regla se muestran de forma similar a lo siguiente:{ "rules": [ { "name": "projects/my-project/locations/us-central1/repositories/my-repo/rules/my-rule", "action": "DENY", "operation": "DOWNLOAD", "condition": { "expression": "pkg.version.id \u003c '3.0'" }, "packageId": "example.com/foo" } ] }
Actualizar reglas de descarga
gcloud
Elimina las variables que no quieras actualizar.
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
RULE_NAME
: el nombre de la regla. El nombre debe ser único en tu repositorio.ACTION
: la acción aplicada a una descarga que coincida con esta regla. Elige entreALLOW
yDENY
.PACKAGE
: el nombre del paquete. Si no se proporciona, la regla se aplica a todo el repositorio.CONDITION
: a expresión CEL que define una regla de coincidencia. Si se proporciona, solo aplica la regla a las descargas que cumplan la condición especificada. Por ejemplo,pkg.version.id < '3.0'
.PROJECT
: su Google Cloud ID de proyecto. Si el ID de tu proyecto contiene dos puntos (:
), consulta Proyectos con ámbito de dominio.LOCATION
: la ubicación regional o multirregional del repositorio.REPOSITORY
: el nombre del repositorio.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud artifacts rules update RULE_NAME \ --action=ACTION \ --project=PROJECT \ --location=LOCATION \ --repository=REPOSITORY \ --package=PACKAGE \ --condition="CONDITION"
Windows (PowerShell)
gcloud artifacts rules update RULE_NAME ` --action=ACTION ` --project=PROJECT ` --location=LOCATION ` --repository=REPOSITORY ` --package=PACKAGE ` --condition="CONDITION"
Windows (cmd.exe)
gcloud artifacts rules update RULE_NAME ^ --action=ACTION ^ --project=PROJECT ^ --location=LOCATION ^ --repository=REPOSITORY ^ --package=PACKAGE ^ --condition="CONDITION"
Updated rule [RULE_NAME]. action: ACTION condition: expression: CONDITION name: projects/PROJECT/locationsLOCATION/repositories/REPOSITORY/rules/RULE_NAME operation: DOWNLOAD
gcloud artifacts rules update
.
API
Elimina las variables que no quieras actualizar.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
RULE_NAME
: el nombre de la regla. El nombre debe ser único en tu repositorio.ACTION
: la acción aplicada a una descarga que coincida con esta regla. Elige entreALLOW
yDENY
.PACKAGE
: el nombre del paquete. Si no se proporciona, la regla se aplica a todo el repositorio.CONDITION
: a expresión CEL que define una regla de coincidencia. Si se proporciona, solo aplica la regla a las descargas que cumplan la condición especificada. Por ejemplo,pkg.version.id < '3.0'
.PROJECT
: su Google Cloud ID de proyecto. Si el ID de tu proyecto contiene dos puntos (:
), consulta Proyectos con ámbito de dominio.LOCATION
: la ubicación regional o multirregional del repositorio.REPOSITORY
: el nombre del repositorio.
Método HTTP y URL:
PATCH https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME
Cuerpo JSON de la solicitud:
{ "action":"ACTION", "packageId":"PACKAGE", "condition": { "expression":"CONDITION" } }
Para enviar tu solicitud, despliega una de estas opciones:
Se muestran los detalles de la regla actualizada, como en el siguiente ejemplo:{ "name": "projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME", "action": ACTION, "operation": "DOWNLOAD" }
Eliminar reglas de descarga
gcloud
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
RULE_NAME
: el nombre de la regla. El nombre debe ser único en tu repositorio.PROJECT
: su Google Cloud ID de proyecto. Si el ID de tu proyecto contiene dos puntos (:
), consulta Proyectos con ámbito de dominio.LOCATION
: la ubicación regional o multirregional del repositorio.REPOSITORY
: el nombre del repositorio.
Ejecuta el siguiente comando:
Linux, macOS o Cloud Shell
gcloud artifacts rules delete RULE_NAME \ --project=PROJECT \ --location=LOCATION \ --repository=REPOSITORY
Windows (PowerShell)
gcloud artifacts rules delete RULE_NAME ` --project=PROJECT ` --location=LOCATION ` --repository=REPOSITORY
Windows (cmd.exe)
gcloud artifacts rules delete RULE_NAME ^ --project=PROJECT ^ --location=LOCATION ^ --repository=REPOSITORY
You are about to delete rule [RULE_NAME] Do you want to continue (Y/n)? Y Deleted rule [RULE_NAME].
gcloud artifacts rules delete
.
API
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
RULE_NAME
: el nombre de la regla. El nombre debe ser único en tu repositorio.PROJECT
: su Google Cloud ID de proyecto. Si el ID de tu proyecto contiene dos puntos (:
), consulta Proyectos con ámbito de dominio.LOCATION
: la ubicación regional o multirregional del repositorio.REPOSITORY
: el nombre del repositorio.
Método HTTP y URL:
DELETE https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME
Para enviar tu solicitud, despliega una de estas opciones:
Para obtener más información, consulta la referencia de REST.Usar CEL para definir condiciones
Puedes definir las condiciones de tus reglas de descarga con el lenguaje de expresión común (CEL), que es un lenguaje de código abierto para evaluar expresiones. Artifact Registry proporciona el objeto pkg
, que contiene los siguientes atributos:
pkg.id
: cadena que representa el nombre del paquete del artefacto. Se puede usar con reglas definidas a nivel de repositorio.pkg.version.id
: cadena que representa la versión del artefacto.pkg.version.tag
: cadena que representa la etiqueta del artefacto. Solo se puede usar en un repositorio de Docker.
Puedes usar operadores lógicos y funciones integradas con CEL. A continuación, se muestran algunos ejemplos de expresiones CEL que pueden ser útiles en tus reglas de descarga:
Útil para las reglas definidas a nivel de repositorio:
pkg.id == 'myPackage' #Artifact package matches 'myPackage' pkg.id.startsWith('my') #Artifact package must start with 'my'
Útil para las reglas definidas en paquetes:
pkg.version.id != '1.0.0' #Artifact version is not '1.0.0' pkg.version.id > '1.0.1' || pkg.version.id < '0.0.1' #Artifact version is greater than '1.0.1' or less than '0.0.1' pkg.version.id.startsWith('1.0.') #Artifact version must start with '1.0.' pkg.version.id in ['1.0.0', '1.2.0'] #Artifact version must be a member of the list ['1.0.0', '1.2.0'] pkg.version.tag == 'tag1' #Artifact tag must be 'tag1' pkg.version.tag.startsWith('tag') #Artifact tag must start with 'tag' pkg.version.tag in ['tag1', 'tag2'] #Artifact tag must be a member of the list ['tag1', 'tag2']
Cuando añadas reglas con condiciones basadas en etiquetas, como pkg.version.tag == 'latest'
, a tus repositorios de Docker, ten en cuenta lo siguiente:
- Cuando se extrae por digest, el cliente no proporciona una etiqueta. Las condiciones que usen etiquetas se compararán con una etiqueta vacía y pueden dar lugar a un comportamiento inesperado.
- En el caso de las imágenes de contenedor de varias arquitecturas, es posible que las condiciones que usan etiquetas no funcionen como se espera, por lo que se recomienda no usarlas.