Скрипт для удаления старых образов из реестра контейнеров Azure

Я хочу удалить некоторые нежелательные теги / изображения из различных репозиториев реестра контейнеров Azure. Я хочу сделать все это программно. Например, мне нужно:

  • Аутентифицироваться с ACR
  • Список всех репозиториев
  • Список всех тегов каждого репозитория
  • Удалите ненужные изображения с помощью определенных тегов.

Обычно эти операции можно выполнить с помощью Azure CLI и команд az acr. Возможно, я смогу создать сценарий PowerShell с az acr командами для этого.

Но могу ли я сделать это с помощью Python? Есть ли что-то вроде Graph API для выполнения этих операций?

Я нашел этот API для ACR, но он позволяет удалить только весь реестр. Он не позволяет выполнять операции, специфичные для репозитория: https://docs.microsoft.com/en-us/rest/api/containerregistry/

Я пробовал использовать API реестра докеров: https://docs.docker.com/registry/spec/api/

#!/bin/bash

export registry="myregistry.azurecr.io"
export user="myusername"
export password="mypassword"

export operation="/v2/_catalog"

export credentials=$(echo -n "$user:$password" | base64 -w 0)

export catalog=$(curl -s -H "Authorization: Basic $credentials" https://$registry$operation)
echo "Catalog"
echo $catalog

Но все время возвращается ошибка:

{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Name":"catalog","Action":"*"}]}]}

Как правильно пройти аутентификацию с помощью ACR перед использованием Docker Registry API?


person AnjanaDyna    schedule 26.08.2019    source источник
comment
Вы ссылались на docs.microsoft.com/en- us / azure / container-registry /?   -  person    schedule 26.08.2019
comment
Да, все, что использует команды az acr.   -  person AnjanaDyna    schedule 27.08.2019


Ответы (2)


Для аутентификации в ACR вы можете просто использовать метод базовой аутентификации с пользователем и паролем. И формат должен быть таким:

curl -v -u $user:$passwd https://yourACRName.azurecr.io:443/v2/_catalog

В качестве пользователя и пароля я предлагаю вам использовать субъект-службу для аутентификации. Вы можете выполнить действия, указанные в Контейнер Azure. Аутентификация реестра с субъектами служб. Взгляните на роли для ACR. Подходит роль Contributor с достаточными разрешениями для Список всех репозиториев, Список всех тегов каждого репозитория и Удаление нежелательных изображений с помощью определенных тегов. Учетные данные администратора не рекомендуются из-за разрешения администратора.

person Charles Xu    schedule 29.08.2019
comment
Спасибо. Базовая аутентификация работает с именем пользователя и паролем, созданным для ACR в разделе ключей доступа. Надеюсь, руководитель службы тоже будет работать. Еще не пробовал. - person AnjanaDyna; 02.09.2019
comment
@AnjanaDyna Да, это тоже работает. Собственно, принципал-сервис работает как пользователь и пароль. - person Charles Xu; 03.09.2019

В этом ответе на этот вопрос есть образец, который поможет при удалении: Реестр контейнеров Azure - удалить все изображения, кроме 2

Обычная проверка подлинности должна работать при использовании учетных данных администратора.

person Nathan Anderson    schedule 26.08.2019