ACR(Azure Container Registry)은 리포지토리 권한을 관리하기 위한 Microsoft Entra ABAC(특성 기반 액세스 제어) 를 지원합니다. 이 기능은 컨테이너 레지스트리 리포지토리에 대한 보다 세부적인 권한 관리를 사용하도록 설정하여 보안을 강화합니다. ABAC는 역할 할당에 리포지토리별 조건을 도입하여 Microsoft Entra RBAC(역할 기반 액세스 제어)를 기반으로 합니다.
ABAC는 Microsoft Entra RBAC(역할 기반 액세스 제어), Microsoft Entra 역할 할당 및 Microsoft Entra ID를 사용하여 리포지토리 권한을 관리하도록 설계되었습니다. Microsoft Entra 없이 리포지토리 권한을 관리하려면 대신 비 Microsoft Entra 토큰 기반 리포지토리 권한을 사용합니다.
레지스트리 역할 할당 권한 모드 구성
Microsoft Entra ABAC를 사용하여 리포지토리 권한을 관리하려면 레지스트리 역할 할당 권한 모드가 "RBAC 레지스트리 + ABAC 리포지토리 권한"으로 설정되어 있는지 확인합니다. 이 모드를 사용하면 선택적 ABAC 조건과 함께 RBAC 역할 할당( ACR 기본 제공 역할 사용)을 사용하여 역할 할당을 특정 리포지토리로 범위를 지정할 수 있습니다.
레지스트리를 만드는 동안 또는 기존 레지스트리를 업데이트하여 레지스트리의 역할 할당 권한 모드를 구성할 수 있습니다. 이 역할 할당은 Azure Portal 또는 Azure CLI를 통해 수행할 수 있습니다. SKU에 관계없이 모든 레지스트리에 ABAC를 사용하도록 설정할 수 있습니다.
비고
Azure CLI 명령을 az upgrade
실행하여 최신 버전의 Azure CLI가 설치되어 있는지 확인합니다.
또한 이전에 이 기능의 프라이빗 미리 보기에 참여한 경우 ACR ABAC를 관리하기 위해 사용자 지정 프라이빗 미리 보기 확장을 설치했을 수 있습니다.
이 사용자 지정 확장은 더 이상 필요하지 않으며 Azure CLI 명령을 az extension remove --name acrabac
실행하여 (충돌을 방지하기 위해) 제거해야 합니다.
기존 역할 할당에 미치는 영향
중요합니다
"RBAC 레지스트리 + ABAC 리포지토리 권한"을 사용하도록 레지스트리를 구성하는 경우 다른 ACR 기본 제공 역할 집합이 ABAC 사용 레지스트리에 적용되므로 일부 기존 역할 할당이 적용되지 않거나 다른 영향을 미칩니다.
예를 들어 AcrPull
, AcrPush
및 AcrDelete
역할은 ABAC 사용 레지스트리에서 인정되지 않습니다.
대신 ABAC 사용 레지스트리에서 , Container Registry Repository Reader
및 Container Registry Repository Writer
역할을 사용하여 Container Registry Repository Contributor
레지스트리 전체 또는 리포지토리별 이미지 권한을 부여합니다.
추가적으로 Owner
, Contributor
, 그리고 Reader
와 같은 권한 있는 역할은 ABAC 활성화 레지스트리에 서로 다른 영향을 미칩니다.
컨트롤 플레인 권한만 부여하여 레지스트리 자체를 만들고, 업데이트하고, 삭제합니다.
이러한 권한 있는 역할은 레지스트리의 리포지토리 및 이미지에 대한 데이터 평면 권한을 부여하지 않습니다.
시나리오 및 레지스트리 역할 할당 권한 모드를 기반으로 하는 역할에 대한 자세한 내용은 ACR 기본 제공 역할에 대한 시나리오를 참조하세요. 또는 각 역할에 대한 자세한 설명은 ACR 기본 제공 역할 참조 를 참조하세요.
ACR 작업, 빠른 작업, 빠른 빌드 및 빠른 실행에 미치는 영향
중요합니다
"RBAC 레지스트리 + ABAC 리포지토리 권한"을 사용하도록 레지스트리를 구성하는 경우 새로운 ACR 작업과 기존 ACR 작업, 빠른 작업, 빠른 빌드 및 빠른 실행이 영향을 받습니다. 더 이상 ABAC 사용 원본 레지스트리 및 해당 콘텐츠에 대한 기본 데이터 평면 액세스 권한이 없습니다.
이 변경의 영향과 ABAC 사용 원본 레지스트리에서 ACR 작업, 빠른 작업, 빠른 빌드 및 빠른 실행에 대한 데이터 평면 액세스 권한을 부여하는 방법을 이해하려면 부록: ACR 작업, 빠른 작업, 빠른 빌드 및 빠른 실행에 ABAC를 사용하도록 설정하는 효과 참조하세요.
ABAC를 사용하도록 설정된 레지스트리 만들기
Azure Portal을 통해 새 레지스트리를 만들 때 "역할 할당 권한 모드" 드롭다운에서 "RBAC 레지스트리 + ABAC 리포지토리 권한" 옵션을 선택합니다.
레지스트리 만들기 양식의 나머지 부분을 계속 채운 다음 "만들기"를 클릭하여 레지스트리를 만듭니다. 레지스트리를 만드는 방법에 대한 자세한 내용은 Azure Portal을 사용하여 Azure Container Registry 만들기를 참조하세요.
ABAC를 사용하도록 기존 레지스트리 업데이트
레지스트리의 기존 역할 할당 권한 모드를 보려면 레지스트리의 "속성" 블레이드로 이동합니다. 현재 역할 할당 권한 모드는 "역할 할당 권한 모드" 필드에 표시됩니다.
기존 레지스트리의 "역할 할당 권한 모드"를 업데이트하려면 "RBAC 레지스트리 + ABAC 리포지토리 권한"을 선택하고 "저장"을 클릭하여 레지스트리를 업데이트합니다.
Microsoft Entra ABAC 리포지토리 권한 할당
Azure Portal 또는 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 조건을 추가하면 이 역할 할당을 통해 ID가 이미지를 끌어오고 태그를 보고 지정된 리포지토리에서만 메타데이터를 읽을 수 있으므로 레지스트리의 다른 리포지토리에 액세스할 수 없습니다.
레지스트리의 "액세스 제어(IAM)" 블레이드로 이동합니다. "추가"를 클릭하고 "역할 할당 추가"를 선택합니다.
Container Registry Repository Reader
역할로 선택하십시오.
역할을 할당할 ID를 선택하여 계속합니다.
그 후 "조건" 탭으로 계속 이동합니다. "조건 추가" 단추를 선택하여 역할 할당 범위를 제한하는 새 ABAC 조건을 추가합니다.
ABAC 조건 작성기에서 "시각적인" 편집기 옵션을 선택합니다.
이 리포지토리 범위 역할 할당에서 부여할 작업(권한)을 선택합니다. 대부분의 사용 사례에서 이전에 선택한 역할에 속한 모든 작업(권한)을 선택하여 ID가 리포지토리 범위 내에서만 이러한 작업을 수행할 수 있도록 합니다.
ABAC 조건에 대한 식을 추가하여 역할 할당을 특정 리포지토리로 제한합니다.
ABAC 조건의 범위를 특정 리포지토리로 지정하도록 식에 대해 다음 옵션을 구성합니다.
- 특성 원본:
Request
- 특성:
Repository name
- 연산자:
StringEqualsIgnoreCase
- 값:
<repository-name>
- 리포지토리의 전체 이름입니다.- 예를 들어 전체 리포지토리 이름이면
nginx
.를 입력합니다nginx
. - 전체 리포지토리 이름이
backend/nginx
면 .를 입력합니다backend/nginx
.
- 예를 들어 전체 리포지토리 이름이면
"저장"을 클릭하여 ABAC 조건을 저장합니다.
역할 할당 ABAC 조건을 검토합니다. 검토 페이지에는 AZURE CLI를 사용하여 동일한 ABAC 조건으로 동일한 역할 할당을 수행하는 데 사용할 수 있는 ABAC 조건의 코드 식이 포함되어 있습니다.
"검토 + 할당"을 클릭하여 역할 할당을 수행합니다.
역할 할당이 만들어지면 역할 할당을 보거나 편집하거나 삭제할 수 있습니다. 레지스트리의 "액세스 제어(IAM)"로 이동하고 "역할 할당" 탭을 선택하여 레지스트리에 적용되는 기존 역할 할당 목록을 봅니다.
리포지토리 접두사를 사용하여 여러 리포지토리로 역할 할당 범위 지정(와일드카드)
이 예제에서는 공통 접두사(와일드카드)를 사용하여 여러 리포지토리에 끌어오기 권한을 부여하는 역할을 할당 Container Registry Repository Reader
합니다.
ABAC 조건을 추가하면 이 역할 할당을 통해 ID가 이미지를 끌어오고, 태그를 보고, 공통 접두사를 사용하여 리포지토리에서만 메타데이터를 읽을 수 있으므로 레지스트리의 다른 리포지토리에 액세스할 수 없습니다.
이전 예제를 따라 특정 리포지토리에 역할을 할당 Container Registry Repository Reader
한 경우 ABAC 조건이 리포지토리 접두사로 범위가 지정된 새 역할을 만들기 전에 해당 역할 할당을 삭제해야 합니다("액세스 제어(IAM)" 블레이드로 이동하고 "역할 할당" 탭을 선택하여 해당 역할 할당을 삭제해야 합니다.
이전 예제와 동일한 단계에 따라 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 조건을 검토합니다. 검토 페이지에는 AZURE CLI를 사용하여 동일한 ABAC 조건으로 동일한 역할 할당을 수행하는 데 사용할 수 있는 ABAC 조건의 코드 식이 포함되어 있습니다.
"검토 + 할당"을 클릭하여 역할 할당을 수행합니다.
역할 할당이 만들어지면 역할 할당을 보거나 편집하거나 삭제할 수 있습니다. 레지스트리의 "액세스 제어(IAM)"로 이동하고 "역할 할당" 탭을 선택하여 레지스트리에 적용되는 기존 역할 할당 목록을 봅니다.
여러 리포지토리 접두사를 사용하여 여러 리포지토리로 역할 할당 범위 지정(여러 와일드카드)
이 예제에서는 여러 리포지토리에 대한 끌어오기 권한을 부여하도록 Container Registry Repository Reader
역할을 두 개의 서로 다른 접두사(여러 와일드카드) 아래에 할당합니다.
ABAC 조건을 추가하면 이 역할 할당을 통해 ID가 이미지를 끌어오고 태그를 보고 지정된 리포지토리에서만 메타데이터를 읽을 수 있으므로 레지스트리의 다른 리포지토리에 액세스할 수 없습니다.
이전 예제를 따라 특정 리포지토리에 역할을 할당 Container Registry Repository Reader
한 경우 ABAC 조건이 리포지토리 접두사로 범위가 지정된 새 역할을 만들기 전에 해당 역할 할당을 삭제해야 합니다("액세스 제어(IAM)" 블레이드로 이동하고 "역할 할당" 탭을 선택하여 해당 역할 할당을 삭제해야 합니다.
이전 예제와 동일한 단계에 따라 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/
.
- 예를 들어 접두
중요합니다
/
필드에서 ABAC 조건의 식을 표현하기 위해 후행 슬래시 Value
가 필요합니다.
후행 슬래시 /
를 포함하지 않으면 접두사와 일치하지 않는 다른 리포지토리에 의도치 않게 권한을 부여할 수 있습니다.
예를 들어, backend
를 후행 슬래시 /
없이 입력하는 경우, 역할 할당은 backend
접두사를 가진 모든 리포지토리에 권한을 부여합니다. 예를 들면, backend/nginx
, backend/redis
, backend-infra/k8s
, backend-backup/store
, backend
, 및 backendsvc/containers
입니다.
"저장"을 클릭하여 ABAC 조건을 저장합니다.
역할 할당 ABAC 조건을 검토합니다. 검토 페이지에는 AZURE CLI를 사용하여 동일한 ABAC 조건으로 동일한 역할 할당을 수행하는 데 사용할 수 있는 ABAC 조건의 코드 식이 포함되어 있습니다.
"검토 + 할당"을 클릭하여 역할 할당을 수행합니다.
역할 할당이 만들어지면 역할 할당을 보거나 편집하거나 삭제할 수 있습니다. 레지스트리의 "액세스 제어(IAM)"로 이동하고 "역할 할당" 탭을 선택하여 레지스트리에 적용되는 기존 역할 할당 목록을 봅니다.
ABAC 조건의 최대 수
Azure Portal은 역할 할당당 제한된 수의 ABAC 조건을 지원합니다.
ABAC 조건의 Azure Portal 제한을 초과하여 추가하려면 Azure CLI를 사용하여 더 많은 ABAC 조건으로 역할 할당을 만들 수 있습니다.
부록: ACR 작업, 빠른 작업, 빠른 빌드 및 빠른 실행에 ABAC를 사용하도록 설정하는 효과
ACR 작업에 미치는 영향
중요합니다
레지스트리가 "RBAC 레지스트리 + ABAC 리포지토리 권한"으로 구성된 경우 새 ACR 태스크와 기존 ACR 작업은 더 이상 리포지토리 내의 이미지 및 아티팩트를 포함하여 원본 레지스트리에 대한 기본 데이터 평면 액세스 권한을 갖지 않습니다. ABAC 사용 원본 레지스트리에 인증하기 위해 새 ACR 작업과 기존 ACR 작업에서 사용할 ID를 명시적으로 연결하고 설정해야 합니다. 그런 다음 연결된 ID에 적절한 ACR 기본 제공 역할을 부여하여 레지스트리 리포지토리에 대한 인증 및 액세스를 사용하도록 설정합니다.
원본 레지스트리 액세스에 대한 새 ACR 태스크에 ID 연결
ABAC를 사용하는 원본 레지스트리의 경우, 태스크가 원본 레지스트리에 인증할 때 사용할 ID를 지정하려면 --source-acr-auth-id
플래그와 함께 az acr task create
를 사용하십시오.
-
--source-acr-auth-id [system]
– 시스템 할당 관리 ID를 연결합니다. -
--source-acr-auth-id $resourceId
– 리소스 ID를 사용하여 사용자 할당 관리 ID를 연결합니다.
ID가 연결되면 ACR 기본 제공 역할(선택적으로 ABAC 조건 포함)을 할당하여 적절한 권한을 부여합니다.
원본 레지스트리 액세스에 대한 ID를 사용하도록 기존 ACR 작업 업데이트
ABAC 사용 원본 레지스트리의 경우 동일한 --source-acr-auth-id
옵션을 사용하여 az acr task update
태스크에서 원본 레지스트리에 인증하는 데 사용하는 ID를 할당하거나 변경합니다. 새 작업과 마찬가지로 적절한 역할 할당을 따르세요.
ACR 작업에서 원본 레지스트리 액세스 제거
ACR 태스크가 ABAC 사용 원본 레지스트리로 인증되지 않도록 명시적으로 방지하고 원본 레지스트리에 대한 태스크의 권한을 차단하려면 설정합니다 --source-acr-auth-id none
. 이렇게 하면 원본 레지스트리 및 해당 내의 콘텐츠에 대한 작업을 수행하는 작업의 기능이 비활성화됩니다.
비고
참고: 플래그는 --auth-mode
ABAC 사용 레지스트리에 더 이상 사용되지 않으며 ACR 작업 액세스를 제어하는 데 더 이상 지원되지 않습니다.
빠른 작업, 빠른 빌드 및 빠른 실행에 미치는 영향
중요합니다
레지스트리가 "RBAC 레지스트리 + ABAC 리포지토리 권한"으로 구성된 경우 빠른 빌드 및 빠른 실행 과 같은 새로운 빠른 작업은 더 이상 리포지토리 내의 이미지 및 아티팩트를 포함하여 원본 레지스트리에 대한 기본 데이터 평면 액세스 권한을 갖지 않습니다. 빠른 작업의 경우 호출자의 ID를 사용하여 원본 레지스트리에 대한 빠른 작업을 인증해야 합니다. 레지스트리 리포지토리에 대한 인증 및 액세스를 사용하도록 설정하려면 호출자의 ID에 적절한 ACR 기본 제공 역할이 있어야 합니다.
원본 레지스트리 액세스에 대한 호출자 ID를 사용하여 빠른 작업 실행
ABAC를 사용하는 원본 레지스트리의 경우, az acr build
또는 az acr run
과 함께 --source-acr-auth-id [caller]
옵션을 사용하여 빠른 태스크가 원본 레지스트리에 인증할 때 사용할 ID로 호출자의 ID를 지정합니다. 빠른 작업을 실행하기 전에 호출자의 ID에 인증 및 원본 레지스트리 및 해당 리포지토리에 대한 액세스를 사용하도록 설정하는 적절한 ACR 기본 제공 역할이 있는지 확인합니다.
원본 레지스트리 액세스 없이 빠른 작업 실행
소스 레지스트리에 액세스하지 않고 빠른 작업을 실행하려면, az acr build
또는 az acr run
옵션과 --source-acr-auth-id none
를 사용하세요. 이렇게 하면 원본 레지스트리 및 그 안의 콘텐츠에 대한 작업을 수행하는 빠른 태스크의 기능이 비활성화됩니다.
다음 단계
- 지원되는 역할 할당 ID 유형, 역할 할당을 수행하는 단계 및 일반적인 시나리오에 권장되는 역할을 포함하여 이러한 기본 제공 역할에 대한 개략적인 개요는 Azure Container Registry RBAC 기본 제공 역할을 참조하세요.
- 선택적 Microsoft Entra ABAC 조건으로 역할 할당을 수행하여 특정 리포지토리로 역할 할당 범위를 지정하려면 Microsoft Entra 기반 리포지토리 권한을 참조하세요.
- 각 역할에서 부여한 권한을 포함하여 모든 ACR 기본 제공 역할에 대한 자세한 참조는 Azure Container Registry 역할 디렉터리 참조를 참조하세요.
- 특정 요구 사항 및 요구 사항을 충족하는 사용자 지정 역할을 만드는 방법에 대한 자세한 내용은 Azure Container Registry 사용자 지정 역할을 참조하세요.