Storage Transfer Service는 두 가지 전송 유형에서 Cloud Storage 소스 버킷을 사용할 수 있습니다.
에이전트 없는 전송: Cloud Storage에서 Cloud Storage로, Cloud Storage에서 AWS S3로, Cloud Storage에서 Azure Blob Storage로와 같은 클라우드 간 전송입니다. Storage Transfer Service 서비스 에이전트에 권한이 부여됩니다.
에이전트 기반 전송: 전송 에이전트 및 에이전트 풀을 사용하는 파일 시스템 또는 온프레미스 스토리지가 포함된 전송입니다. 서비스 에이전트와 전송 에이전트 계정 모두에 권한을 부여해야 합니다.
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.objectViewer) - 전송 후 소스 객체를 삭제하는 경우(
deleteObjectsFromSourceAfterTransfer) 스토리지 객체 사용자(roles/storage.objectUser) - 객체 ACL을 보존하는 경우 스토리지 객체 관리자(
roles/storage.objectAdmin)(ACL_PRESERVE). 전송 후 소스 객체 삭제도 지원합니다.
- 소스 객체가 유지되는 경우 스토리지 객체 뷰어(
소스 버킷 IAM 정책에 서비스 에이전트를 추가합니다.
콘솔
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
- 소스 버킷의 버킷 더보기 메뉴()를 클릭합니다.
- 액세스 수정을 선택합니다.
- + 주 구성원 추가를 클릭합니다.
- 새 주 구성원에 서비스 에이전트 이메일을 입력합니다.
- 역할 선택 드롭다운 메뉴에서
Storage Legacy Bucket Reader를 선택합니다. - 다른 역할 추가를 클릭하고 다음 중 하나를 선택합니다.
Storage Object ViewerStorage Object UserStorage Object Admin
- 저장을 클릭합니다.
gcloud
다음 gcloud storage 명령어를 실행합니다.
gcloud 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:SERVICE_AGENT_EMAIL --role=roles/storage.OBJECT_ROLE
다음과 같이 바꿉니다.
- BUCKET_NAME: 소스 버킷의 이름입니다.
- SERVICE_AGENT_EMAIL: 서비스 에이전트 이메일입니다.
- OBJECT_ROLE: 전송 옵션에 따라 다음 중 하나를 선택합니다.
objectViewer: 소스 객체를 보관하는 경우objectUser: 전송 후 소스 객체를 삭제하는 경우objectAdmin: 객체 ACL을 보존하는 경우 전송 후 소스 객체 삭제도 지원합니다.
REST API
요청을 인증할 액세스 토큰을 생성합니다.
gcloudCLI를 사용하는 경우 다음을 실행합니다.gcloud auth print-access-token
기존 버킷 IAM 정책(
GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam)을 가져오고 다음 바인딩을bindings배열에 추가한 후 병합된 정책을source_policy.json로 저장합니다.{ "bindings": [ { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.OBJECT_ROLE", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] } ] }
다음과 같이 바꿉니다.
- SERVICE_AGENT_EMAIL: 서비스 에이전트 이메일입니다.
- OBJECT_ROLE: 소스 객체를 유지하는 경우
objectViewer, 소스 객체를 삭제하는 경우objectUser, 객체 ACL을 보존하는 경우objectAdmin를 선택합니다.
curl를 사용하여PUT요청을 제출합니다.curl -X PUT --data-binary @source_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.legacyBucketReader) - 스토리지 객체 생성자(
roles/storage.objectCreator)
다음 역할은 전송 에이전트 계정에 소스 버킷에 대한 필수 액세스 권한을 부여합니다.
- 소스 객체를 보관하는 경우 스토리지 객체 뷰어(
roles/storage.objectViewer) 또는 전송 후 소스 객체를 삭제하는 경우 스토리지 객체 사용자(roles/storage.objectUser)
소스 버킷에 이러한 역할을 부여합니다.
콘솔
- Google Cloud 콘솔에서 Cloud Storage 버킷 페이지로 이동합니다.
- 소스 버킷의 버킷 더보기 메뉴()를 클릭하고 액세스 수정을 선택합니다.
- + 주 구성원 추가를 클릭합니다.
- 새 주 구성원에 서비스 에이전트 이메일을 입력합니다.
- 역할 선택 드롭다운 메뉴에서
Storage Legacy Bucket Reader및Storage Object Creator를 선택합니다. - + 주 구성원 추가를 다시 클릭합니다.
- 전송 에이전트 계정 이메일을 입력합니다. 전송 에이전트를 설치할 때 사용되는 사용자 또는 서비스 계정입니다. 예를 들면
my-agent-sa@PROJECT_ID.또는user@example.com입니다. - 소스 객체를 보관하는 경우
Storage Object Viewer를 선택하고 전송 후 소스 객체를 삭제하는 경우Storage Object User를 선택합니다. - 저장을 클릭합니다.
gcloud
서비스 에이전트에 버킷 메타데이터 읽기 및 전송 로그 쓰기 역할을 부여합니다.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReadergcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreator전송 에이전트 계정에 객체 액세스 역할을 부여합니다.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT --role=roles/storage.OBJECT_ROLE다음과 같이 바꿉니다.
- BUCKET_NAME: 소스 버킷의 이름입니다.
- SERVICE_AGENT_EMAIL: 서비스 에이전트 이메일입니다.
- serviceAccount_OR_user: 전송 에이전트 계정이 서비스 계정인 경우
serviceAccount를 지정하고, 에이전트가 사용자 계정으로 설치된 경우user를 지정합니다. - TRANSFER_AGENT_ACCOUNT: 전송 에이전트를 설치한 계정의 이메일입니다. 예를 들면
my-agent-sa@PROJECT_ID.또는user@example.com입니다. - OBJECT_ROLE: 소스 객체를 보관하는 경우
objectViewer를 지정하고 전송 후 소스 객체를 삭제하는 경우objectUser를 지정합니다.
REST API
요청을 인증할 액세스 토큰을 생성합니다.
gcloudCLI를 사용하는 경우 다음을 실행합니다.gcloud auth print-access-token
기존 버킷 IAM 정책(
GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam)을 가져오고 다음 바인딩을bindings배열에 추가한 후 병합된 정책을agent_source_policy.json로 저장합니다.{ "bindings": [ { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.objectCreator", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.OBJECT_ROLE", "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입니다. - OBJECT_ROLE: 소스 객체를 보관하는 경우
objectViewer를 지정하고 전송 후 소스 객체를 삭제하는 경우objectUser를 지정합니다.
curl를 통해 버킷 정책을 업데이트합니다.curl -X PUT --data-binary @agent_source_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: 소스 버킷의 이름입니다.
프로젝트 간 Cloud Storage 전송
다른 Google Cloud 프로젝트의 Cloud Storage 버킷 간에 객체를 전송하려면 소스 버킷과 대상 버킷 모두에서 전송을 만드는 프로젝트의 서비스 에이전트에 권한을 부여해야 합니다.
전송을 만드는 사용자 계정 또는 사용자 관리형 서비스 계정에는 전송 작업이 생성되는 프로젝트에 대한 권한만 필요합니다.
교차 프로젝트 전송에 대한 역할을 부여하려면 다음 안내를 따르세요.
- 전송을 실행할 프로젝트의 서비스 에이전트 이메일을 가져옵니다. 서비스 에이전트 이메일 찾기를 참조하세요.
- 소스 버킷에서 해당 서비스 에이전트에 다음 역할을 부여합니다.
- 스토리지 기존 버킷 리더(
roles/storage.legacyBucketReader) - 다음 객체 역할 중 하나:
- 소스 객체를 보관하는 경우 스토리지 객체 뷰어(
roles/storage.objectViewer) - 전송 후 소스 객체를 삭제하는 경우(
deleteObjectsFromSourceAfterTransfer) 스토리지 객체 사용자(roles/storage.objectUser) - 객체 ACL을 보존하는 경우 스토리지 객체 관리자(
roles/storage.objectAdmin)(ACL_PRESERVE). 전송 후 소스 객체 삭제도 지원합니다.
- 소스 객체를 보관하는 경우 스토리지 객체 뷰어(
- 스토리지 기존 버킷 리더(
- 대상 버킷에서 동일한 서비스 에이전트에 다음 역할을 부여합니다.
- 스토리지 기존 버킷 리더(
roles/storage.legacyBucketReader) - 스토리지 객체 사용자(
roles/storage.objectUser) 또는 객체 ACL을 보존하는 경우 스토리지 객체 관리자(roles/storage.objectAdmin)(ACL_PRESERVE)
- 스토리지 기존 버킷 리더(
대상 버킷 액세스 권한을 부여하는 방법에 대한 단계별 안내는 싱크에 대한 액세스 구성: Cloud Storage를 참조하세요.
조직 액세스 제한
조직에서 조직 정책 제약 조건을 적용한 경우 교차 프로젝트 서비스 에이전트 액세스를 허용하는지 확인합니다.
- 도메인 제한 공유(
constraints/iam.allowedPolicyMemberDomains): 버킷을 호스팅하는 프로젝트의 정책은 서비스 에이전트가 포함된 구성원 도메인을 허용해야 합니다. 도메인 제한을 참조하세요. - 프로젝트 간 서비스 계정 사용 중지(
constraints/iam.disableCrossProjectServiceAccountUsage): 이 제약 조건이 프로젝트 간 서비스 계정 액세스를 차단하지 않는지 확인합니다. 서비스 계정 제한을 참조하세요. - VPC 서비스 제어: 버킷이 서로 다른 서비스 경계에 속하는 경우 전송 통신을 허용하도록 인그레스 및 이그레스 규칙을 구성합니다. 클라우드 객체 스토리지 전송에 대한 VPC 서비스 제어 구성을 참조하세요.
세분화된 권한 참조
전송 유형을 선택하여 필요한 역할 및 권한을 확인합니다.
에이전트리스 전송
에이전트 없는 전송의 경우 Storage Transfer Service 서비스 에이전트에 권한을 부여해야 합니다.
| 권한 | 설명 |
|---|---|
storage.buckets.get |
서비스 에이전트가 버킷의 위치를 가져올 수 있게 합니다. |
storage.objects.list |
서비스 에이전트가 버킷의 객체를 나열할 수 있게 합니다. |
storage.objects.get |
서비스 에이전트가 버킷의 객체를 읽을 수 있게 합니다. |
storage.objects.delete |
서비스 에이전트가 버킷의 객체를 삭제할 수 있게 합니다. deleteObjectsFromSourceAfterTransfer이 true인 경우에 필요합니다. |
storage.objects.getIamPolicy |
소스 객체에서 ACL을 읽을 수 있습니다. 객체 ACL 보존(ACL_PRESERVE)이 사용 설정된 경우 필요합니다. |
storage.folders.liststorage.folders.get |
폴더를 나열하고 읽을 수 있습니다. 계층적 네임스페이스가 사용 설정된 버킷에서 전송할 때 필요합니다. |
에이전트 기반 전송
Cloud Storage 소스에서 에이전트 기반 전송의 경우 권한이 두 주 구성원 간에 분할됩니다.
서비스 에이전트: 버킷 메타데이터 및 위치를 확인하기 위한 버킷 수준 읽기 액세스 권한과 에이전트 전송 로그를 작성하기 위한 객체 생성 액세스 권한이 필요합니다.
전송 에이전트 계정: 전송 에이전트를 만드는 데 사용되는 서비스 계정 또는 사용자 계정입니다.
서비스 에이전트 권한
| 권한 | 설명 |
|---|---|
storage.buckets.get |
서비스 에이전트가 버킷 메타데이터 및 위치를 검사할 수 있게 합니다. |
storage.objects.create |
Cloud Storage에서 파일 시스템으로 전송할 때 서비스 에이전트가 에이전트 전송 로그를 소스 버킷에 쓸 수 있도록 허용합니다. |
전송 에이전트 계정 권한
| 권한 | 설명 |
|---|---|
storage.objects.list |
에이전트가 소스 버킷의 객체를 나열할 수 있습니다. |
storage.objects.get |
에이전트가 소스 버킷에서 객체를 읽을 수 있습니다. |
storage.objects.delete |
deleteObjectsFromSourceAfterTransfer가 사용 설정된 경우 에이전트가 소스 객체를 삭제할 수 있습니다. |
storage.folders.liststorage.folders.get |
계층적 네임스페이스가 사용 설정된 버킷에서 전송할 때 에이전트가 폴더를 나열하고 읽을 수 있습니다. |
다음 단계
대상에 대한 액세스를 구성해야 합니다.