블록 Blob에 대한 개체 복제

개체 복제는 원본 스토리지 계정과 대상 계정 간에 블록 Blob을 비동기적으로 복사합니다. 개체 복제에서 지원하는 몇 가지 시나리오는 다음과 같습니다.

  • 대기 시간 최소화. 개체 복제를 사용하면 클라이언트가 물리적으로 더 근접한 지역의 데이터를 사용할 수 있으므로 읽기 요청 대기 시간을 줄일 수 있습니다.
  • 컴퓨팅 워크로드 효율성 제고. 개체 복제를 사용하는 경우 컴퓨팅 워크로드는 서로 다른 지역에서 동일한 블록 Blob 집합을 처리할 수 있습니다.
  • 데이터 배포 최적화. 단일 위치의 데이터를 처리하거나 분석한 후 추가 지역에만 결과를 복제할 수 있습니다.
  • 비용 최적화. 데이터가 복제된 후에는 수명 주기 관리 정책을 사용해 해당 데이터를 보관 계층으로 이동하여 비용을 줄일 수 있습니다.

다음 다이어그램에서는 개체 복제에서 한 지역의 원본 스토리지 계정으로부터 블록 Blob을 두 개의 다른 지역에 있는 대상 계정으로 복제하는 방법을 보여 줍니다.

개체 복제 작동 방식을 보여 주는 다이어그램

개체 복제를 구성하는 방법에 대한 자세한 내용은 개체 복제 구성을 참조하세요.

개체 복제에 대한 필수 구성 요소 및 주의 사항

개체를 복제하려면 다음 Azure Storage 기능을 사용하도록 설정해야 합니다.

변경 피드 및 Blob 버전 관리를 사용하도록 설정하면 추가 비용이 발생할 수 있습니다. 자세한 내용은 Azure Storage 가격 책정 페이지를 참조하세요.

범용 v2 스토리지 계정 및 프리미엄 블록 Blob 계정에 대해 개체 복제가 지원됩니다. 원본 및 대상 계정은 모두 범용 v2 또는 프리미엄 블록 Blob 계정이어야 합니다. 개체 복제는 블록 blob만 지원합니다. 추가 Blob 및 페이지 Blob은 지원되지 않습니다.

Microsoft 관리형 키 또는 고객 관리형 키로 암호화된 계정에 대해 개체 복제가 지원됩니다. 고객 관리형 키에 관한 자세한 내용은 Azure Storage 암호화용 고객 관리형 키를 참조하세요.

고객이 제공한 키로 암호화된 원본 계정의 Blob에는 개체 복제가 지원되지 않습니다. 고객이 제공한 키에 대한 자세한 내용은 Blob 스토리지 요청 시 암호화 키 제공을 참조하세요.

고객 관리 장애 조치(failover)는 개체 복제 정책의 원본 또는 대상 계정에 대해 지원되지 않습니다.

Data Lake Storage Gen2 API를 사용하여 업로드되는 Blob에는 개체 복제가 지원되지 않습니다.

개체 복제 작동 방법

개체 복제는 구성하는 규칙에 따라 컨테이너의 블록 Blob을 비동기적으로 복사합니다. Blob의 콘텐츠, Blob과 연결된 모든 버전, Blob의 메타데이터 및 속성은 모두 원본 컨테이너에서 대상 컨테이너로 복사됩니다.

Important

블록 Blob 데이터는 비동기적으로 복제되므로 원본 계정과 대상 계정이 즉시 동기화되지 않습니다. 현재 데이터를 대상 계정에 복제하는 데 걸리는 시간에 대한 SLA가 없습니다. 원본 Blob에서 복제 상태를 확인하여 복제가 완료되었는지 여부를 확인할 수 있습니다. 자세한 내용은 Blob의 복제 상태 확인을 참조하세요.

Blob 버전 관리

개체 복제를 사용하려면 원본 계정과 대상 계정 모두에서 Blob 버전 지정을 사용하도록 설정해야 합니다. 원본 계정에서 복제된 Blob이 수정되면 수정하기 전에 Blob의 이전 상태를 반영하는 새 버전의 Blob이 원본 계정에 만들어집니다. 원본 계정의 현재 버전은 최신 업데이트를 반영합니다. 현재 버전과 이전 버전이 모두 대상 계정에 복제됩니다. 쓰기 작업이 Blob 버전에 미치는 영향에 대한 자세한 내용은 쓰기 작업 버전 관리를 참조하세요.

스토리지 계정에 개체 복제 정책이 적용된 경우 해당 계정에 대한 Blob 버전 관리를 사용하지 않도록 설정할 수 없습니다. Blob 버전 관리를 사용하지 않도록 설정하기 전에 계정에서 개체 복제 정책을 삭제해야 합니다.

원본 계정에서 Blob 삭제

원본 계정의 Blob이 삭제되면 Blob의 현재 버전이 이전 버전이 되고 더 이상 현재 버전이 존재하지 않습니다. Blob의 모든 기존 이전 버전은 유지됩니다. 이 상태는 대상 계정에 복제됩니다. 삭제 작업이 Blob 버전에 미치는 영향에 대한 자세한 내용은 삭제 작업 버전 관리를 참조하세요.

스냅샷

개체 복제는 Blob 스냅샷을 지원하지 않습니다. 원본 계정의 Blob에 대한 스냅샷은 대상 계정에 복제되지 않습니다.

Blob 인덱스 태그

개체 복제는 원본 Blob의 인덱스 태그를 대상 Blob에 복사하지 않습니다.

Blob 계층화

원본 및 대상 계정이 핫 또는 쿨 계층에 있는 경우 개체 복제가 지원됩니다. 원본 및 대상 계정이 모두 다른 계층에 있을 수 있습니다. 그러나 원본 또는 대상 계정의 Blob이 보관 계층으로 이동된 경우에는 개체 복제가 실패합니다. Blob 계층에 대한 자세한 내용은 Blob 데이터에 대한 액세스 계층을 참조하세요.

변경이 불가능한 Blob

Azure Blob Storage에 대한 불변성 정책에는 시간 기반 보존 정책 및 법적 보존이 포함됩니다. 대상 계정에 불변성 정책이 적용되면 개체 복제가 영향을 받을 수 있습니다. 불변성 정책에 대한 자세한 내용은 비즈니스에 중요한 BLOB 데이터를 변경이 불가능한 스토리지에 저장을 참조하세요.

컨테이너 수준의 불변성 정책이 대상 계정의 컨테이너에 적용되고 원본 컨테이너의 개체가 업데이트되거나 삭제되는 경우, 원본 컨테이너에 대한 작업은 성공할 수 있지만 대상 컨테이너에 대한 해당 작업의 복제는 실패합니다. 컨테이너로 범위가 지정된 불변성 정책으로 금지되는 작업에 대한 자세한 내용은 컨테이너 수준 범위의 시나리오를 참조하세요.

버전 수준 불변성 정책이 대상 계정의 Blob 버전에 적용되고 원본 컨테이너의 Blob 버전에 대한 삭제 또는 업데이트 작업이 수행되는 경우 원본 개체에 대한 작업은 성공할 수 있지만 대상 개체에 대한 해당 작업의 복제는 실패합니다. 컨테이너로 범위가 지정된 불변성 정책으로 금지되는 작업에 대한 자세한 내용은 버전 수준 범위의 시나리오를 참조하세요.

개체 복제 정책 및 규칙

개체 복제를 구성하는 경우 원본 스토리지 계정 및 대상 계정을 지정하는 복제 정책을 만듭니다. 복제 정책에는 원본 컨테이너와 대상 컨테이너를 지정하고 원본 컨테이너에서 복제할 블록 Blob을 나타내는 하나 이상의 규칙이 포함되어 있습니다.

개체 복제를 구성하고 나면 Azure Storage에서 원본 계정에 대한 변경 피드를 정기적으로 확인하고 대상 계정에 대한 쓰기 또는 삭제 작업을 비동기적으로 복제합니다. 복제 대기 시간은 복제 중인 블록 Blob의 크기에 따라 달라집니다.

복제 정책

개체 복제를 구성하는 경우 Azure Storage 리소스 공급자를 통해 대상 계정에 대한 복제 정책을 만듭니다. 복제 정책이 만들어지면 Azure Storage에서 정책 ID를 해당 복제 정책에 할당합니다. 그런 다음, 정책 ID를 사용하여 해당 복제 정책을 원본 계정에 연결해야 합니다. 복제가 수행되려면 원본 및 대상 계정의 정책 ID가 동일해야 합니다.

원본 계정은 각 대상 계정에 대해 하나의 정책을 사용하여 세 개 이상의 대상 계정으로 복제할 수 있습니다. 마찬가지로, 계정이 세 개 이상의 복제 정책에 대한 대상 계정으로 사용될 수 있습니다.

원본 및 대상 계정이 동일한 지역 또는 다른 지역에 있을 수 있습니다. 또한 동일한 구독 또는 다른 구독에 있을 수도 있습니다. 필요에 따라 원본 및 대상 계정이 다른 Microsoft Entra 테넌트에 상주할 수 있습니다. 각 원본 계정/대상 계정 쌍에 대해 하나의 복제 정책만 만들 수 있습니다.

복제 규칙

복제 규칙은 Azure Storage 원본 컨테이너에서 대상 컨테이너로 Blob을 복제하는 방법을 지정합니다. 각 복제 정책에 대해 최대 1000개의 복제 규칙을 지정할 수 있습니다. 각 복제 규칙은 단일 원본 및 대상 컨테이너를 정의하며, 각 원본 및 대상 컨테이너는 하나의 규칙에만 사용할 수 있습니다. 즉, 최대 1000개의 원본 컨테이너와 1000개의 대상 컨테이너가 단일 복제 정책에 참여할 수 있습니다.

복제 규칙을 만드는 경우 기본적으로 이후에 원본 컨테이너에 추가되는 새 블록 Blob만 복사됩니다. 신규 및 기존 블록 Blob을 모두 복사하도록 지정하거나 지정된 시간 이후로 생성된 블록 Blob을 복사하도록 사용자 지정 복사 범위를 정의할 수도 있습니다.

하나 이상의 필터를 복제 규칙의 일부로 지정하여 접두사를 기준으로 블록 Blob을 필터링할 수도 있습니다. 접두사를 지정하면 원본 컨테이너에서 해당 접두사와 일치하는 Blob만 대상 컨테이너에 복사됩니다.

원본 및 대상 컨테이너가 모두 있어야 규칙에서 지정할 수 있습니다. 복제 정책을 만든 후에는 대상 컨테이너에 대한 쓰기 작업이 허용되지 않습니다. 대상 컨테이너에 대한 쓰기 시도가 실패하고 오류 코드 409(충돌)가 발생합니다. 복제 규칙이 구성된 대상 컨테이너에 쓰려면 해당 컨테이너에 대해 구성된 규칙을 삭제하거나 복제 정책을 제거해야 합니다. 복제 정책이 활성화되어 있으면 대상 컨테이너에 대한 읽기 및 삭제 작업이 허용됩니다.

대상 컨테이너의 Blob에 대해 Blob 계층 설정 작업을 호출하여 보관 계층으로 이동할 수 있습니다. 보관 계층에 대한 자세한 내용은 BLOB 데이터에 대한 액세스 계층을 참조하세요.

참고 항목

원본 계정에서 Blob의 액세스 계층을 변경해도 대상 계정에서 해당 Blob의 액세스 계층은 변경되지 않습니다.

정책 정의 파일

개체 복제 정책은 JSON 파일로 정의됩니다. 기존 개체 복제 정책에서 정책 정의 파일을 가져올 수 있습니다. 또한 정책 정의 파일을 업로드하여 개체 복제 정책을 만들 수 있습니다.

샘플 정책 정의 파일

다음 예제에서는 b라는 접두사와 일치하는 단일 규칙을 사용하여 대상 계정에 대한 복제 정책을 정의하고, 복제할 Blob에 대한 최소 만들기 시간을 설정합니다. 꺾쇠 괄호로 묶인 값을 사용자 고유의 값으로 바꿔야 합니다.

{
  "properties": {
    "policyId": "default",
    "sourceAccount": "/subscriptions/<subscriptionId>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>",
    "destinationAccount": "/subscriptions/<subscriptionId>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>",
    "rules": [
      {
        "ruleId": "",
        "sourceContainer": "<source-container>",
        "destinationContainer": "<destination-container>",
        "filters": {
          "prefixMatch": [
            "b"
          ],
          "minCreationTime": "2021-08-028T00:00:00Z"
        }
      }
    ]
  }
}

원본 및 대상 계정에 대한 전체 리소스 ID 지정

정책 정의 파일을 만드는 경우 이전 섹션의 예제와 같이 sourceAccountdestinationAccount 항목에 대한 전체 Azure Resource Manager 리소스 ID를 지정합니다. 스토리지 계정에 대한 리소스 ID를 찾는 방법에 대한 자세한 내용은 스토리지 계정의 리소스 ID 가져오기를 참조하세요.

전체 리소스 ID의 형식은 다음과 같습니다.

/subscriptions/<subscriptionId>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>

정책 정의 파일에는 이전에 스토리지 계정에 대한 전체 리소스 ID 대신 계정 이름만 필요했습니다. AllowCrossTenantReplication 보안 속성이 Azure Storage 리소스 공급자 REST API 2021-02-01 버전에 도입되면 이제 복제 정책에 참여하는 스토리지 계정에 대해 테넌트 간 복제가 허용되지 않는 경우 만든 모든 개체 복제 정책에 대한 전체 리소스 ID를 제공해야 합니다. Azure Storage는 전체 리소스 ID를 사용하여 원본 및 대상 계정이 동일한 테넌트 내에 있는지 확인합니다. 테넌트 간 복제 정책을 허용하지 않는 방법에 대한 자세한 내용은 Microsoft Entra 테넌트 간 복제 방지를 참조하세요.

스토리지 계정에 대해 테넌트 간 복제가 허용되는 경우에도 계정 이름만 제공하는 것이 여전히 지원되지만 항상 전체 리소스 ID를 제공하는 것이 좋습니다. 모든 이전 버전의 Azure Storage 리소스 공급자 REST API는 개체 복제 정책에서 전체 리소스 ID 경로를 사용할 수 있도록 지원합니다.

다음 표에서는 스토리지 계정에 대해 테넌트 간 복제가 허용되거나 허용되지 않는 시나리오에서 계정 이름과 비교하여 전체 리소스 ID가 지정된 복제 정책을 만들 때 발생하는 상황에 대해 설명합니다.

정책 정의의 스토리지 계정 식별자 테넌트 간 복제 허용 테넌트 간 복제 허용되지 않음
전체 리소스 ID 동일한 테넌트 정책을 만들 수 있습니다.

테넌트 간 정책을 만들 수 있습니다.
동일한 테넌트 정책을 만들 수 있습니다.

테넌트 간 정책을 만들 수 없습니다.
계정 이름만 동일한 테넌트 정책을 만들 수 있습니다.

테넌트 간 정책을 만들 수 있습니다.
동일한 테넌트 정책 또는 테넌트 간 정책을 만들 수 없습니다. Azure Storage에서 원본 및 대상 계정이 동일한 테넌트에 있는지 확인할 수 없으므로 오류가 발생합니다. 이 오류는 정책 정의 파일에서 sourceAccountdestinationAccount 항목에 대한 전체 리소스 ID를 지정해야 함을 나타냅니다.

정책 및 규칙 ID 지정

다음 표에는 각 시나리오에서 정책 정의 파일의 policyIdruleId 항목에 사용할 값이 요약되어 있습니다.

이 계정에 대한 정책 정의 파일을 만드는 경우... 정책 ID를 이 값으로 설정 규칙 ID를 이 값으로 설정
대상 계정 문자열 값(default)입니다. Azure Storage에서 정책 ID 값을 만듭니다. 빈 문자열입니다. Azure Storage에서 규칙 ID 값을 만듭니다.
원본 계정 대상 계정에 대한 정책 정의 파일을 다운로드할 때 반환되는 정책 ID의 값입니다. 대상 계정에 대한 정책 정의 파일을 다운로드할 때 반환되는 규칙 ID의 값입니다.

Microsoft Entra 테넌트 간 복제 방지

Microsoft Entra 테넌트는 ID 및 액세스 관리를 위한 조직을 나타내는 Microsoft Entra ID의 전용 인스턴스입니다. 각 Azure 구독에는 단일 Microsoft Entra 테넌트와 신뢰 관계가 있습니다. 스토리지 계정을 포함하여 구독의 모든 리소스는 동일한 Microsoft Entra 테넌트와 연결됩니다. 자세한 내용은 Microsoft Entra ID란?을 참조하세요.

기본적으로 테넌트 간 복제는 2023년 12월 15일부터 만들어진 새 계정에 대해 사용하지 않도록 설정됩니다. 보안 정책에서 동일한 테넌트 내에 있는 스토리지 계정으로만 개체 복제를 제한해야 하는 경우 보안 속성인 AllowCrossTenantReplication 속성(미리 보기)을 설정하여 테넌트 간 복제를 허용하지 않을 수 있습니다. 스토리지 계정에 대해 테넌트 간 개체 복제를 허용하지 않는 경우 해당 스토리지 계정을 원본 또는 대상 계정으로 구성한 개체 복제 정책의 경우 Azure Storage에서는 원본 계정과 대상 계정이 모두 동일한 Microsoft Entra 테넌트 내에 있어야 합니다. 테넌트 간 개체 복제를 허용하지 않는 방법에 대한 자세한 내용은 Microsoft Entra 테넌트 간 개체 복제 방지를 참조하세요.

스토리지 계정에 대한 테넌트 간 개체 복제를 허용하지 않으려면 AllowCrossTenantReplication 속성을 false로 설정합니다. 스토리지 계정이 현재 테넌트 간 개체 복제 정책에 참여하지 않는 경우 AllowCrossTenantReplication 속성을 false로 설정하면 나중에 이 스토리지 계정을 원본 또는 대상으로 사용하여 테넌트 간 개체 복제 정책을 구성하지 못하도록 방지할 수 있습니다.

스토리지 계정이 현재 하나 이상의 테넌트 간 개체 복제 정책에 참여하는 경우 AllowCrossTenantReplication 속성을 false로 설정하는 것은 허용되지 않습니다. 테넌트 간 복제를 허용하지 않으려면 먼저 기존 테넌트 간 정책을 삭제해야 합니다.

기본적으로 AllowCrossTenantReplication 속성은 2023년 12월 15일부터 만든 스토리지 계정에 대해 false로 설정됩니다. 스토리지 계정에 대한 AllowCrossTenantReplication 속성 값이 null 또는 true인 경우 권한 있는 사용자는 이 계정을 원본 또는 대상으로 사용하여 테넌트 간 개체 복제 정책을 구성할 수 있습니다. 테넌트 간 정책을 구성하는 방법에 대한 자세한 내용은 블록 Blob에 대한 개체 복제 구성을 참조하세요.

Azure Policy에서 스토리지 계정 세트를 감사하여 AllowCrossTenantReplication 속성이 테넌트 간 개체 복제를 방지하도록 설정되어 있는지 확인할 수 있습니다. 또한 Azure Policy를 사용하여 스토리지 계정 세트에 대한 거버넌스를 적용할 수 있습니다. 예를 들어 사용자가 AllowCrossTenantReplication 속성이 true로 설정된 스토리지 계정을 만들거나 기존 스토리지 계정을 수정하여 해당 속성 값을 true로 변경하지 못하도록 방지하기 위해 거부 효과가 있는 정책을 만들 수 있습니다.

복제 상태

원본 계정에서 Blob에 대한 복제 상태를 확인할 수 있습니다. 자세한 내용은 Blob의 복제 상태 확인을 참조하세요.

참고 항목

복제가 진행되는 동안 복제된 데이터의 백분율을 확인할 수 있는 방법은 없습니다.

원본 계정의 Blob에 대한 복제 상태가 실패를 나타내는 경우 다음과 같은 가능한 원인을 조사합니다.

  • 개체 복제 정책이 대상 계정에 구성되어 있는지 확인합니다.
  • 대상 계정이 여전히 있는지 확인합니다.
  • 대상 컨테이너가 여전히 있는지 확인합니다.
  • 대상 컨테이너가 삭제 중이 아니거나 방금 삭제되지 않았는지 확인합니다. 컨테이너를 삭제하는 데 최대 30초가 걸릴 수 있습니다.
  • 대상 컨테이너가 여전히 개체 복제 정책에 참여하고 있는지 확인합니다.
  • 원본 Blob이 쓰기 작업의 일부로 고객이 제공한 키로 암호화된 경우 개체 복제가 실패합니다. 고객이 제공한 키에 대한 자세한 내용은 Blob 스토리지 요청 시 암호화 키 제공을 참조하세요.
  • 원본 또는 대상 Blob이 보관 계층으로 이동되었는지 확인합니다. 보관된 Blob은 개체 복제를 통해 복제할 수 없습니다. 보관 계층에 대한 자세한 내용은 보관 액세스 계층을 참조하세요.
  • 대상 컨테이너 또는 Blob이 불변성 정책으로 보호되지 않는지 확인합니다. 컨테이너 또는 Blob은 부모로부터 불변성 정책을 상속할 수 있습니다. 불변성 정책에 대한 자세한 내용은 Blob 데이터에 대한 변경할 수 없는 스토리지 개요를 참조하세요.

기능 지원

이 기능에 대한 지원은 Data Lake Storage Gen2, NFS(네트워크 파일 시스템) 3.0 프로토콜 또는 SSH SFTP(파일 전송 프로토콜)를 사용하도록 설정하면 영향을 받을 수 있습니다. 이러한 기능을 사용하도록 설정한 경우 Azure Storage 계정의 Blob Storage 기능 지원을 참조하여 이 기능에 대한 지원을 평가합니다.

결제

개체 복제를 구성하는 데는 비용이 들지 않습니다. 여기에는 변경 피드를 사용하도록 설정하고, 버전 관리를 사용하도록 설정하고, 복제 정책을 추가하는 작업이 포함됩니다. 그렇지만 개체 복제는 원본 및 대상 계정에 대한 읽기 및 쓰기 트랜잭션에 대한 비용을 발생시킬 뿐만 아니라 원본 계정에서 대상 계정으로의 데이터 복제에 대한 송신 비용과 변경 피드를 처리하기 위한 읽기 비용을 발생시킵니다.

다음은 비용에 대한 분석입니다. 각 비용 구성 요소의 가격을 찾으려면 Azure Blob Storage 가격 책정을 참조하세요.

원본 계정에서 Blob을 업데이트하는 데 드는 비용 대상 계정에서 데이터를 복제하는 데 드는 비용
쓰기 작업의 트랜잭션 비용 변경 피드 레코드를 읽는 데 드는 트랜잭션 비용
Blob 및 각 Blob 버전의 스토리지 비용1 Blob 및 Blob 버전을 읽는 데 드는 트랜잭션 비용2
변경 피드 레코드 추가 비용 Blob 및 Blob 버전을 쓰는 데 드는 트랜잭션 비용2
Blob 및 각 Blob 버전의 스토리지 비용1
네트워크 송신 비용3

1원본 계정에서 Blob 또는 버전의 계층을 변경하지 않은 경우 해당 Blob과 그 버전에 걸쳐 고유한 데이터 블록에 대해 요금이 청구됩니다. Blob 버전 관리 가격 책정 및 청구를 참조하세요. 대상 계정에서 버전의 경우 해당 블록이 고유한지 여부에 관계없이 버전의 모든 블록에 대해 요금이 청구됩니다.

2 여기에는 마지막 복제가 완료된 이후 생성된 Blob 버전만 포함됩니다.

3 개체 복제는 (버전의 고유 블록뿐만 아니라) 전체 버전을 대상으로 복사합니다. 이 전송에는 네트워크 송신 비용이 발생합니다. 대역폭 가격 책정을 참조하세요.

예기치 않은 청구서의 위험을 줄이려면 소수의 개체만 포함하는 계정에서 개체 복제를 사용하도록 설정합니다. 그런 다음 프로덕션 설정에서 기능을 사용하도록 설정하기 전에 비용에 미치는 영향을 측정합니다.

다음 단계