Azure Storage 버킷에서 데이터를 전송하기 전에 Storage Transfer Service에서 객체를 검색할 수 있도록 해당 버킷에 대한 액세스를 구성해야 합니다.
Storage Transfer Service는 다음 Azure 인증 방법을 지원합니다.
공유 액세스 서명(SAS) 토큰 SAS 토큰은 전송 작업을 만들 때 직접 지정하거나 Secret Manager에 저장할 수 있습니다.
Azure 공유 키는 Secret Manager에 저장할 수 있으며 전송 작업을 만들 때 전달된 보안 비밀을 사용할 수 있습니다.
제휴 사용자 인증 정보는 전송 작업을 만들 때
federatedIdentityConfig
객체에 전달됩니다.
이 문서에는 액세스를 허용하기 위해 Azure Storage 방화벽에 Storage Transfer Service 작업자 IP 주소를 추가하는 방법에 관한 정보도 포함되어 있습니다. 자세한 내용은 IP 제한사항을 참고하세요.
지원되는 리전
Storage Transfer Service는 다음 Microsoft Azure Storage 리전에서 데이터를 전송할 수 있습니다.- 미주: 미국 동부, 미국 동부 2, 미국 서부, 미국 서부 2, 미국 서부 3, 미국 중부, 미국 중북부, 미국 중남부, 미국 중서부, 캐나다 중부, 캐나다 동부, 브라질 남부
- 아시아 태평양: 오스트레일리아 중부, 오스트레일리아 동부, 오스트레일리아 남동부, 인도 중부, 인도 남부, 인도 서부, 동남아시아, 동아시아, 일본 동부, 일본 서부, 한국 남부, 한국 중부
- 유럽, 중동, 아프리카(EMEA): 프랑스 중부, 독일 중서부, 노르웨이 동부, 스웨덴 중부, 스위스 북부, 북유럽, 유럽 서부, 영국 남부, 영국 서부, 카타르 중부, UAE 북부, 남아프리카공화국 북부
옵션 1: SAS 토큰을 사용하여 인증
SAS 토큰을 사용하여 Microsoft Azure Storage 컨테이너에 대한 액세스를 구성하려면 다음 단계를 따르세요. 또는 Secret Manager에 SAS 토큰을 저장할 수 있습니다. 이렇게 하려면 Secret Manager에서 Azure 공유 키 또는 SAS 토큰을 사용하여 인증의 안내를 따르세요.
Microsoft Azure Storage 사용자를 만들거나 기존 사용자를 사용하여 Microsoft Azure Storage Blob 컨테이너의 스토리지 계정에 액세스합니다.
컨테이너 수준에서 SAS 토큰을 만듭니다. 자세한 내용은 공유 액세스 서명을 사용하여 Azure Storage 리소스에 대한 제한된 액세스 권한 부여를 참고하세요.
허용된 서비스에는 Blob이 포함되어야 합니다.
허용된 리소스 유형에서 컨테이너 및 객체를 모두 선택합니다.
허용된 권한에 읽기 및 나열이 포함되어야 합니다. 소스에서 객체를 삭제하도록 전송이 구성된 경우 삭제 권한도 포함해야 합니다.
SAS 토큰의 기본 만료 시간은 8시간입니다. 전송을 성공적으로 완료할 수 있도록 적절한 만료 시간을 설정합니다.
허용된 IP 주소 필드에 IP 주소를 지정하지 마세요. Storage Transfer Service는 다양한 IP 주소를 사용하며 IP 주소 제한을 지원하지 않습니다.
허용되는 프로토콜은 HTTPS 전용이어야 합니다.
토큰이 생성되면 반환된 SAS 토큰 값을 기록합니다. Storage Transfer Service에서 전송을 구성할 때 이 값이 필요합니다.
옵션 2: Secret Manager에서 Azure 공유 키 또는 SAS 토큰을 사용하여 인증
Secret Manager는 비밀번호와 같은 민감한 정보를 저장하고 관리하는 보안 서비스입니다. 보안 비밀을 보호하기 위해 강력한 암호화, 역할 기반 액세스 제어, 감사 로깅을 사용합니다.
Storage Transfer Service는 안전하게 저장된 Azure 사용자 인증 정보를 참조하는 Secret Manager 리소스 이름을 지원합니다.
Azure 공유 키를 사용하려면 Secret Manager에 키를 저장해야 합니다. SAS 토큰은 Secret Manager에 저장하거나 직접 전달할 수 있습니다.
공유 키를 지정하면 Storage Transfer Service는 이 키를 사용하여 전송 작업에 지정된 Azure 컨테이너로 범위가 제한된 서비스 SAS를 생성합니다.
API 사용 설정
Enable the Secret Manager API.
추가 권한 구성
사용자 권한
보안 비밀을 만드는 사용자는 다음 역할이 필요합니다.
- Secret Manager 관리자(
roles/secretmanager.admin
)
역할 부여 방법 알아보기
서비스 에이전트 권한
Storage Transfer Service 서비스 에이전트에는 다음 IAM 역할이 필요합니다.
- Secret Manager 보안 비밀 접근자(
roles/secretmanager.secretAccessor
)
서비스 에이전트에 다음 역할을 부여합니다.
Cloud 콘솔
안내에 따라 서비스 에이전트 이메일 검색합니다.
Google Cloud 콘솔의 IAM 페이지로 이동합니다.
액세스 권한 부여를 클릭합니다.
새 주 구성원 텍스트 상자에 서비스 에이전트 이메일을 입력합니다.
역할 선택 드롭다운에서 Secret Manager 보안 비밀 접근자를 검색하고 선택합니다.
저장을 클릭합니다.
gcloud
gcloud projects add-iam-policy-binding
명령어를 사용해서 서비스 에이전트에 IAM 역할을 추가합니다.
안내에 따라 서비스 에이전트 이메일 검색합니다.
명령줄에서 다음 명령어를 입력합니다.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:SERVICE_AGENT_EMAIL' \ --role='roles/secretmanager.secretAccessor'
보안 비밀 만들기
Secret Manager로 보안 비밀 만들기
Cloud 콘솔
Google Cloud 콘솔에서 Secret Manager 페이지로 이동합니다.
보안 비밀 만들기를 클릭합니다.
이름을 입력합니다.
보안 비밀 값 텍스트 상자에 다음 형식 중 하나로 사용자 인증 정보를 입력합니다.
{ "sas_token" : "SAS_TOKEN_VALUE" }
또는
{ "access_key" : "ACCESS_KEY" }
보안 비밀 만들기를 클릭합니다.
보안 비밀이 생성되면 보안 비밀의 전체 리소스 이름을 기록해 둡니다.
개요 탭을 선택합니다.
리소스 이름 값을 복사합니다. 다음 형식을 사용합니다.
projects/1234567890/secrets/SECRET_NAME
gcloud
gcloud 명령줄 도구를 사용해서 새 보안 비밀을 만들려면 JSON 형식의 사용자 인증 정보를 gcloud secrets create
명령어에 전달합니다.
printf '{
"sas_token" : "SAS_TOKEN_VALUE"
}' | gcloud secrets create SECRET_NAME --data-file=-
또는
printf '{
"access_key" : "ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-
보안 비밀의 전체 리소스 이름을 검색합니다.
gcloud secrets describe SECRET_NAME
응답에서 name
값을 기록해 둡니다. 다음 형식을 사용합니다.
projects/1234567890/secrets/SECRET_NAME
보안 비밀 만들기 및 관리에 대한 자세한 내용은 Secret Manager 문서를 참조하세요.
보안 비밀을 작업 만들기 명령어에 전달
Storage Transfer Service와 함께 Secret Manager를 사용하려면 REST API를 사용하여 전송 작업을 만들어야 합니다.
Secret Manager 리소스 이름을 transferSpec.azureBlobStorageDataSource.credentialsSecret
필드의 값으로 전달합니다.
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "Transfer with Secret Manager",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"transferSpec": {
"azureBlobStorageDataSource": {
"storageAccount": "AZURE_STORAGE_ACCOUNT_NAME",
"container": "AZURE_CONTAINER_NAME",
"credentialsSecret": "SECRET_RESOURCE_ID",
},
"gcsDataSink": {
"bucketName": "CLOUD_STORAGE_BUCKET_NAME"
}
}
}
전송 만들기에 관한 자세한 내용은 전송 만들기를 참고하세요.
옵션 3: 제휴 ID를 사용하여 인증
Storage Transfer Service는 Google Cloud와의 Azure 워크로드 아이덴티티 제휴를 지원합니다. Storage Transfer Service는 등록된 Azure 애플리케이션을 통해 Azure Storage에 요청을 전송할 수 있으므로 Storage Transfer Service에 사용자 인증 정보를 직접 전달할 필요가 없습니다.
제휴 ID를 구성하려면 다음 안내를 따르세요.
Google Cloud 사용자 인증 정보 구성
계정에 OpenID Connect(OIDC) ID 토큰을 만들 수 있도록 하려면 Storage Transfer Service 서비스 에이전트에 서비스 계정 토큰 생성자(roles/iam.serviceAccountTokenCreator
) 역할을 추가해야 합니다.
Storage Transfer Service 사용을 시작할 때 자동으로 생성되는 Google 관리 서비스 에이전트의
accountEmail
및subjectId
를 가져옵니다. 이러한 값을 검색하려면 다음 단계를 따르세요.googleServiceAccounts.get
참조 페이지로 이동하세요.이 메서드 사용해 보기라는 제목의 대화형 패널이 열립니다.
패널의 요청 매개변수에 프로젝트 ID를 입력합니다. 여기에서 지정하는 프로젝트는 Storage Transfer Service를 관리하는 데 사용하는 프로젝트여야 합니다.
실행을 클릭합니다.
accountEmail
및subjectId
가 응답에 포함됩니다. 이 값을 저장하세요.
Storage Transfer Service 서비스 에이전트에 서비스 계정 토큰 생성자(
roles/iam.serviceAccountTokenCreator
) 역할을 부여합니다. 서비스 계정에 대한 액세스 관리의 안내를 따릅니다.
Microsoft 사용자 인증 정보 구성
먼저 애플리케이션을 등록하고 제휴 사용자 인증 정보를 추가합니다.
- https://portal.azure.com에 로그인합니다.
- 앱 등록 페이지로 이동합니다.
- '새 등록'을 클릭합니다.
- 이름을 입력합니다. 예를 들면
azure-transfer-app
입니다. - 이 조직 디렉터리의 계정만을 선택합니다.
- 등록을 클릭합니다. 애플리케이션이 생성됩니다.
Application (client) ID
및Directory (tenant) ID
에 유의하세요. 나중에 애플리케이션의 개요 페이지에서 이러한 정보를 가져올 수도 있습니다. - 인증서 및 보안 비밀을 클릭하고 제휴 사용자 인증 정보 탭을 선택합니다.
- 사용자 인증 정보 추가를 클릭합니다.
- 시나리오로 기타 발급기관을 선택하고 다음 정보를 입력합니다.
- 발급 기관:
https://accounts.google.com
- 제목 식별자: Google Cloud 사용자 인증 정보 구성에서 가져온 서비스 에이전트의
subjectId
입니다. - 제휴 사용자 인증 정보의 고유한 이름입니다.
- 잠재고객은
api://AzureADTokenExchange
로 유지되어야 합니다.
- 발급 기관:
- 추가를 클릭합니다.
그런 다음 애플리케이션에 Azure Storage 컨테이너에 대한 액세스 권한을 부여합니다.
- Azure 계정의 스토리지 계정 페이지로 이동합니다.
- 스토리지 계정을 선택하고 데이터 스토리지 섹션에서 컨테이너를 선택합니다.
- 액세스 권한을 부여할 버킷을 클릭합니다.
- 왼쪽 메뉴에서 액세스 제어 (IAM)를 클릭하고 역할 탭을 선택합니다.
- 역할 옆에 있는 더보기 (
...
) 메뉴를 클릭하고 클론을 선택합니다. - 이 맞춤 역할의 이름을 입력하고 새로 시작을 선택합니다. 다음을 클릭합니다.
- 권한 추가를 클릭하고
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
를 검색합니다. - 표시되는 Microsoft Storage 카드를 클릭합니다.
- 데이터 작업 라디오 버튼을 선택합니다.
- 읽기 : Blob 읽기를 선택합니다.
- 추가를 클릭합니다.
- 전송 후 소스에서 객체를 삭제하려면 권한 추가를 다시 클릭하고
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
를 검색합니다. - 표시되는 Microsoft Storage 카드를 클릭하고 데이터 작업을 선택한 다음 삭제 : blob 삭제를 선택합니다.
- 추가를 클릭합니다.
- 검토 + 만들기를 클릭한 다음 만들기를 클릭합니다. 버킷의 액세스 제어 (IAM) 페이지로 돌아갑니다.
- Add(추가)를 클릭하고 Add role assignments(역할 할당 추가)를 선택합니다.
- 역할 목록에서 맞춤 역할을 선택하고 다음을 클릭합니다.
- Select members(구성원 선택)를 클릭합니다.
- Select 필드에 이전에 등록한 애플리케이션의 이름을 입력합니다. 예를 들면
azure-transfer-app
입니다. - 애플리케이션 카드를 클릭하고 선택을 클릭합니다.
- 검토 + 할당을 클릭합니다.
애플리케이션 식별자를 작업 만들기 명령어에 전달
애플리케이션의 식별자는 federatedIdentityConfig
객체를 사용하여 작업 생성 명령어에 전달됩니다. Microsoft 사용자 인증 정보 구성 단계에서 저장한 애플리케이션 (클라이언트) ID 및 디렉터리 (테넌트) ID를 client_id
및 tenant_id
필드에 복사합니다.
"federatedIdentifyConfig": {
"client_id": "efghe9d8-4810-800b-8f964ed4057f",
"tenant_id": "abcd1234-c8f0-4cb0-b0c5-ae4aded60078"
}
작업 생성 요청의 예는 다음과 같습니다.
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "Transfer with Azure Federated Identity",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"transferSpec": {
"azureBlobStorageDataSource": {
"storageAccount": "AZURE_STORAGE_ACCOUNT_NAME",
"container": "AZURE_CONTAINER_NAME",
"federatedIdentifyConfig": {
"client_id": "AZURE_CLIENT_ID",
"tenant_id": "AZURE_TENANT_ID"
}
},
"gcsDataSink": {
"bucketName": "CLOUD_STORAGE_BUCKET_NAME"
}
}
}
전송 만들기에 관한 자세한 내용은 전송 만들기를 참고하세요.
IP 제한사항
Azure Storage 방화벽을 사용하여 Azure 리소스에 대한 액세스를 제한하는 경우, Storage Transfer Service 작업자가 사용하는 IP 범위를 허용된 IP 목록에 추가해야 합니다.
이러한 IP 범위는 변경될 수 있기 때문에 현재 값을 영구 주소의 JSON 파일로 게시합니다.
https://www.gstatic.com/storage-transfer-service/ipranges.json
새 범위가 파일에 추가되면 Storage Transfer Service의 요청에 이 범위를 사용하기 전에 최소 7일 이상 기다립니다.
보안 구성을 업데이트된 상태로 유지하기 위해 최소한 매주 이 문서의 데이터를 확인하는 것이 좋습니다. JSON 파일에서 IP 범위를 가져오는 샘플 Python 스크립트의 경우 Virtual Private Cloud 설명서의 이 문서를 참조하세요.
이러한 범위를 허용되는 IP로 추가하려면 Microsoft Azure 도움말 Azure Storage 방화벽 및 가상 네트워크 구성의 안내를 따르세요.