Configura políticas de limpieza

Una política de limpieza de Artifact Registry define criterios para borrar de forma automática las versiones de artefactos que ya no necesitas o conservar los artefactos que quieres almacenar de forma indefinida.

Las políticas de limpieza son útiles si almacenas muchas versiones de tus artefactos, pero solo necesitas conservar versiones específicas que lanzas a producción. Puedes definir políticas de eliminación con criterios para borrar artefactos y mantener políticas con criterios de retención de artefactos.

Si la versión de un artefacto coincide con los criterios de una política de eliminación y una de conservación, Artifact Registry aplica la política de conservación.

Las eliminaciones activadas por políticas de eliminación se descuentan de tu cuota de solicitudes de eliminación por proyecto de Artifact Registry y tienen un límite de 300,000 eliminaciones por repositorio al día.

Programa de aplicación de políticas

Artifact Registry borra y retiene los artefactos que coincidan con tus políticas de limpieza mediante un trabajo en segundo plano que se ejecuta de forma periódica. Los cambios se aplican en el plazo aproximado de un día.

Cantidad máxima de políticas de limpieza por repositorio

Puedes aplicar un máximo de 10 políticas de limpieza a un repositorio.

Formatos admitidos

Puedes configurar una política de limpieza en los repositorios estándar y remotos para todos los formatos del repositorio.

Funciones obligatorias

Para obtener los permisos que necesitas para aplicar o quitar políticas de limpieza, pídele a tu administrador que te otorgue el rol de IAM de Administrador de Artifact Registry (roles/artifactregistry.admin) en el proyecto del repositorio. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Este rol predefinido contiene los permisos necesarios para aplicar o quitar políticas de limpieza. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para aplicar o quitar políticas de limpieza:

  • artifactregistry.repositories.update
  • Para borrar artefactos que cumplan con los criterios de una política de limpieza, sigue estos pasos: artifactregistry.versions.delete

También puedes obtener estos permisos con roles personalizados o, también, otros roles predefinidos.

La función predeterminada del agente de servicio de Artifact Registry incluye el permiso artifactregistry.versions.delete, que se requiere para borrar las imágenes que cumplen con los criterios de una política de limpieza.

Crea un archivo de política

Un archivo de políticas es un archivo JSON que define tus políticas de eliminación y conservación. Puedes crear un archivo de política si creas y editas un archivo JSON y, luego, con Google Cloud CLI para aplicar la política, o con la consola de Google Cloud. Las políticas de eliminación especifican condiciones para borrar artefactos. Las políticas de conservación especifican condiciones para retener un artefacto o una cantidad de versiones recientes para conservar. No puedes usar condiciones y versiones más recientes en la misma política de conservación.

Crea una política de eliminación

Una política de eliminación te permite especificar la antigüedad mínima o máxima de la eliminación de artefactos y los criterios de filtrado adicionales para limitar la política a artefactos específicos.

Si tienes ciertos artefactos que no deseas borrar por algún motivo, crea una política de conservación conditional o una política de conservación de versiones más recientes, así como una política de eliminación. Si un artefacto coincide con los criterios de la política de eliminación y de conservación, el artefacto se conserva.

Console

Puedes crear una política de eliminación para un repositorio nuevo o existente.

Para agregar una política de eliminación a un repositorio existente, sigue estos pasos:

  1. Abre la página Repositorios en la consola de Google Cloud.

    Abrir la página Repositorios

  2. En la lista de repositorios, selecciona el repositorio y haz clic en Editar repositorio.

  3. En la sección Políticas de limpieza, selecciona Ejecución de prueba para probar la política nueva antes de comprometerte a borrar los artefactos. Para obtener más información sobre cómo ver los resultados de la prueba, consulta la ejecución de prueba.

    Una vez que estés seguro de que la política funciona según lo previsto, vuelve a editar la configuración del repositorio y selecciona Borrar artefactos para aplicar la política de limpieza y borrar los artefactos seleccionados.

  4. Haz clic en Agregar una política de limpieza y agrega lo siguiente:

    • Nombre: Asigna un nombre a la política de limpieza. El nombre debe ser único dentro del grupo de políticas que aplicas a un repositorio.
    • Tipo de política: Selecciona Eliminación condicional.
    • Estado de la etiqueta: Indica si la política debe verificar si hay artefactos etiquetados o artefactos sin etiquetar. Los artefactos se etiquetan cuando se envía o extrae una imagen hacia o desde un repositorio. Para obtener más información sobre las etiquetas de Docker, consulta Conceptos de contenedores.

      • Cualquier estado de etiqueta: Ignora el estado de la etiqueta y se aplica a los artefactos etiquetados y sin etiquetar.
      • Etiquetado: Solo se aplica a los artefactos etiquetados.
      • Sin etiquetar: Solo se aplica a artefactos sin etiquetar.

      Los formatos que no admiten etiquetas se tratan como untagged. Si un repositorio tiene etiquetas inmutables habilitadas, no se pueden borrar los artefactos etiquetados.

      Para obtener más información sobre el estado de las etiquetas y su aplicación a las políticas de limpieza, consulta la referencia de TagState.

  5. Las siguientes son formas opcionales de definir tu política de eliminación:

    • Prefijos de etiqueta: Es una lista separada por comas de prefijos de etiquetas. Por ejemplo, los prefijos test y staging coincidirían con las imágenes con las etiquetas testenv y staging-1.5. tagState debe configurarse como TAGGED para usar prefijos de etiqueta.
    • Prefijos de versión: Son una lista separada por comas de prefijos de versiones de artefactos. Por ejemplo, v1, v2 coincidiría con las versiones v1.5, v2.0alpha y v10.2.
    • Prefijos de paquetes: Es una lista de prefijos de nombres de artefactos. Puedes ingresar varios prefijos si presionas Enter o , entre ellos. Por ejemplo, red, blue crearía dos prefijos, red y blue, y coincidiría con los nombres de artefactos red-team, redis y bluebird.
    • Anterior a: Es el tiempo mínimo desde que se creó la versión de un artefacto en el repositorio, que se especifica como una duración. Por ejemplo, 30d es de 30 días. Puedes especificar duraciones de segundos, minutos, horas o días agregando s, m, h o d, respectivamente.
    • Posterior a: Es el tiempo máximo desde que se creó la versión de un artefacto en el repositorio, que se especifica como una duración. Por ejemplo, 30d es de 30 días.
  6. Para agregar más políticas de limpieza, haz clic en Agregar una política de limpieza.

  7. Haz clic en Update.

    Tu política de limpieza se aplica a tu repositorio. Puedes ver las políticas de limpieza en la sección Detalles del repositorio si haces clic en Mostrar más.

JSON

{
  "name": "DELETE_POLICY_NAME",
  "action": {"type": "Delete"},
  "condition": {
    "tagState": "TAG_STATUS",
    "tagPrefixes": ["TAG_PREFIXES"],
    "versionNamePrefixes": ["VERSION_PREFIXES"],
    "packageNamePrefixes": ["PACKAGE_PREFIXES"],
    "olderThan": "OLDER_THAN_DURATION",
    "newerThan": "NEWER_THAN_DURATION"
  }
}

Una política de eliminación debe incluir un nombre, una acción y al menos una condición.

name
En el fragmento de política de eliminación, DELETE_POLICY_NAME es el nombre de la política. El nombre debe ser único dentro del grupo de políticas que aplicas a un repositorio.
action
Para una política de eliminación, el valor es {"type": "Delete"}.
condition
Especifica una o más de las siguientes condiciones:
  • tagState: TAG_STATUS indica si la política debe verificar si hay artefactos etiquetados o artefactos sin etiquetar. Los artefactos se etiquetan cuando se envía o extrae una imagen hacia o desde un repositorio. Los valores admitidos son los que se detallan a continuación:

    • tagged: Solo se aplica a los artefactos etiquetados.
    • untagged: Solo se aplica a artefactos sin etiquetar.
    • any: Ignora el estado de la etiqueta y se aplica a los artefactos etiquetados y sin etiquetar.

    Los formatos que no admiten etiquetas se tratan como untagged. Si un repositorio tiene etiquetas inmutables habilitadas, no se pueden borrar los artefactos etiquetados.

    Para obtener más información sobre las etiquetas de Docker, consulta Conceptos de contenedores.

  • tagPrefixes: TAG_PREFIXES es una lista separada por comas de prefijos de etiquetas. Por ejemplo, "test", "staging" coincidiría con las imágenes con las etiquetas "testenv" y "staging-1.5". tagState debe configurarse como TAGGED para usar prefijos de etiqueta.

  • versionNamePrefixes: VERSION_PREFIXES es una lista separada por comas de prefijos de versiones de artefactos. Por ejemplo, "v1", "v2" coincidiría con las versiones "v1.5", "v2.0alpha" y "v10.2".

  • packageNamePrefixes: PACKAGE_PREFIXES es una lista separada por comas de prefijos de nombres de artefactos. Por ejemplo, "red", "blue" coincidiría con los nombres de artefactos "red-team", "redis" y "bluebird".

  • olderThan: OLDER_THAN_DURATION es el tiempo mínimo desde que se creó la versión de un artefacto en el repositorio, que se especifica como una duración. Por ejemplo, 30d es de 30 días. Puedes especificar duraciones de segundos, minutos, horas o días agregando s, m, h o d, respectivamente.

  • newerThan: NEWER_THAN_DURATION es el tiempo máximo desde que se creó la versión de un artefacto en el repositorio, que se especifica como una duración. Por ejemplo, 30d es de 30 días.

Crea una política de conservación condicional

Una política de conservación condicional especifica los criterios para retener artefactos. Mantén las políticas funcionan con políticas de eliminación para conservar los artefactos que se borrarían de acuerdo con las especificaciones de tu política de eliminación, pero que deseas conservar. Cuando un artefacto coincide con los criterios de una política de eliminación y una política de conservación, se conserva el artefacto.

Console

Puedes crear una política de conservación para un repositorio nuevo o existente.

Para agregar una política de conservación a un repositorio existente, sigue estos pasos:

  1. Abre la página Repositorios en la consola de Google Cloud.

    Abrir la página Repositorios

  2. En la lista de repositorios, selecciona el repositorio y haz clic en Editar repositorio.

  3. En la sección Políticas de limpieza, selecciona Ejecución de prueba para probar la política nueva antes de comprometerte a borrar los artefactos. Debes establecer al menos una política de eliminación para ver los resultados de tu política de conservación. Para obtener más información sobre cómo ver los resultados de la prueba, consulta la ejecución de prueba.

    Una vez que estés seguro de que las políticas funcionan según lo previsto, vuelve a editar la configuración del repositorio y selecciona Borrar artefactos para aplicar las políticas de limpieza y borrar los artefactos seleccionados.

  4. Haz clic en Agregar una política de limpieza y agrega lo siguiente:

    • Nombre: Asigna un nombre a la política de limpieza. El nombre debe ser único dentro del grupo de políticas que aplicas a un repositorio.
    • Tipo de política: Selecciona Conservación condicional.
    • Estado de la etiqueta: Indica si la política debe verificar si hay artefactos etiquetados o artefactos sin etiquetar. Los artefactos se etiquetan cuando se envía o extrae una imagen hacia o desde un repositorio. Para obtener más información sobre las etiquetas de Docker, consulta Conceptos de contenedores.

      • Cualquier estado de etiqueta: Ignora el estado de la etiqueta y se aplica a los artefactos etiquetados y sin etiquetar.
      • Etiquetado: Solo se aplica a los artefactos etiquetados.
      • Sin etiquetar: Solo se aplica a artefactos sin etiquetar.

      Los formatos que no admiten etiquetas se tratan como untagged. Si un repositorio tiene etiquetas inmutables habilitadas, no se pueden borrar los artefactos etiquetados. Para obtener más información sobre el estado de las etiquetas y su aplicación a las políticas de limpieza, consulta la referencia de TagState.

  5. Las siguientes son formas opcionales de definir tu política de conservación:

    • Prefijos de etiqueta: Es una lista separada por comas de prefijos de etiquetas. Por ejemplo, los prefijos test y staging coincidirían con las imágenes con las etiquetas testenv y staging-1.5. tagState debe configurarse como TAGGED para usar prefijos de etiqueta.
    • Prefijos de versión: Son una lista separada por comas de prefijos de versiones de artefactos. Por ejemplo, v1, v2 coincidiría con las versiones v1.5, v2.0alpha y v10.2.
    • Prefijos del paquete: Es una lista separada por comas de prefijos de nombres de artefactos. Por ejemplo, red, blue coincidiría con los nombres de artefactos red-team, redis y bluebird.
    • Anterior a: Es el tiempo mínimo desde que se creó la versión de un artefacto en el repositorio, que se especifica como una duración. Por ejemplo, 30d es de 30 días. Puedes especificar duraciones de segundos, minutos, horas o días agregando s, m, h o d, respectivamente.
    • Posterior a: Es el tiempo máximo desde que se creó la versión de un artefacto en el repositorio, que se especifica como una duración. Por ejemplo, 30d es de 30 días.
  6. Para agregar más políticas de limpieza, haz clic en Agregar una política de limpieza.

  7. Haz clic en Update.

    Tu política de limpieza se aplica a tu repositorio.

JSON

El formato es similar a una política de eliminación. Para una política de conservación, el valor de action es {"type": "Keep"}.

{
  "name": "KEEP_POLICY_NAME",
  "action": {"type": "Keep"},
  "condition": {
    "tagState": "TAG_STATUS",
    "tagPrefixes": ["TAG_PREFIXES"],
    "versionNamePrefixes": ["VERSION_PREFIXES"],
    "packageNamePrefixes": ["PACKAGE_PREFIXES"],
    "olderThan": "OLDER_THAN_DURATION",
    "newerThan": "NEWER_THAN_DURATION"
  }
}

Reemplaza lo siguiente:

  • KEEP_POLICY_NAME por el nombre de la política de limpieza El nombre debe ser único dentro del grupo de políticas que aplicas a un repositorio.
  • TAG_STATUS con el estado de la etiqueta, que indica si la política debe verificar si hay artefactos etiquetados o artefactos sin etiquetar. Los artefactos se etiquetan cuando se envía o extrae una imagen hacia o desde un repositorio. Para obtener más información sobre las etiquetas de Docker, consulta Conceptos de contenedores.

    Las opciones son las siguientes:

    • tagged: Solo se aplica a los artefactos etiquetados.
    • untagged: Solo se aplica a artefactos sin etiquetar.
    • any: Se aplica a todas las versiones

    Los formatos que no admiten etiquetas se tratan como untagged. Si un repositorio tiene etiquetas inmutables habilitadas, no se pueden borrar los artefactos etiquetados. Para obtener más información sobre el estado de las etiquetas y su aplicación a las políticas de limpieza, consulta la referencia de TagState.

  • TAG_PREFIXES por una lista de prefijos de etiquetas separados por comas. Por ejemplo, los prefijos test y staging coincidirían con las imágenes con las etiquetas testenv y staging-1.5. tagState debe configurarse como TAGGED para usar prefijos de etiqueta.

  • VERSION_PREFIXES por una lista separada por comas de los prefijos de la versión del artefacto. Por ejemplo, v1, v2 coincidiría con las versiones v1.5, v2.0alpha y v10.2.

  • PACKAGE_PREFIXES por una lista separada por comas de prefijos de nombres de artefactos. Por ejemplo, red, blue coincidiría con los nombres de artefactos red-team, redis y bluebird.

  • OLDER_THAN_DURATION por el tiempo mínimo desde que se creó la versión de un artefacto en el repositorio, especificado como una duración. Por ejemplo, 30d es de 30 días. Puedes especificar duraciones de segundos, minutos, horas o días agregando s, m, h o d, respectivamente.
  • NEWER_THAN_DURATION con el tiempo máximo desde que se creó la versión de un artefacto en el repositorio, especificado como una duración. Por ejemplo, 30d es de 30 días.

Crea una política de conservación para las versiones más recientes

Puedes crear una política de conservación para mantener una cantidad específica de versiones. No puedes usar los criterios de conservación condicional y mantener las versiones más recientes en la misma política de conservación.

Mantén las políticas funcionan con políticas de eliminación para conservar los artefactos que se borrarían de acuerdo con las especificaciones de tu política de eliminación, pero que deseas conservar. Cuando un artefacto coincide con los criterios de una política de eliminación y una política de conservación, se conserva el artefacto.

Console

Puedes crear una política de conservación de las versiones más recientes para un repositorio nuevo o existente.

Para agregar una política de conservación de las versiones más recientes a un repositorio existente, haz lo siguiente:

  1. Abre la página Repositorios en la consola de Google Cloud.

    Abrir la página Repositorios

  2. En la lista de repositorios, selecciona el repositorio y haz clic en Editar repositorio.

  3. En la sección Políticas de limpieza, selecciona Ejecución de prueba para probar la política nueva antes de comprometerte a borrar los artefactos. Debes establecer al menos una política de eliminación para ver los resultados de tu política de conservación. Para obtener más información sobre cómo ver los resultados de la prueba, consulta la ejecución de prueba.

    Una vez que estés seguro de que las políticas funcionan según lo previsto, vuelve a editar la configuración del repositorio y selecciona Borrar artefactos para aplicar las políticas de limpieza y borrar los artefactos seleccionados.

  4. Haz clic en Agregar una política de limpieza y agrega lo siguiente:

    • Nombre: Asigna un nombre a la política de limpieza. El nombre debe ser único dentro del grupo de políticas que aplicas a un repositorio.
    • Tipo de política: Selecciona Conservar las versiones más recientes.
  5. En el campo Mantener la cantidad, ingresa la cantidad de versiones de un artefacto que se mantendrán en tu repositorio.

  6. Opcional: Selecciona PackagePrefixes para especificar los prefijos de paquetes a los que se aplicará la política de conservación. Por ejemplo, red, blue coincidiría con los nombres de artefactos red-team, redis y bluebird.

  7. Para agregar más políticas de limpieza, haz clic en Agregar una política de limpieza.

  8. Haz clic en Update.

    Tu política de limpieza se aplica a tu repositorio. Puedes ver las políticas de limpieza en la sección Detalles del repositorio si haces clic en Mostrar más.

JSON

El formato es similar a una política de eliminación. Para una política de conservación, el valor de action es {"type": "Keep"}.

Una política de conservación para retener un número específico de versiones tiene una sección mostRecentVersions en lugar de una condition.

{
  "name": "KEEP_POLICY_NAME",
  "action": {"type": "Keep"},
  "mostRecentVersions": {
    "packageNamePrefixes": ["PACKAGE_PREFIXES"],
    "keepCount": MINIMUM_NUMBER
  }
}

Reemplaza lo siguiente:

  • KEEP_POLICY_NAME por un nombre para tu política de conservación El nombre debe ser único dentro del grupo de políticas que aplicas a un repositorio.
  • PACKAGE_PREFIXES con los prefijos de paquete opcionales a los que se aplicará la política de conservación. Por ejemplo, red, blue coincidiría con los nombres de artefactos red-team, redis y bluebird.
  • MINIMUM_NUMBER por la cantidad de versiones de un artefacto que se mantendrán en tu repositorio.

Para aplicar la política de conservación a todos los paquetes en tu repositorio, omite la condición packageNamePrefixes. Se conserva la cantidad especificada de versiones recientes de cada paquete en tu repositorio.

Ejemplo de archivo de política

El siguiente ejemplo de archivo de políticas tiene una política de eliminación y dos políticas de conservación.

  • La política delete-prerelease quita las versiones de los artefactos 30 días después de la carga si este comienza con la string alpha o v0.
  • La política keep-tagged-release conserva los artefactos etiquetados con el prefijo release que tienen un nombre de archivo que comienza con webapp o mobile.
  • La política keep-minimum-versions conserva las cinco versiones más recientes de artefactos que tienen un nombre de archivo que comienza con webapp, mobile o sandbox.
[
  {
    "name": "delete-prerelease",
    "action": {"type": "Delete"},
    "condition": {
      "tagState": "tagged",
      "tagPrefixes": ["alpha", "v0"],
      "olderThan": "30d"
    }
  },
  {
    "name": "keep-tagged-release",
    "action": {"type": "Keep"},
    "condition": {
      "tagState": "tagged",
      "tagPrefixes": ["release"],
      "packageNamePrefixes": ["webapp", "mobile"]
    }
  },
  {
    "name": "keep-minimum-versions",
    "action": {"type": "Keep"},
    "mostRecentVersions": {
      "packageNamePrefixes": ["webapp", "mobile", "sandbox"],
      "keepCount": 5
    }
  }
]

Prueba tus políticas con una ejecución de prueba

Si deseas probar las políticas de limpieza, puedes establecer la política de limpieza para la ejecución de prueba en la consola o ejecutar el comando gcloud artifacts set-cleanup-policies con la marca --dry-run.

Para analizar el efecto de tus políticas de limpieza, puedes ver los registros de auditoría de acceso a los datos de Artifact Registry. Si quieres recibir registros de auditoría de acceso a los datos para las políticas de limpieza, debes habilitar de manera explícita el tipo de escritura de datos de los registros de auditoría de acceso a los datos para el servicio de Artifact Registry. Para habilitar los registros de auditoría de acceso a los datos, consulta Habilita registros de auditoría.

Console

  1. Abre la página Repositorios en la consola de Google Cloud.

    Abrir la página Repositorios

  2. En la lista de repositorios, selecciona el repositorio y haz clic en Editar repositorio.

  3. En la sección Políticas de limpieza, selecciona Ejecución de prueba.

  4. Haz clic en Agregar una política de limpieza y configura las opciones de las políticas de Eliminación condicional, Conservación condicional o Mantener las versiones más recientes.

  5. Haz clic en Update.

Cuando una política de eliminación genera una acción BatchDeleteVersions, el parámetro validateOnly se evalúa como "true".

Para consultar los registros de auditoría de las ejecuciones de prueba de tus políticas de limpieza, ejecuta el siguiente comando:

gcloud logging read 'protoPayload.serviceName="artifactregistry.googleapis.com" AND protoPayload.request.parent:"projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY" AND protoPayload.request.validateOnly=true' \
    --resource-names="projects/PROJECT_ID" \
    --project=PROJECT_ID

El resultado se ve de la manera siguiente:

insertId: qwe123ty3
logName: projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access
operation:
  first: true
  id: projects/my-project/locations/us-west1/operations/12345abc-fb9b-4b6f-b02c-9a397ee807d4
  producer: artifactregistry.googleapis.com
protoPayload:
  '@type': type.googleapis.com/google.cloud.audit.AuditLog
  authenticationInfo:
    principalEmail: service-774919394028@gcp-sa-staging-artreg.iam.gserviceaccount.com
  authorizationInfo:
  - granted: true
    permission: artifactregistry.versions.delete
    resource: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    resourceAttributes: {}
  methodName: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
  request:
    '@type': type.googleapis.com/google.devtools.artifactregistry.v1.BatchDeleteVersionsRequest
    names:
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:4bb3756e4e75dfbc3ced87521ed62b26d16fb4e17993ae6877165f2b6551fb55
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:e8185538b50df953529b300be4963b2c21158808becac7aa0d610f61de8ba701
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:7f7fb0a9453da49f831fe92eb8b1751be13acefe1bbd44cc3f0d63d41c422246
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:84ac871a34560b39dd7bde57b4d333f18a7e8c1b61c8d350c1fefeb1fcd2b3ac
parent: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    validateOnly: true
  requestMetadata:
    callerIp: private
    callerSuppliedUserAgent: stubby_client
    destinationAttributes: {}
    requestAttributes:
      auth: {}
      time: '2023-05-26T04:31:21.909465579Z'
  resourceName: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
  serviceName: artifactregistry.googleapis.com
receiveTimestamp: '2023-05-26T04:31:22.641338594Z'
resource:
  labels:
    method: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
    project_id: my-project
    service: artifactregistry.googleapis.com
  type: audited_resource
severity: INFO
timestamp: '2023-05-26T04:31:21.909004200Z'

gcloud CLI

Para realizar una ejecución de prueba con tus políticas de limpieza, ejecuta el siguiente comando:

gcloud artifacts repositories set-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION \
    --policy=POLICY_FILE \
    --dry-run

Reemplaza lo siguiente:

  • REPOSITORY por el nombre del repositorio
  • PROJECT_ID por el ID del proyecto de Google Cloud.
  • LOCATION por la ubicaciónregional o multirregionaldel repositorio

Cuando una política de eliminación genera una acción BatchDeleteVersions, el parámetro validateOnly se evalúa como "true".

Para consultar los registros de auditoría de las ejecuciones de prueba de tus políticas de limpieza, ejecuta el siguiente comando:

gcloud logging read 'protoPayload.serviceName="artifactregistry.googleapis.com" AND protoPayload.request.parent:"projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY" AND protoPayload.request.validateOnly=true' \
    --resource-names="projects/PROJECT_ID" \
    --project=PROJECT_ID

El resultado se ve de la manera siguiente:

insertId: qwe123ty3
logName: projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access
operation:
  first: true
  id: projects/my-project/locations/us-west1/operations/12345abc-fb9b-4b6f-b02c-9a397ee807d4
  producer: artifactregistry.googleapis.com
protoPayload:
  '@type': type.googleapis.com/google.cloud.audit.AuditLog
  authenticationInfo:
    principalEmail: service-774919394028@gcp-sa-staging-artreg.iam.gserviceaccount.com
  authorizationInfo:
  - granted: true
    permission: artifactregistry.versions.delete
    resource: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    resourceAttributes: {}
  methodName: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
  request:
    '@type': type.googleapis.com/google.devtools.artifactregistry.v1.BatchDeleteVersionsRequest
    names:
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:4bb3756e4e75dfbc3ced87521ed62b26d16fb4e17993ae6877165f2b6551fb55
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:e8185538b50df953529b300be4963b2c21158808becac7aa0d610f61de8ba701
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:7f7fb0a9453da49f831fe92eb8b1751be13acefe1bbd44cc3f0d63d41c422246
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:84ac871a34560b39dd7bde57b4d333f18a7e8c1b61c8d350c1fefeb1fcd2b3ac
parent: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    validateOnly: true
  requestMetadata:
    callerIp: private
    callerSuppliedUserAgent: stubby_client
    destinationAttributes: {}
    requestAttributes:
      auth: {}
      time: '2023-05-26T04:31:21.909465579Z'
  resourceName: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
  serviceName: artifactregistry.googleapis.com
receiveTimestamp: '2023-05-26T04:31:22.641338594Z'
resource:
  labels:
    method: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
    project_id: my-project
    service: artifactregistry.googleapis.com
  type: audited_resource
severity: INFO
timestamp: '2023-05-26T04:31:21.909004200Z'

Aplica políticas a un repositorio

Para usar las políticas de limpieza definidas en un archivo JSON local, aplícalas a los repositorios en los que quieras que Artifact Registry maneje la eliminación automática de las versiones de los artefactos con lgcloud CLIud.

Para aplicar políticas de limpieza configuradas como Ejecución de prueba en la consola, configura la política como Borrar artefactos.

Solo puedes aplicar políticas de limpieza a repositorios estándar. No puedes aplicar políticas de limpieza a los siguientes elementos:

  • Un proyecto de Google Cloud,

Console

Para aplicar políticas de limpieza, haz lo siguiente:

  1. Abre la página Repositorios en la consola de Google Cloud.

    Abrir la página Repositorios

  2. En la lista de repositorios, selecciona el repositorio y haz clic en Editar repositorio.

  3. En la sección Políticas de limpieza, selecciona Borrar artefactos.

    Artifact Registry borra y retiene los artefactos que coincidan con tus políticas mediante un trabajo en segundo plano que se ejecuta de forma periódica. Los cambios deberían aplicarse en el plazo aproximado de un día.

gcloud

Para aplicar las políticas de limpieza, ejecuta el siguiente comando en el directorio con tu archivo de política de limpieza.

gcloud artifacts repositories set-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION \
    --policy=POLICY_FILE \
    --no-dry-run

Reemplaza lo siguiente:

  • REPOSITORY por el nombre del repositorio
  • PROJECT_ID por el ID del proyecto de Google Cloud.
  • LOCATION por la ubicaciónregional o multirregionaldel repositorio
  • --no-dry-run inhabilita la funcionalidad de ejecución de prueba para el repositorio.
  • POLICY_FILE es el nombre del archivo con la política de limpieza.

Por ejemplo, el siguiente comando aplica políticas en policy.json al repositorio my-repo en la región us-west1 del proyecto my-project.

gcloud artifacts repositories set-cleanup-policies my-repo \
    --project=my-project \
    --location=us-west1 \
    --policy=policy.json

Artifact Registry borra y retiene los artefactos que coincidan con tus políticas mediante un trabajo en segundo plano que se ejecuta de forma periódica. Los cambios deberían aplicarse en el plazo aproximado de un día.

Actualiza una política

Console

  1. Abre la página Repositorios en la consola de Google Cloud.

    Abrir la página Repositorios

  2. En la lista de repositorios, selecciona el repositorio y haz clic en Editar repositorio.

  3. En la sección Políticas de limpieza, haz clic en el nombre de la política que deseas configurar para modificar.

  4. Edita la política de limpieza y haz clic en Actualizar.

    Tu política de limpieza se aplica a tu repositorio.

gcloud CLI

Para actualizar las políticas existentes, edita la configuración en el archivo de políticas y, luego, ejecuta el siguiente comando para aplicar las políticas de nuevo.

gcloud artifacts repositories set-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION \
    --policy=POLICY_FILE \
    --no-dry-run

Reemplaza lo siguiente:

  • REPOSITORY por el nombre del repositorio
  • PROJECT_ID por el ID del proyecto de Google Cloud.
  • LOCATION por la ubicaciónregional o multirregionaldel repositorio
  • --no-dry-run inhabilita la funcionalidad de ejecución de prueba para el repositorio.
  • POLICY_FILE es el nombre del archivo con la política de limpieza.

Enumerar políticas de limpieza de repositorios

Puedes ver las políticas de limpieza asociadas a un repositorio.

Console

  1. Abre la página Repositorios en la consola de Google Cloud.

    Abrir la página Repositorios

  2. En la lista de repositorios, selecciona el repositorio que deseas ver.

  3. En la sección Detalles del repositorio, haz clic en Mostrar más.

    Se muestran los nombres de las políticas de limpieza.

  4. Para ver o editar los detalles de las políticas de limpieza del repositorio, haz clic en Editar repositorio.

    Los detalles de tus políticas de limpieza existentes se enumeran en la sección Políticas de limpieza.

gcloud CLI

Ejecuta el siguiente comando:

gcloud artifacts repositories list-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION

Reemplaza lo siguiente:

  • REPOSITORY por el nombre del repositorio
  • PROJECT_ID por el ID del proyecto de Google Cloud.
  • LOCATION por la ubicaciónregional o multirregionaldel repositorio

Quita una política de un repositorio

Quita una política de limpieza de un repositorio cuando ya no desees que Artifact Registry borre de manera automática las versiones de los artefactos.

Console

  1. Abre la página Repositorios en la consola de Google Cloud.

    Abrir la página Repositorios

  2. En la lista de repositorios, selecciona el repositorio y haz clic en Editar repositorio.

  3. En la sección Políticas de limpieza, coloca el cursor sobre el nombre de la política que deseas borrar.

  4. Haz clic en el ícono Borrar.

  5. Haz clic en Update.

    Se borró la política de limpieza.

gcloud CLI

Ejecuta el siguiente comando:

gcloud artifacts repositories delete-cleanup-policies REPOSITORY \
    --policynames=POLICY_NAMES \
    --project=PROJECT_ID \
    --location=LOCATION

Reemplaza lo siguiente:

  • REPOSITORY es el nombre del repositorio.
  • PROJECT_ID es el ID de tu proyecto de Google Cloud.
  • LOCATION es la ubicaciónregional o multirregionaldel repositorio.
  • POLICY_NAMES es una lista separada por comas de los nombres de las políticas que deseas quitar.

Por ejemplo, con el siguiente comando, se quita una política llamada delete-test del repositorio my-repo en la región us-west1 del proyecto my-project:

gcloud artifacts repositories delete-cleanup-policies my-repo \
    --policynames=delete-test \
    --project=my-project \
    --location=us-west1

Entradas del registro de auditoría para las políticas de limpieza

Para ver las entradas de registro de la política de limpieza en Cloud Logging, debes enable el registro DATA_WRITE.

Cuando configuras una política de limpieza en un repositorio, la operación se registra como una actualización del repositorio (operación UpdateRepository).

Cuando Artifact Registry borra una versión de un artefacto, registra el evento en los registros de acceso a los datos de Cloud Logging. Las entradas de registro muestran que la cuenta de servicio de Artifact Registry realizó la eliminación. El ID de la cuenta de servicio de Artifact Registry tiene el formato service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com

Otras herramientas

En el caso de las imágenes de contenedor, también puedes usar las siguientes herramientas para administrar el ciclo de vida de la imagen:

  • gcrane: Es una herramienta para registros de contenedores que puedes usar a fin de copiar imágenes entre repositorios.
  • gcr-cleaner: Es una herramienta para borrar imágenes de contenedor según los criterios especificados.

Las herramientas gcrane y gcr-cleaner no son productos oficiales de Google.