다음을 통해 공유


리포지토리 권한에 대한 MICROSOFT Entra ABAC(특성 기반 액세스 제어)(미리 보기)

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, AcrPushAcrDelete 역할은 ABAC 사용 레지스트리에서 인정되지 않습니다. 대신 ABAC 사용 레지스트리에서 , Container Registry Repository ReaderContainer 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 리포지토리 권한" 옵션을 선택합니다.

ABAC를 사용하도록 설정된 새 컨테이너 레지스트리를 만드는 스크린샷

레지스트리 만들기 양식의 나머지 부분을 계속 채운 다음 "만들기"를 클릭하여 레지스트리를 만듭니다. 레지스트리를 만드는 방법에 대한 자세한 내용은 Azure Portal을 사용하여 Azure Container Registry 만들기를 참조하세요.

ABAC를 사용하도록 기존 레지스트리 업데이트

레지스트리의 기존 역할 할당 권한 모드를 보려면 레지스트리의 "속성" 블레이드로 이동합니다. 현재 역할 할당 권한 모드는 "역할 할당 권한 모드" 필드에 표시됩니다.

기존 레지스트리의 "역할 할당 권한 모드"를 업데이트하려면 "RBAC 레지스트리 + ABAC 리포지토리 권한"을 선택하고 "저장"을 클릭하여 레지스트리를 업데이트합니다.

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 조건에 대한 식을 추가하는 스크린샷

ABAC 조건의 범위를 특정 리포지토리로 지정하도록 식에 대해 다음 옵션을 구성합니다.

  • 특성 원본: Request
  • 특성: Repository name
  • 연산자: StringEqualsIgnoreCase
  • 값: <repository-name> - 리포지토리의 전체 이름입니다.
    • 예를 들어 전체 리포지토리 이름이면 nginx.를 입력합니다 nginx.
    • 전체 리포지토리 이름이 backend/nginx면 .를 입력합니다 backend/nginx.

ABAC 조건의 범위를 특정 리포지토리로 지정하도록 식을 구성하는 스크린샷

"저장"을 클릭하여 ABAC 조건을 저장합니다.

역할 할당 ABAC 조건을 검토합니다. 검토 페이지에는 AZURE CLI를 사용하여 동일한 ABAC 조건으로 동일한 역할 할당을 수행하는 데 사용할 수 있는 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/nginxbackend/redis) 를 입력합니다 backend/.
    • 접두 frontend/js/사를 사용하여 모든 리포지토리에 권한을 부여하려면 (예: frontend/js/reactfrontend/js/vue) 를 입력합니다 frontend/js/.

중요합니다

/ 필드에서 ABAC 조건의 식을 표현하기 위해 후행 슬래시 Value 가 필요합니다. 후행 슬래시 /를 포함하지 않으면 접두사와 일치하지 않는 다른 리포지토리에 의도치 않게 권한을 부여할 수 있습니다. 예를 들어, backend를 후행 슬래시 / 없이 입력하는 경우, 역할 할당은 backend 접두사를 가진 모든 리포지토리에 권한을 부여합니다. 예를 들면, backend/nginx, backend/redis, backend-infra/k8s, backend-backup/store, backend, 및 backendsvc/containers입니다.

ABAC 조건의 범위를 리포지토리 접두사로 지정하도록 식을 구성하는 스크린샷

"저장"을 클릭하여 ABAC 조건을 저장합니다.

역할 할당 ABAC 조건을 검토합니다. 검토 페이지에는 AZURE CLI를 사용하여 동일한 ABAC 조건으로 동일한 역할 할당을 수행하는 데 사용할 수 있는 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/nginxbackend/redis) 를 입력합니다 backend/.
    • 접두 frontend/js/사를 사용하여 모든 리포지토리에 권한을 부여하려면 (예: frontend/js/reactfrontend/js/vue) 를 입력합니다 frontend/js/.

"식 추가"를 클릭합니다. 부울 연산자가 "Or"로 설정되어 있는지 확인합니다. 필요에 따라 "그룹"을 선택하여 식을 그룹화하고 평가 순서를 제어할 수 있습니다. 또한 시각적 편집기는 "And", "Or" 계층적 그룹화 및 부정을 비롯한 여러 부울 연산자를 지원합니다.

두 번째 식의 경우 다음 옵션을 구성합니다.

  • 특성 원본: Request
  • 특성: Repository name
  • 연산자: StringStartsWithIgnoreCase
  • 값: <repository-prefix> - 후행 슬래시 /를 포함하여 리포지토리의 접두사입니다.
    • 예를 들어 접두 backend/사를 사용하여 모든 리포지토리에 권한을 부여하려면 (예: backend/nginxbackend/redis) 를 입력합니다 backend/.
    • 접두 frontend/js/사를 사용하여 모든 리포지토리에 권한을 부여하려면 (예: frontend/js/reactfrontend/js/vue) 를 입력합니다 frontend/js/.

중요합니다

/ 필드에서 ABAC 조건의 식을 표현하기 위해 후행 슬래시 Value 가 필요합니다. 후행 슬래시 /를 포함하지 않으면 접두사와 일치하지 않는 다른 리포지토리에 의도치 않게 권한을 부여할 수 있습니다. 예를 들어, backend를 후행 슬래시 / 없이 입력하는 경우, 역할 할당은 backend 접두사를 가진 모든 리포지토리에 권한을 부여합니다. 예를 들면, backend/nginx, backend/redis, backend-infra/k8s, backend-backup/store, backend, 및 backendsvc/containers입니다.

ABAC 조건의 범위를 여러 리포지토리 접두사로 지정하도록 식을 구성하는 스크린샷

"저장"을 클릭하여 ABAC 조건을 저장합니다.

역할 할당 ABAC 조건을 검토합니다. 검토 페이지에는 AZURE CLI를 사용하여 동일한 ABAC 조건으로 동일한 역할 할당을 수행하는 데 사용할 수 있는 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를 사용하세요. 이렇게 하면 원본 레지스트리 및 그 안의 콘텐츠에 대한 작업을 수행하는 빠른 태스크의 기능이 비활성화됩니다.

다음 단계