Поделиться через


Контроль доступа на основе атрибутов Microsoft Entra (ABAC) для разрешений репозитория (предварительная версия)

Реестр контейнеров Azure (ACR) поддерживает управление доступом на основе атрибутов Microsoft Entra (ABAC) для управления разрешениями репозитория. Эта функция повышает безопасность, обеспечивая более детализированное управление разрешениями в репозиториях реестра контейнеров. ABAC расширяет управление доступом на основе ролей Microsoft Entra (RBAC), добавляя условия, привязанные к конкретным репозиториям, в назначениях ролей.

ABAC предназначен для управления разрешениями репозитория с помощью управления доступом на основе ролей Microsoft Entra (RBAC), назначений ролей Microsoft Entra и удостоверений Microsoft Entra. Для управления разрешениями репозитория без Microsoft Entra используйте разрешения репозитория на основе токенов, не относящиеся к Microsoft Entra.

Настройка режима разрешений назначения ролей реестра

Чтобы использовать Microsoft Entra ABAC для управления разрешениями репозитория, убедитесь, что для режима разрешений назначения ролей реестра задано значение "RBAC Registry + ABAC Repository Permissions". Этот режим позволяет использовать назначения ролей RBAC (с помощью встроенных ролей ACR) с необязательными условиями ABAC для области назначения ролей определенным репозиториям.

Можно настроить режим разрешений назначения ролей реестра во время создания реестра или обновления существующего реестра. Это назначение роли можно выполнить с помощью портала Azure или Azure CLI. Вы можете включить ABAC для любого реестра независимо от его номера SKU.

Замечание

Убедитесь, что установлена последняя версия Azure CLI, выполнив команду az upgradeAzure CLI. Кроме того, если вы ранее приняли участие в закрытой предварительной версии этой функции, возможно, вы установили пользовательское расширение частной предварительной версии для управления ACR ABAC. Это пользовательское расширение больше не требуется и следует удалить (чтобы избежать конфликтов), выполнив команду az extension remove --name acrabacAzure CLI.

Влияние на существующие назначения ролей

Это важно

Если вы настроите реестр для использования RBAC Registry + ABAC Repository Permissions, некоторые существующие назначения ролей не учитываются, так как другой набор встроенных ролей ACR применяется к реестрам с поддержкой ABAC.

Например, роли AcrPull, AcrPush и AcrDelete не учитываются в реестре с включенной поддержкой ABAC. Вместо этого в реестрах с поддержкой ABAC используйте роли Container Registry Repository Reader, Container Registry Repository Writer, и Container Registry Repository Contributor для предоставления разрешений на использование образов на уровне реестра или репозитория.

Для получения дополнительной информации о роли, определяемой вашим сценарием и режимом разрешений на назначение ролей реестра, см. сценарии встроенных ролей ACR. Помимо этого, обратитесь к справочнику по встроенным ролям ACR для получения подробного описания каждой роли.

Создание реестра с включенным ABAC

При создании реестра на портале Azure выберите параметр "Реестр RBAC и разрешения репозитория ABAC" в раскрывающемся списке "Режим разрешений назначения ролей".

Снимок экрана: создание реестра контейнеров с включенным ABAC.

Перейдите к заполнению остальной части формы создания реестра и нажмите кнопку "Создать", чтобы создать реестр. Дополнительные сведения о создании реестра см. в статье "Создание реестра контейнеров Azure" с помощью портала Azure.

Обновление существующего реестра для включения ABAC

Чтобы просмотреть существующий режим разрешений назначения ролей реестра, перейдите в колонку "Свойства" реестра. Текущий режим разрешений назначения ролей отображается в поле "Режим разрешений назначения ролей".

Чтобы обновить режим разрешений назначения ролей существующего реестра, выберите "RBAC Registry + ABAC Repository Permissions" (Разрешения репозитория RBAC и ABAC) и нажмите кнопку "Сохранить", чтобы обновить реестр.

Снимок экрана: обновление существующего реестра контейнеров для включения ABAC.

Назначение прав доступа для репозитория Microsoft Entra ABAC

Вы можете использовать портал Azure или Azure CLI для назначения условий Microsoft Entra ABAC для области назначений ролей определенным репозиториям. В этом разделе приведены примеры добавления условий ABAC для определенного репозитория, префикса репозитория (подстановочный знак) или нескольких префиксов репозитория (несколько подстановочных знаков).

Встроенные роли с поддержкой ABAC

Следующие встроенные роли ACR — это роли с включенной функцией ABAC. Вы можете указать необязательные условия ABAC для следующих ролей, чтобы при необходимости ограничивать назначения ролей конкретными репозиториями.

  • Container Registry Repository Reader — роль с поддержкой ABAC, которая предоставляет разрешения на чтение изображений, тегов и метаданных в репозиториях в реестре.
  • Container Registry Repository Writer — роль с поддержкой ABAC, которая предоставляет разрешения на чтение, запись и обновление изображений, тегов и метаданных в репозиториях в реестре.
  • Container Registry Repository Contributor — роль с поддержкой ABAC, которая предоставляет разрешения на чтение, запись, обновление и удаление изображений, тегов и метаданных в репозиториях в реестре.

Обратите внимание, что эти роли не поддерживают разрешения на перечисление списков репозиториев в реестре. Чтобы перечислить все репозитории в реестре (без предоставления разрешений на чтение содержимого репозитория), необходимо дополнительно назначить Container Registry Repository Catalog Lister роль. Эта отдельная роль не поддерживает условия ABAC и всегда имеет разрешения на перечисление всех репозиториев в реестре.

Это важно

Если вы назначаете роль с поддержкой ABAC без условий ABAC, назначение роли не будет ограничено репозиториями. Это означает, что назначение ролей без условий ABAC будет рассматриваться как назначение ролей на уровне реестра, предоставляя разрешения всем репозиториям в реестре. Чтобы ограничить назначение роли определенными репозиториями, необходимо включить условия ABAC при назначении роли с поддержкой ABAC.

Дополнительные сведения о роли, основанной на вашем сценарии, и режиме назначения разрешений ролей реестра см. в сценариях встроенных ролей ACR. Кроме того, ознакомьтесь со справочником по встроенным ролям ACR для подробного описания каждой роли.

Назначение ролей области определенному репозиторию

В этом примере мы назначаем Container Registry Repository Reader роль для предоставления права чтения для одного репозитория. Добавив условия ABAC, это назначение роли позволяет извлекать изображения удостоверения, просматривать теги и читать метаданные только из указанного репозитория, предотвращая доступ к другим репозиториям в реестре.

Перейдите к панели "Управление доступом (IAM)" реестра. Нажмите кнопку "Добавить" и выберите "Добавить назначение ролей".

Снимок экрана добавления назначения роли.

Выберите Container Registry Repository Reader в качестве роли.

Снимок экрана: выбор роли для назначения.

Продолжайте, выбрав удостоверение, которому будет назначена роль.

Затем перейдите на вкладку "Условия". Нажмите кнопку "Добавить условие", чтобы добавить новое условие ABAC, чтобы ограничить область назначения роли.

Снимок экрана: добавление условий назначения ролей.

Выберите опцию "визуальный редактор" в конструкторе условий ABAC.

Снимок экрана: выбор параметра редактора визуальных элементов.

Выберите действия (разрешения), которые нужно предоставить для этой роли, ограниченной областью репозитория. Для большинства случаев выберите все действия (разрешения), принадлежащие ранее выбранной роли, чтобы удостоверения могли выполнять только эти действия в пределах области репозитория.

Снимок экрана: выбор действий и разрешений для предоставления.

Добавьте выражение для условия ABAC, чтобы ограничить назначение роли определенным репозиторием.

Снимок экрана, демонстрирующий процесс добавления выражения для условия ABAC.

Настройте следующие параметры выражения для ограничения условия ABAC для определенного репозитория.

  • Источник атрибута: Request
  • Атрибут: Repository name
  • Оператор: StringEqualsIgnoreCase
  • Значение: <repository-name> — полное имя репозитория.
    • Например, если полное имя репозитория равно nginx, введите nginx.
    • Если имя полного репозитория равно backend/nginx, введите backend/nginx.

Снимок экрана настройки выражения для определения границ условия ABAC для конкретного репозитория.

Нажмите кнопку "Сохранить", чтобы сохранить условие ABAC.

Просмотрите условие для назначения ролей ABAC. На странице обзора содержится выражение кода условия ABAC, которое может быть использовано для назначения той же роли с тем же условием ABAC, используя Azure CLI.

Снимок экрана: просмотр условия ABAC для ограничения области до конкретного репозитория.

Выполните назначение роли, нажав кнопку "Проверить и назначить".

После создания назначения роли можно просмотреть, изменить или удалить назначение роли. Перейдите к разделу "Управление доступом (IAM)" реестра и перейдите на вкладку "Назначения ролей", чтобы просмотреть список существующих назначений ролей, которые применяются к реестру.

Назначить роль с областью действия нескольким хранилищам, используя префикс имени хранилища (подстановочный знак)

В этом примере мы назначим Container Registry Repository Reader роль, чтобы предоставить разрешения на извлечение нескольким репозиториям с общим префиксом (подстановочным знаком). Добавив условия ABAC, это назначение роли позволяет извлекать изображения, просматривать теги и читать метаданные только из репозиториев с общим префиксом, предотвращая доступ к другим репозиториям в реестре.

Если вы выполнили предыдущий пример, чтобы назначить Container Registry Repository Reader роль определенному репозиторию, необходимо удалить это назначение роли (перейдя в панель "Управление доступом (IAM)" и выбрав вкладку "Назначения ролей"), прежде чем создавать новое с условием ABAC, ограниченным префиксом репозитория.

Выполните те же действия, что и в предыдущем примере , чтобы выполнить назначение роли с условиями ABAC.

На шаге, чтобы добавить выражение для условия ABAC, настройте выражение для условия ABAC, чтобы ограничить назначение роли несколькими репозиториями с общим префиксом (подстановочным знаком). Настройте следующие параметры:

  • Источник атрибута: Request
  • Атрибут: Repository name
  • Оператор: StringStartsWithIgnoreCase
  • Значение: <repository-prefix> - префикс репозиториев, включая косую черту /.
    • Например, чтобы предоставить разрешения всем репозиториям с префиксом backend/, такие как backend/nginx и backend/redis, введите backend/.
    • Чтобы предоставить разрешения всем репозиториям с префиксом frontend/js/, например frontend/js/react и frontend/js/vueвведите frontend/js/.

Это важно

Треугольная скобка / необходима в выражении условия ABAC в Value поле. Если косая черта /не включена, вы можете непреднамеренно предоставить разрешения другим репозиториям, которые не соответствуют префиксу. Например, если вы вводите backend без завершающей косой черты /, назначение роли предоставляет разрешения для всех репозиториев с префиксом backend, таких как backend/nginx, backend/redis, backend-infra/k8s, backend-backup/store, backend и backendsvc/containers.

Скриншот настройки выражения для сферы действия условия ABAC по префиксу репозитория.

Нажмите кнопку "Сохранить", чтобы сохранить условие ABAC.

Просмотрите условие ABAC для назначения роли. На странице обзора содержится выражение кода условия ABAC, которое можно использовать для назначения той же роли с тем же условием ABAC, используя Azure CLI.

Снимок экрана: просмотр условия ABAC для ограничения к префиксу репозитория.

Выполните назначение роли, нажав кнопку "Проверить и назначить".

После создания назначения роли можно просмотреть, изменить или удалить назначение роли. Перейдите к разделу "Управление доступом (IAM)" реестра и перейдите на вкладку "Назначения ролей", чтобы просмотреть список существующих назначений ролей, которые применяются к реестру.

Назначение роли с ограниченным доступом к нескольким хранилищам данных с использованием множественных префиксов репозитория (множество шаблонных символов)

В этом примере мы назначим Container Registry Repository Reader роль, чтобы предоставить права чтения нескольким репозиториям под двумя разными префиксами (несколько подстановочных символов). Добавив условия ABAC, это назначение роли позволяет извлекать изображения удостоверения, просматривать теги и читать метаданные только из указанного репозитория, предотвращая доступ к другим репозиториям в реестре.

Если вы следовали предыдущему примеру, чтобы назначить роль Container Registry Repository Reader определенному репозиторию, необходимо удалить это назначение роли (перейдя в раздел "Управление доступом (IAM)" и выбрав вкладку "Назначения ролей"), прежде чем создать новое с условием ABAC, заданным для префикса репозитория.

Выполните те же действия, что и в предыдущем примере , чтобы выполнить назначение роли с условиями ABAC.

На шаге добавления выражения для условия ABAC настройте два выражения для области применения роли в нескольких хранилищах данных под двумя префиксами: backend/ и frontend/js/ (несколько подстановочных знаков).

Для первого выражения настройте следующие параметры:

  • Источник атрибута: Request
  • Атрибут: Repository name
  • Оператор: StringStartsWithIgnoreCase
  • Значение: <repository-prefix> - префикс репозиториев, включая косую черту /.
    • Например, чтобы предоставить разрешения всем репозиториям с префиксом backend/, таким как backend/nginx и backend/redis, введите backend/.
    • Чтобы предоставить разрешения всем репозиториям с префиксом frontend/js/, например frontend/js/react и frontend/js/vueвведите frontend/js/.

Нажмите кнопку "Добавить выражение". Убедитесь, что логический оператор имеет значение Or. При необходимости можно выбрать "Группировать" для группирования выражений и управлять порядком оценки. Визуальный редактор также поддерживает несколько логических операторов, включая "And", "Or", иерархическую группировку и отрицание.

Для второго выражения настройте следующие параметры:

  • Источник атрибута: Request
  • Атрибут: Repository name
  • Оператор: StringStartsWithIgnoreCase
  • Значение: <repository-prefix> - префикс репозиториев, включая косую черту /.
    • Например, чтобы предоставить разрешения всем репозиториям с префиксом backend/, таким как backend/nginx и backend/redis, введите backend/.
    • Чтобы предоставить разрешения всем репозиториям с префиксом frontend/js/, например frontend/js/react и frontend/js/vueвведите frontend/js/.

Это важно

Закрывающая косая черта / требуется в Value поле для выражения условия ABAC. Если косая черта /не включена, вы можете непреднамеренно предоставить разрешения другим репозиториям, которые не соответствуют префиксу. Например, если вы вводите backend без завершающей косой черты /, назначение роли предоставляет разрешения для всех репозиториев с префиксом backend, например backend/nginx, backend/redis, backend-infra/k8s, backend-backup/store, backend и backendsvc/containers.

Снимок экрана конфигурации выражения для задания области условия ABAC с несколькими префиксами репозитория.

Нажмите кнопку "Сохранить", чтобы сохранить условие ABAC.

Просмотрите условие назначения роли в системе ABAC. Страница обзора включает в себя кодовое выражение условия ABAC, которое можно использовать для осуществления того же назначения роли с тем же условием ABAC с помощью Azure CLI.

Снимок экрана: обзор условия ABAC для нескольких префиксов репозитория.

Выполните назначение роли, нажав кнопку "Проверить и назначить".

После создания назначения роли можно просмотреть, изменить или удалить назначение роли. Перейдите к разделу "Управление доступом (IAM)" реестра и перейдите на вкладку "Назначения ролей", чтобы просмотреть список существующих назначений ролей, которые применяются к реестру.

Максимальное количество условий ABAC

Портал Azure поддерживает ограниченное количество условий ABAC на назначение ролей.

Чтобы добавить больше условий ABAC, чем позволяет лимит портала Azure, вы можете использовать Azure CLI для создания назначения роли с дополнительными условиями ABAC.

Дальнейшие шаги