다른 레지스트리에 아티팩트 전송
이 문서에서는 한 Azure Container Registry에서 다른 레지스트리로 이미지 또는 기타 레지스트리 아티팩트의 컬렉션을 전송하는 방법을 보여 줍니다. 원본 및 대상 레지스트리는 동일하거나 다른 구독, Active Directory 테넌트, Azure 클라우드 또는 물리적으로 분리된 클라우드에 있을 수 있습니다.
아티팩트를 전송하려면 Blob Storage를 사용하여 두 레지스트리 간에 아티팩트를 복제하는 전송 파이프라인을 만듭니다.
- 원본 레지스트리의 아티팩트를 원본 스토리지 계정의 Blob으로 내보냅니다.
- Blob이 원본 스토리지 계정에서 대상 스토리지 계정으로 복사됩니다.
- 대상 스토리지 계정의 Blob을 대상 레지스트리에서 아티팩트로 가져옵니다. 대상 스토리지에서 아티팩트 Blob이 업데이트될 때마다 트리거되도록 가져오기 파이프라인을 설정할 수 있습니다.
이 문서에서는 전송 파이프라인을 만들고 실행하기 위한 필수 구성 요소 리소스를 만듭니다. Azure CLI는 스토리지 암호와 같은 연결된 리소스를 프로비저닝하는 데 사용됩니다. Azure CLI 버전 2.2.0 이상이 권장됩니다. CLI를 설치하거나 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
이 기능은 프리미엄 컨테이너 레지스트리 서비스 계층에서 사용할 수 있습니다. 레지스트리 서비스 계층 및 제한에 대한 자세한 내용은 Azure Container Registry 계층을 참조하세요.
Important
이 기능은 현지 미리 보기로 제공됩니다. 추가 사용 약관에 동의하는 조건으로 미리 보기를 사용할 수 있습니다. 이 기능의 몇 가지 측면은 일반 공급(GA) 전에 변경될 수 있습니다.
사용 사례 고려
전송은 물리적으로 연결이 끊어진 클라우드에 있으며 각 클라우드의 스토리지 계정으로 중재되는 두 Azure 컨테이너 레지스트리 간에 콘텐츠를 복사하는 데 이상적입니다. 대신, Docker 허브 및 기타 클라우드 공급업체를 포함하여 연결된 클라우드의 컨테이너 레지스트리에서 이미지를 복사하려는 경우 이미지 가져오기가 권장됩니다.
필수 조건
컨테이너 레지스트리 - 전송할 아티팩트가 있는 기존 원본 레지스트리 및 대상 레지스트리가 필요합니다. ACR 전송은 물리적으로 연결이 끊어진 클라우드에서 이동하기 위한 기능입니다. 테스트를 위해 원본 및 대상 레지스트리는 동일하거나 다른 Azure 구독, Active Directory 테넌트 또는 클라우드에 있을 수 있습니다.
레지스트리를 만들어야 하는 경우 빠른 시작: Azure CLI를 사용하여 컨테이너 레지스트리 만들기를 참조하세요.
스토리지 계정 - 구독 및 사용자가 선택한 위치에 원본 및 대상 스토리지 계정을 만듭니다. 테스트를 위해 원본 및 대상 레지스트리와 동일한 구독 또는 구독을 사용할 수 있습니다. 클라우드 간 시나리오의 경우 일반적으로 각 클라우드에서 별도의 스토리지 계정을 만듭니다.
필요한 경우 Azure CLI 또는 다른 도구를 사용하여 스토리지 계정을 만듭니다.
각 계정에서 아티팩트 전송을 위한 Blob 컨테이너를 만듭니다. 예를 들어, transfer라는 컨테이너를 만듭니다.
Key Vault - Key Vault는 원본 및 대상 스토리지 계정에 액세스하는 데 사용되는 SAS 토큰 암호를 저장하는 데 필요합니다. 원본 및 대상 레지스트리와 동일한 Azure 구독에 원본 및 대상 Key Vault를 만듭니다. 데모용으로 이 문서에 사용된 템플릿과 명령은 원본 및 대상 Key Vault가 각각 원본 및 대상 레지스트리와 동일한 리소스 그룹에 있는 것으로 가정합니다. 이러한 공용 리소스 그룹 사용은 필요하지 않지만 이 문서에서 사용되는 템플릿 및 명령이 단순화됩니다.
필요한 경우 Azure CLI 또는 다른 도구를 사용하여 Key Vault를 만듭니다.
환경 변수 - 이 문서의 예에는 원본 및 대상 환경에 대해 다음과 같은 환경 변수를 설정합니다. 모든 예제는 다음과 같이 Bash 셸용으로 서식이 지정되어 있습니다.
SOURCE_RG="<source-resource-group>" TARGET_RG="<target-resource-group>" SOURCE_KV="<source-key-vault>" TARGET_KV="<target-key-vault>" SOURCE_SA="<source-storage-account>" TARGET_SA="<target-storage-account>"
시나리오 개요
레지스트리 간에 이미지를 전송하기 위해 다음 세 개의 파이프라인 리소스를 만듭니다. 모두 PUT 작업을 사용하여 생성됩니다. 이러한 리소스는 원본 및 대상 레지스트리와 스토리지 계정에 대해 작동합니다.
스토리지 인증은 Key Vault에서 비밀로 관리되는 SAS 토큰을 사용합니다. 파이프라인은 관리되는 ID를 사용하여 자격 증명 모음에서 암호를 읽습니다.
- ExportPipeline - 원본 레지스트리와 스토리지 계정에 대한 높은 수준의 정보를 포함하는 오래 지속되는 리소스입니다. 이 정보에는 원본 스토리지 Blob 컨테이너 URI와 원본 SAS 토큰을 관리하는 Key Vault가 포함됩니다.
- ImportPipeline - 대상 레지스트리와 스토리지 계정에 대한 높은 수준의 정보를 포함하는 오래 지속되는 리소스입니다. 이 정보에는 대상 스토리지 Blob 컨테이너 URI와 대상 SAS 토큰을 관리하는 Key Vault가 포함됩니다. 가져오기 트리거는 기본적으로 사용하도록 설정되므로 아티팩트 Blob이 대상 스토리지 컨테이너에 있는 경우 파이프라인이 자동으로 실행됩니다.
- PipelineRun - ExportPipeline 또는 ImportPipeline 리소스를 호출하는 데 사용되는 리소스입니다.
- PipelineRun 리소스를 만들어 ExportPipeline을 수동으로 실행하고 내보낼 아티팩트를 지정합니다.
- 가져오기 트리거를 사용하도록 설정하는 경우 ImportPipeline이 자동으로 실행됩니다. PipelineRun을 사용하여 수동으로 실행할 수도 있습니다.
- 현재 최대 50개의 아티팩트를 각 PipelineRun으로 전송할 수 있습니다.
알아야 할 사항
- ExportPipeline 및 ImportPipeline은 일반적으로 원본 및 대상 클라우드와 연결된 다른 Active Directory 테넌트에 있습니다. 이 시나리오에는 내보내기 및 가져오기 리소스에 대한 별도의 관리 ID 및 Key Vault가 필요합니다. 이러한 리소스는 테스트 목적으로 동일한 클라우드에 배치하고 ID를 공유하도록 할 수 있습니다.
- 기본적으로 ExportPipeline 및 ImportPipeline 템플릿은 각각 시스템 할당 관리 ID를 사용하여 Key Vault 비밀에 액세스합니다. ExportPipeline 및 ImportPipeline 템플릿은 사용자가 제공한 사용자 할당 ID도 지원합니다.
SAS 키 만들기 및 저장
전송에서는 SAS(공유 액세스 서명) 토큰을 사용하여 원본 및 대상 환경의 스토리지 계정에 액세스합니다. 다음 섹션에 설명된 대로 토큰을 생성하고 저장합니다.
Important
ACR 전송은 Keyvault 비밀에 저장된 수동으로 생성된 SAS 토큰을 사용하지만 프로덕션 워크로드의 경우 대신 Keyvault 관리형 스토리지 SAS 정의 비밀을 사용하는 것이 좋습니다.
내보내기를 위한 SAS 토큰 생성
az storage container generate sas 명령을 실행하여 아티팩트 내보내기에 사용되는 원본 스토리지 계정의 컨테이너에 대한 SAS 토큰을 생성합니다.
권장 토큰 권한: 읽기, 쓰기, 나열, 추가
다음 예제에서는 '?' 문자를 접두사로 사용하여 EXPORT_SAS 환경 변수에 명령 출력이 할당됩니다. 해당 환경에 맞게 --expiry
값을 업데이트합니다.
EXPORT_SAS=?$(az storage container generate-sas \
--name transfer \
--account-name $SOURCE_SA \
--expiry 2021-01-01 \
--permissions alrw \
--https-only \
--output tsv)
내보내기를 위한 SAS 토큰 저장
az keyvault secret set을 사용하여 원본 Azure Key Vault에 SAS 토큰을 저장합니다.
az keyvault secret set \
--name acrexportsas \
--value $EXPORT_SAS \
--vault-name $SOURCE_KV
가져오기를 위한 SAS 토큰 생성
az storage container generate sas 명령을 실행하여 아티팩트 가져오기에 사용되는 대상 스토리지 계정의 컨테이너에 대한 SAS 토큰을 생성합니다.
권장 토큰 권한: 읽기, 삭제, 나열
다음 예제에서는 '?' 문자를 접두사로 사용하여 IMPORT_SAS 환경 변수에 명령 출력이 할당됩니다. 해당 환경에 맞게 --expiry
값을 업데이트합니다.
IMPORT_SAS=?$(az storage container generate-sas \
--name transfer \
--account-name $TARGET_SA \
--expiry 2021-01-01 \
--permissions dlr \
--https-only \
--output tsv)
가져오기를 위한 SAS 토큰 저장
az keyvault secret set을 사용하여 대상 Azure Key Vault에 SAS 토큰을 저장합니다.
az keyvault secret set \
--name acrimportsas \
--value $IMPORT_SAS \
--vault-name $TARGET_KV
다음 단계
아래 자습서 중 하나에 따라 ACR 전송 리소스를 만듭니다. 대부분의 자동화되지 않은 사용 사례의 경우 Az CLI 확장을 사용하는 것이 좋습니다.