다음을 통해 공유


AzCopy를 사용하여 네트워크 제한이 있는 Azure Storage 계정 간에 Blob 복사

이 문서에서는 AzCopy 명령줄 유틸리티를 사용하여 스토리지 계정 간에 Blob을 복사하는 방법을 소개합니다. 또한 스토리지 계정에 대해 네트워크 제한이 구성된 경우 복사 작업을 구현하는 방법도 설명합니다.

배경

두 스토리지 계정 간에 Blob 파일을 복사하는 것은 많은 Azure 사용자에게 일반적인 요구 사항입니다. Azure Storage는 AzCopy 명령줄 유틸리티를 사용하여 구현할 수 있는 한 스토리지 계정에서 다른 스토리지 계정으로 Blob을 직접 복사하도록 지원합니다. 사용자는 로컬 디스크 또는 버퍼에 파일을 다운로드한 다음 다시 업로드할 필요가 없습니다.

AzCopy를 사용하여 두 스토리지 계정 간에 Blob을 복사하는 것은 로컬 컴퓨터의 네트워크 대역폭에 의존하지 않습니다. 이 메서드는 스토리지 계정 및 Azure Virtual Network 성능을 활용하여 파일을 다운로드하고 업로드하는 것보다 더 나은 처리량을 달성할 수 있습니다. 두 스토리지 계정이 동일한 지역에 있는 경우 대역폭 요금이 부과되지 않습니다.

스토리지 계정 간에 Blob을 복사하기 위한 AzCopy 명령

  • Microsoft Entra ID 사용하여 권한 부여 자격 증명을 제공하는 경우 다음 명령을 사용합니다.

    azcopy copy 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path>'
    

    이 시나리오에서는 Microsoft Entra ID에 원본 및 대상 계정 모두에 대한 적절한 역할 할당이 있는지 확인해야 합니다.

  • SAS(공유 액세스 서명) 토큰을 사용하는 경우 다음 명령을 사용합니다.

    azcopy copy 'https://<source-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path><SAS-token>' 'https://<destination-storage-account-name>.blob.core.windows.net/<container-name>/<blob-path><SAS-token>'
    

    이 시나리오에서는 AzCopy 명령에 사용되는 원본 및 대상 URL 모두에 SAS 토큰을 추가해야 합니다.

자세한 내용은 AzCopy v10을 사용하여 Azure Storage 계정 간에 Blob 복사를 참조하세요.

액세스 제한이 있는 스토리지 계정 간에 Blob 복사

스토리지 방화벽을 통해 원본 및 대상 스토리지 계정에 대한 액세스를 제한해야 하는 경우 AzCopy를 사용하여 스토리지 계정 간에 Blob을 복사하기 위한 추가 구성이 필요할 수 있습니다. 이는 두 스토리지 계정 간의 복사 요청이 개인 IP 주소를 사용하고 IP 주소가 동적이기 때문입니다.

지원되는 두 가지 시나리오는 다음과 같습니다.

시나리오 1: 클라이언트는 퍼블릭 엔드포인트를 사용하여 스토리지 계정에 액세스합니다.

이 시나리오에서는 클라이언트의 공용 IP 주소 또는 VNet(가상 네트워크)을 원본 및 대상 스토리지 계정의 방화벽 허용 목록에 추가해야 합니다.

다음 이미지는 이 시나리오에서 스토리지 계정 간에 Blob을 복사하는 프로세스를 보여 줍니다.

시나리오 1의 스토리지 계정 간에 Blob을 처리하는 프로세스를 보여 주는 다이어그램

이 시나리오에서는 방화벽 허용 목록이 필요하지 않습니다.

다음 이미지는 이 시나리오에서 스토리지 계정 간에 Blob을 복사하는 프로세스를 보여 줍니다.

시나리오 2의 스토리지 계정 간에 Blob을 처리하는 프로세스를 보여 주는 다이어그램

두 시나리오에 대한 이 메커니즘의 전체 프로세스는 다음과 같습니다.

  1. 클라이언트는 PutBlockfromURL 요청을 대상 스토리지로 보냅니다.
  2. 대상 스토리지는 요청을 수신하고 지정된 원본 URL에서 블록을 가져오려고 시도합니다. 그러나 원본 방화벽에서 대상 스토리지를 허용하지 않았기 때문에 "403 사용할 수 없음" 오류가 발생합니다.
  3. 대상 스토리지가 "403 사용할 수 없음" 오류를 수신하면 클라이언트를 대신하여 다른 GetBlob 요청을 보냅니다. 클라이언트가 원본 스토리지에 액세스할 수 있는 경우 대상은 원본에서 블록을 가져와서 성공 응답 코드를 클라이언트에 반환할 수 있습니다.
  4. 클라이언트는 PutBlockList를 대상 스토리지로 보내 블록을 커밋하고 요청에서 성공 응답 코드를 받은 후 프로세스를 완료합니다.

프라이빗 엔드포인트를 사용하여 허브-스포크 아키텍처의 스토리지 계정 간에 Blob 복사

AzCopy를 사용하여 허브 VNet의 VM에서 다른 스포크 VNet의 프라이빗 엔드포인트에 연결된 스토리지 계정 간에 Blob을 복사할 때 403 오류가 발생합니다. AzCopy 로그 또는 Azure Storage 로그에서 "403 이 요청은 이 작업을 수행할 권한이 없습니다. CannotVerfiyCopySource" 오류를 찾을 수 있습니다. 다음 아키텍처 다이어그램에서는 오류가 발생하는 시나리오를 보여 줍니다.

프라이빗 엔드포인트를 사용하여 허브 & 스포크 아키텍처의 스토리지 계정 간에 Blob을 복사하는 403 오류를 보여 주는 다이어그램

해결 방법 1: 원본 VNet에서 대상 스토리지 계정에 대한 프라이빗 엔드포인트 만들기

가능한 해결 방법은 원본 VNet에서 대상 스토리지 계정에 대한 프라이빗 엔드포인트를 만드는 것입니다. 이 구성을 사용하면 VM이 AzCopy를 사용하여 스토리지 계정 간에 Blob을 성공적으로 복사할 수 있습니다. 다음 아키텍처 다이어그램은 해결 방법 1의 스토리지 계정 간에 Blob을 복사하는 프로세스를 보여 줍니다.

해결 방법 1의 스토리지 계정 간에 Blob을 복사하는 프로세스를 보여 주는 다이어그램

해결 방법 2: 원본 스토리지 계정과 동일한 VNet에 VM을 배치하고 대상 VNet과 VNet을 피어링합니다.

또 다른 옵션은 원본 스토리지 계정과 동일한 VNet 내에 VM을 배치하는 것입니다. 그런 다음, 이 VNet과 대상 VNet 간에 피어링을 설정합니다. 다음 아키텍처 다이어그램은 해결 방법 2의 스토리지 계정 간에 Blob을 복사하는 프로세스를 보여 줍니다.

해결 방법 2의 스토리지 계정 간에 Blob을 복사하는 프로세스를 보여 주는 다이어그램

해결 방법 3: 임시 준비 계정을 사용하여 데이터 복사

앞에서 언급한 해결 방법을 구현할 수 없거나 스토리지 계정 또는 VNet의 기존 네트워크 구성 변경이 제한되는 경우 임시 준비 계정을 사용하여 데이터를 복사할 수 있습니다.

  1. 원본 스토리지 계정 및 대상 스토리지 계정과 동일한 지역에 임시 스토리지 계정을 만듭니다.
  2. AzCopy를 사용하여 원본 스토리지 계정의 데이터를 임시 스토리지 계정으로 복사합니다.
  3. 임시 스토리지 계정의 데이터를 대상 스토리지 계정으로 복사합니다. 데이터 전송을 수행하기 전에 임시 스토리지 계정에 대상 스토리지 계정과 동일한 VNet에 프라이빗 엔드포인트가 있는지 확인합니다.

해결 방법 4: VM을 사용하고 VM에 데이터를 다운로드한 다음, 대상 스토리지 계정에 데이터를 업로드합니다.

다른 메서드를 사용할 수 없는 경우에만 이 해결 방법을 사용합니다. VM을 사용하여 원본 스토리지 계정에서 데이터를 다운로드한 다음, 대상 스토리지 계정에 업로드합니다. 이 작업은 AzCopy를 사용하여 수행할 수 있습니다. VM의 크기와 디스크 용량이 데이터 전송 프로세스에 적합한지 확인합니다.

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.