Azure Container Registry로 인증

Azure Container Registry로 인증하는 방법은 여러 가지가 있으며 각 방법을 하나 이상의 레지스트리 사용 시나리오에 적용할 수 있습니다.

권장되는 방법은 다음과 같습니다.

AKS(Azure Kubernetes Service) 또는 다른 Kubernetes 클러스터에서 컨테이너 레지스트리를 사용하는 경우 Kubernetes에서 Azure Container Registry로 인증하는 시나리오를 참조 하세요.

인증 옵션

다음 표에는 사용 가능한 인증 방법과 일반적인 시나리오가 나와 있습니다. 자세한 내용은 연결된 콘텐츠를 참조하세요.

메서드 인증 방법 시나리오 Azure RBAC(Azure 역할 기반 액세스 제어) 제한
개별 AD ID  az acr login(Azure CLI)

Connect-AzContainerRegistry Azure PowerShell에서
개발자, 테스터의 대화형 푸시/끌어오기 AD 토큰은 3시간마다 갱신해야 합니다.
AD 서비스 주체  docker login

az acr login(Azure CLI)

Connect-AzContainerRegistry Azure PowerShell에서

API 또는 도구의 레지스트리 로그인 설정

Kubernetes 끌어오기 비밀   
CI/CD 파이프라인에서 무인 푸시

Azure 또는 외부 서비스로 무인 끌어오기
SP 암호 기본 만료는 1년입니다.
Azure 리소스에 대한 관리 ID  docker login

az acr login(Azure CLI)

Connect-AzContainerRegistry Azure PowerShell에서
Azure CI/CD 파이프라인에서 무인 푸시

Azure 서비스로 무인 끌어오기

Azure 리소스에 대한 관리 ID를 지원하는 선택한 Azure 서비스에서만 사용
AKS 클러스터 관리 ID  AKS 클러스터를 만들거나 업데이트할 때 레지스트리 연결 동일하거나 다른 구독에서 AKS 클러스터로 무인 끌어오기 아니요, 끌어오기 액세스만 AKS 클러스터에서만 사용 가능

테넌트 간 인증에 사용할 수 없습니다.
AKS 클러스터 서비스 주체  AKS 클러스터를 만들거나 업데이트할 때 사용 다른 AD 테넌트의 레지스트리에서 AKS 클러스터로 무인 끌어오기 아니요, 끌어오기 액세스만 AKS 클러스터에서만 사용 가능
관리 사용자  docker login  개별 개발자 또는 테스터의 대화형 푸시/끌어오기

레지스트리에서 Azure 앱 Service 또는 Azure Container Instances로 이미지의 포털 배포
아니요, 항상 끌어오고 푸시 액세스 여러 사용자에게 권장되지 않는 레지스트리당 단일 계정
리포지토리 범위 액세스 토큰  docker login

az acr login(Azure CLI)

Connect-AzContainerRegistry Azure PowerShell에서

Kubernetes 끌어오기 비밀 
개별 개발자 또는 테스터가 리포지토리로 대화형 푸시/끌어오기

개별 시스템 또는 외부 디바이스를 통해 리포지토리에서 무인 끌어오기
현재 AD ID와 통합되지 않음

Microsoft Entra ID를 사용한 개별 로그인

이미지를 끌어와 개발 워크스테이션에서 만든 레지스트리로 이미지를 푸시하는 등 레지스트리를 직접 사용하는 경우 개별 Azure ID를 사용하여 인증합니다. az login을 사용하여 Azure CLI에 로그인한 다음 az acr login 명령을 실행합니다.

az login
az acr login --name <acrName>

로그인 az acr login할 때 CLI는 실행할 az login 때 만든 토큰을 사용하여 레지스트리로 세션을 원활하게 인증합니다. 인증 흐름을 완료하려면 사용자 환경에서 Docker CLI 및 Docker 디먼을 설치하고 실행해야 합니다. az acr login 는 Docker 클라이언트를 사용하여 파일에서 Microsoft Entra 토큰을 docker.config 설정합니다. 이러한 방식으로 로그인하면 자격 증명이 캐시되고 세션의 후속 docker 명령에는 사용자 이름 또는 암호가 필요하지 않습니다.

또한 OCI 아티팩트와 같은 Docker 이미지 외의 아티팩트를 레지스트리로 푸시 또는 풀하려면 az acr login을 사용하여 개별 ID를 인증합니다.

레지스트리 액세스의 경우 az acr login에 사용되는 토큰은 3시간 동안 유효하므로 항상 docker 명령을 실행하기 전에 레지스트리에 로그인하는 것이 좋습니다. 토큰이 만료되면 명령을 다시 사용하여 토큰을 az acr login 새로 고쳐 다시 인증할 수 있습니다.

Azure ID와 함께 사용하면 az acr login Azure RBAC(Azure 역할 기반 액세스 제어)가 제공됩니다. 일부 시나리오에서는 Microsoft Entra ID에서 사용자 고유의 개별 ID를 사용하여 레지스트리에 로그인하거나 특정 Azure 역할 및 권한으로 다른 Azure 사용자를 구성할 수 있습니다. 교차 서비스 시나리오의 경우나 개별 액세스를 관리하지 않으려는 작업 그룹 또는 개발 워크플로의 요구 사항을 처리해야 하는 시나리오에서는 Azure 리소스의 관리 ID로 로그인할 수도 있습니다.

--expose-token을 사용하여 az acr login

경우에 따라 Docker 디먼이 사용자 환경에서 실행되고 있지 않을 때 인증 az acr login 해야 합니다. 예를 들어 Docker CLI를 제공하지만 Docker 디먼을 실행하지 않는 Azure Cloud Shell의 스크립트에서 실행 az acr login 해야 할 수 있습니다.

이 시나리오에서는 매개 변수를 사용하여 먼저 실행 az acr login 합니다 --expose-token . 이 옵션은 Docker CLI를 통해 로그인하는 대신 액세스 토큰을 노출합니다.

az acr login --name <acrName> --expose-token

출력에는 액세스 토큰이 표시되며 여기서는 약식으로 표시됩니다.

{
  "accessToken": "eyJhbGciOiJSUzI1NiIs[...]24V7wA",
  "loginServer": "myregistry.azurecr.io"
}

레지스트리 인증의 경우 토큰 자격 증명을 안전한 위치에 저장하고 권장 사례를 따라 Docker 로그인 자격 증명을 관리하는 것이 좋습니다. 예를 들어 다음과 같이 환경 변수에 토큰 값을 저장합니다.

TOKEN=$(az acr login --name <acrName> --expose-token --output tsv --query accessToken)

그런 다음 00000000-0000-0000-0000-000000000000을 사용자 이름으로 전달하고 액세스 토큰을 암호로 사용하여 docker login을 실행합니다.

docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN

마찬가지로 helm registry login 명령과 함께 az acr login에 의해 반환된 토큰을 사용하여 레지스트리로 인증할 수 있습니다.

echo $TOKEN | helm registry login myregistry.azurecr.io \
            --username 00000000-0000-0000-0000-000000000000 \
            --password-stdin

서비스 사용자

레지스트리에 서비스 주체를 할당하면 애플리케이션 또는 서비스에서 헤드리스 인증에 이를 사용할 수 있습니다. 서비스 주체는 Azure RBAC(Azure 역할 기반 액세스 제어)를 레지스트리에 허용하고 여러 서비스 주체를 레지스트리에 할당할 수 있습니다. 여러 서비스 주체를 사용하면 서로 다른 애플리케이션에 대한 다양한 액세스를 정의할 수 있습니다.

ACR 인증 토큰은 ACR에 로그인할 때 만들어지고 후속 작업 시 새로 고쳐집니다. 해당 토큰의 라이브 시간은 3시간입니다.

컨테이너 레지스트리에 사용할 수 있는 역할은 다음과 같습니다.

  • AcrPull: 끌어오기

  • AcrPush: 끌어오기 및 밀어넣기

  • 소유자: 끌어오기, 푸시 및 다른 사용자에게 역할 할당

역할의 전체 목록은 Azure Container Registry 역할 및 권한을 참조 하세요.

CLI 스크립트가 Azure 컨테이너 레지스트리를 사용하여 인증하기 위한 서비스 주체를 만드는 방법 및 추가 지침은 서비스 주체를 사용한 Azure Container Registry 인증을 참조 하세요.

관리자 계정

각 컨테이너 레지스트리에는 관리 사용자 계정이 포함되어 있으며 기본적으로 사용하지 않도록 설정되어 있습니다. 관리 사용자를 사용하도록 설정하고 Azure Portal에서 또는 Azure CLI, Azure PowerShell 또는 기타 Azure 도구를 사용하여 해당 자격 증명을 관리할 수 있습니다. 관리자 계정에는 레지스트리에 대한 모든 권한이 있습니다.

컨테이너 레지스트리에서 특정 Azure 서비스로 이미지를 배포하는 일부 시나리오에서는 현재 관리자 계정이 필요합니다. 예를 들어 Azure Portal을 사용하여 레지스트리의 컨테이너 이미지를 Azure Container Instances 또는 Azure Web Apps for Containers에 직접 배포하는 경우 관리자 계정이 필요합니다.

Important

관리자 계정은 주로 테스트 용도로 단일 사용자가 레지스트리에 액세스하도록 설계되었습니다. 관리자 계정 자격 증명을 여러 사용자 간에 공유하지 않는 것이 좋습니다. 관리자 계정으로 인증하는 모든 사용자는 레지스트리에 대한 푸시 및 풀 액세스 권한이 있는 단일 사용자로 나타납니다. 이 계정을 변경하거나 사용하지 않도록 설정하면 자격 증명을 사용하는 모든 사용자에 대한 레지스트리 액세스가 비활성화됩니다. 헤드리스 시나리오의 경우 사용자 및 서비스 주체에 개별 ID를 사용하는 것이 좋습니다.

관리자 계정은 두 개의 암호가 제공되며, 둘 다 다시 생성할 수 있습니다. 관리자 계정에 대해 만든 새 암호는 즉시 사용할 수 있습니다. 관리자 계정의 암호를 다시 생성하면 복제하고 사용할 수 있는 데 60초가 걸립니다. 두 개의 암호를 사용하면 다른 암호를 다시 생성하는 동안에 하나의 암호를 사용하여 레지스트리에 대한 연결을 유지할 수 있습니다. 관리자 계정을 사용하는 경우 레지스트리에 대한 기본 인증을 묻는 메시지가 표시되면 사용자 이름과 암호를 docker login 명령에 전달할 수 있습니다. 예시:

docker login myregistry.azurecr.io

로그인 자격 증명을 관리하는 권장 사례는 docker 로그인 명령 참조를 참조하세요.

기존 레지스트리에 대해 관리자 사용자를 사용하도록 설정하려면 Azure CLI에서 az acr update 명령의 매개 변수를 사용할 --admin-enabled 수 있습니다.

az acr update -n <acrName> --admin-enabled true

Azure Portal에서 레지스트리를 탐색하고 설정에서 액세스 키를 선택한 다음, 관리 사용자 아래에서 사용하도록 설정하여 관리 사용자를 사용하도록 설정할 수 있습니다.

Enable admin user UI in the Azure portal

다음 단계