Storage Transfer Service는 두 가지 전송 유형에서 Cloud Storage 대상(싱크) 버킷을 사용할 수 있습니다.
에이전트 없는 전송: AWS S3, Azure Blob Storage 또는 Cloud Storage에서 Cloud Storage로의 클라우드 간 전송입니다. 권한은 Storage Transfer Service 서비스 에이전트에 부여됩니다.
에이전트 기반 전송: 전송 에이전트 및 에이전트 풀을 사용하는 파일 시스템, HDFS 또는 S3 호환 스토리지에서 Cloud Storage로의 전송입니다. 서비스 에이전트와 전송 에이전트 계정 모두에 권한을 부여해야 합니다.
Google Cloud 콘솔에서 권한 자동 부여
Google Cloud 콘솔을 사용하여 에이전트 없는 전송을 만들고 필요한 사용자 권한이 있는 경우 서비스 에이전트는 대상 버킷에 대한 필수 권한을 자동으로 부여받습니다.
이 페이지의 단계는 건너뛰어도 됩니다. 필요에 따라 소스 액세스를 구성한 후 전송을 만듭니다.
기본 요건
사용자 계정 권한: 이 페이지에 나열된 필수 IAM 역할을 부여하려면 사용자 계정(또는 사용자 관리형 서비스 계정)에 대상 버킷 및 에이전트 풀 프로젝트에서 IAM 정책을 수정할 수 있는 권한이 있어야 합니다. 사용자 계정 요구사항에 대한 자세한 내용은 사용자 계정 권한을 참조하세요.
에이전트 기반 전송 프로젝트 권한: 에이전트 기반 전송의 경우 서비스 에이전트 및 전송 에이전트 계정에 필요한 프로젝트 수준 역할을 구성했는지 확인합니다. 에이전트 기반 프로젝트 수준 권한을 참조하세요.
서비스 에이전트의 이메일 찾기
서비스 에이전트는 전송 작업을 처음 만들거나, gcloud transfer 설정 명령어를 실행하거나,Google Cloud 콘솔에서 Storage Transfer 페이지를 방문하거나, googleServiceAccounts.get를 호출할 때 자동으로 생성됩니다.
Storage Transfer Service 명령어에서 서비스 에이전트를 식별하는 데 사용되는 서비스 에이전트의 이메일을 가져오려면 다음 안내를 따르세요.
googleServiceAccounts.get참조 페이지로 이동하세요. 이 메서드 사용해 보기라는 제목의 대화형 패널이 열립니다.- 패널의 요청 매개변수에 프로젝트 ID를 입력합니다.
- 실행을 클릭합니다.
accountEmail 값을 복사합니다. project-PROJECT_NUMBER@storage-transfer-service. 형식을 사용합니다.
필수 권한 부여
전송 유형을 선택하여 액세스 권한 부여 단계를 확인하세요.
에이전트리스 전송
다음 사전 정의된 역할은 함께 대상 버킷에 대한 필수 권한을 서비스 에이전트에 부여합니다.
- 스토리지 기존 버킷 리더(
roles/storage.legacyBucketReader) - 스토리지 객체 사용자(
roles/storage.objectUser) 또는 객체 ACL을 보존하는 경우 스토리지 객체 관리자(roles/storage.objectAdmin)(ACL_PRESERVE)
대상 버킷 IAM 정책에 서비스 에이전트를 추가합니다.
콘솔
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
- 대상 버킷의 버킷 더보기 메뉴()를 클릭합니다.
- 액세스 수정을 선택합니다.
- + 주 구성원 추가를 클릭합니다.
- 새 주 구성원에 서비스 에이전트 이메일을 입력합니다.
- 역할 선택 드롭다운 메뉴에서
Storage Legacy Bucket Reader를 선택합니다. - 다른 역할 추가를 클릭하고
Storage Object User를 선택하거나 객체 ACL을 보존하는 경우Storage Object Admin를 선택합니다. - 저장을 클릭합니다.
gcloud
다음 gcloud storage 명령어를 실행합니다.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.OBJECT_ROLE
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
다음과 같이 바꿉니다.
- BUCKET_NAME: 대상 버킷의 이름입니다.
- SERVICE_AGENT_EMAIL: 서비스 에이전트 이메일입니다.
- OBJECT_ROLE: 기본적으로
objectUser를 지정하고 객체 ACL(ACL_PRESERVE)을 보존하는 경우objectAdmin를 지정합니다.
REST API
요청을 인증할 액세스 토큰을 생성합니다.
gcloudCLI를 사용하는 경우 다음을 실행합니다.gcloud auth print-access-token
기존 버킷 IAM 정책(
GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam)을 가져오고 다음 바인딩을bindings배열에 추가한 후 병합된 정책을sink_policy.json로 저장합니다.{ "bindings": [ { "role": "roles/storage.OBJECT_ROLE", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] } ] }
다음과 같이 바꿉니다.
- SERVICE_AGENT_EMAIL: 서비스 에이전트 이메일입니다.
- OBJECT_ROLE: 기본적으로
objectUser를 지정하고 객체 ACL(ACL_PRESERVE)을 보존하는 경우objectAdmin를 지정합니다.
curl를 사용하여PUT요청을 제출합니다.curl -X PUT --data-binary @sink_policy.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage./storage/v1/b/BUCKET_NAME/iam"
다음과 같이 바꿉니다.
- OAUTH2_TOKEN: 1단계에서 생성된 OAuth 2.0 액세스 토큰입니다.
- BUCKET_NAME: 대상 버킷의 이름입니다.
에이전트 기반 전송
다음 사전 정의된 역할은 서비스 에이전트에 대상 버킷에 대한 필수 액세스 권한을 부여합니다.
- 스토리지 객체 생성자(
roles/storage.objectCreator) - 스토리지 객체 뷰어 (
roles/storage.objectViewer) - 스토리지 기존 버킷 리더(
roles/storage.legacyBucketReader)
다음 역할은 전송 에이전트 계정에 대상 버킷에 대한 필수 액세스 권한을 부여합니다.
- 스토리지 객체 사용자(
roles/storage.objectUser)
대상 버킷에 이러한 역할을 부여합니다.
콘솔
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
- 대상 버킷의 버킷 더보기 메뉴()를 클릭하고 액세스 수정을 선택합니다.
- + 주 구성원 추가를 클릭합니다.
- 새 주 구성원에 서비스 에이전트 이메일을 입력합니다.
- 역할 선택 드롭다운 메뉴에서
Storage Object Creator,Storage Object Viewer,Storage Legacy Bucket Reader를 선택합니다. - + 주 구성원 추가를 다시 클릭합니다.
- 전송 에이전트 계정 이메일을 입력합니다. 전송 에이전트를 설치할 때 사용되는 사용자 또는 서비스 계정입니다. 예를 들면
my-agent-sa@PROJECT_ID.또는user@example.com입니다. - 역할 선택 드롭다운 메뉴에서
Storage Object User를 선택합니다. - 저장을 클릭합니다.
gcloud
서비스 에이전트에 로깅 및 뷰어 역할을 부여합니다.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreatorgcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectViewergcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader전송 에이전트 계정에 쓰기 및 관리 역할을 부여합니다.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT --role=roles/storage.objectUser다음과 같이 바꿉니다.
- BUCKET_NAME: 대상 버킷의 이름입니다.
- SERVICE_AGENT_EMAIL: 서비스 에이전트 이메일입니다.
- serviceAccount_OR_user: 전송 에이전트 계정이 서비스 계정인 경우
serviceAccount를 지정하고, 에이전트가 사용자 계정으로 설치된 경우user를 지정합니다. - TRANSFER_AGENT_ACCOUNT: 전송 에이전트를 설치한 계정의 이메일입니다. 예를 들면
my-agent-sa@PROJECT_ID.또는user@example.com입니다.
REST API
요청을 인증할 액세스 토큰을 생성합니다.
gcloudCLI를 사용하는 경우 다음을 실행합니다.gcloud auth print-access-token
기존 버킷 IAM 정책(
GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam)을 가져오고 다음 바인딩을bindings배열에 추가한 후 병합된 정책을agent_sink_policy.json로 저장합니다.{ "bindings": [ { "role": "roles/storage.objectCreator", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.objectViewer", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.objectUser", "members": ["serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT"] } ] }
다음과 같이 바꿉니다.
- SERVICE_AGENT_EMAIL: 서비스 에이전트 이메일입니다.
- serviceAccount_OR_user: 전송 에이전트 계정이 서비스 계정인 경우
serviceAccount를 지정하고, 에이전트가 사용자 계정으로 설치된 경우user를 지정합니다. - TRANSFER_AGENT_ACCOUNT: 전송 에이전트를 설치한 계정의 이메일입니다. 예를 들면
my-agent-sa@PROJECT_ID.또는user@example.com입니다.
curl를 통해 버킷 정책을 업데이트합니다.curl -X PUT --data-binary @agent_sink_policy.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage./storage/v1/b/BUCKET_NAME/iam"다음과 같이 바꿉니다.
- OAUTH2_TOKEN: 1단계에서 생성된 OAuth 2.0 액세스 토큰입니다.
- BUCKET_NAME: 대상 버킷의 이름입니다.
세분화된 권한 참조
전송 유형을 선택하여 필요한 역할 및 권한을 확인합니다.
에이전트리스 전송
에이전트 없는 전송의 경우 Storage Transfer Service 서비스 에이전트에 권한을 부여해야 합니다.
| 권한 | 설명 |
|---|---|
storage.buckets.get |
서비스 에이전트가 버킷 메타데이터 및 위치를 검사할 수 있게 합니다. |
storage.objects.create |
서비스 에이전트가 전송된 객체를 대상 버킷에 쓸 수 있도록 허용합니다. |
storage.objects.get |
기존 객체 및 메타데이터를 볼 수 있습니다. 전송이 싱크에서 객체를 덮어쓰도록 구성된 경우 필수입니다(다른 경우 또는 안 함). |
storage.objects.list |
대상 버킷의 객체를 나열할 수 있습니다. 객체가 싱크에 이미 있는지 확인하는 경우 필요합니다. |
storage.objects.delete |
대상 버킷의 객체를 삭제할 수 있습니다. 덮어쓰기 또는 고유 객체 삭제 옵션이 사용 설정된 경우 필수입니다. |
storage.objects.setIamPolicy |
대상 버킷에서 객체 ACL을 설정할 수 있습니다. 객체 ACL 보존(ACL_PRESERVE)이 사용 설정된 경우 필요합니다. |
storage.folders.createstorage.folders.get |
폴더를 만들고 읽을 수 있습니다. 계층적 네임스페이스가 사용 설정된 대상 버킷으로 전송할 때 필요합니다. |
에이전트 기반 전송
Cloud Storage 대상으로 에이전트 기반 전송을 수행하는 경우 권한은 두 주 구성원 간에 분할됩니다.
서비스 에이전트: 전송 로그를 작성하고 대상 버킷에 객체가 있는지 확인할 수 있는 권한이 필요합니다.
전송 에이전트 계정: Cloud Storage에 파일을 쓰는 전송 에이전트를 실행하는 서비스 계정 또는 사용자 계정입니다.
서비스 에이전트 권한
| 권한 | 설명 |
|---|---|
storage.buckets.get |
서비스 에이전트가 버킷 메타데이터 및 위치를 검사할 수 있게 합니다. |
storage.objects.create |
버킷에 전송 로그를 만들 수 있습니다. |
storage.objects.get |
객체가 이미 전송되었는지 확인할 수 있습니다. |
전송 에이전트 계정 권한
| 권한 | 설명 |
|---|---|
storage.objects.create |
에이전트가 전송 중에 대상 버킷에 객체를 쓸 수 있습니다. |
storage.objects.get |
에이전트가 대상 버킷의 객체 데이터 및 메타데이터를 읽을 수 있도록 허용합니다. |
storage.objects.list |
에이전트가 대상 버킷의 기존 객체를 나열할 수 있습니다. |
storage.objects.delete |
싱크에서 객체를 덮어쓰거나 삭제하도록 전송이 구성된 경우 필수입니다. |
storage.multipartUploads.createstorage.multipartUploads.abortstorage.multipartUploads.listPartsstorage.multipartUploads.list |
에이전트가 대용량 파일에 대해 멀티파트 업로드를 수행할 수 있습니다. roles/storage.objectUser에 자동으로 포함됩니다. |
storage.folders.createstorage.folders.get |
계층적 네임스페이스가 사용 설정된 대상 버킷으로 전송할 때 에이전트가 폴더를 만들고 읽을 수 있습니다. |
다음 단계
- 소스에 대한 액세스 구성 방법 알아보기
- 전송을 만드는 방법 알아보기
- 역할 및 권한 참조를 검토합니다.