사용자 관리 서비스 계정에 서비스 에이전트 권한 위임

에이전트 없는 전송의 경우 Storage Transfer Service는 기본적으로 서비스 에이전트를 사용하여 소스와 대상 간에 데이터를 전송합니다. Cloud Storage 버킷에 액세스할 수 있는 권한을 서비스 에이전트에 부여합니다.

프로젝트 내의 모든 전송에서 동일한 Storage Transfer Service 서비스 에이전트를 사용하므로 모든 전송에 관련된 모든 버킷에 대한 권한이 있어야 합니다.

또는 여러 사용자 관리형 서비스 계정에 버킷 권한을 할당할 수도 있습니다. 이러한 사용자 관리 서비스 계정에는 특정 소스 및 대상 버킷에 대한 권한이 부여되며 특정 사용자 계정 (전송 작업을 생성하거나 트리거하는 계정)으로 제한됩니다.

시나리오 예시

다음 시나리오는 서비스 에이전트와 사용자 관리 서비스 계정을 사용하는 다양한 권한 옵션을 보여줍니다.

각 섹션을 펼쳐 세부정보를 확인합니다.

시나리오 1: 서비스 상담사만 해당

이 시나리오에서는 모든 권한이 서비스 에이전트에 부여됩니다.

  • 서비스 에이전트는 버킷 A, B, C, D에 대한 쓰기 권한을 부여받습니다.

전송 작업을 만들 권한이 있는 모든 사용자는 버킷 A, B, C, D로 또는 버킷 A, B, C, D에서 전송할 수 있습니다.

이는 Storage Transfer Service 사용자가 모든 버킷의 데이터에 대한 신뢰할 수 있는 사용자이고 잘못된 버킷으로 또는 잘못된 버킷에서 데이터를 이동하지 않도록 전송 작업을 올바르게 구성할 수 있는 경우에 적합합니다.

시나리오 2: 사용자 관리형 서비스 에이전트만 해당

이 시나리오에서는 모든 권한이 사용자 관리 서비스 계정에 부여됩니다.

  • 사용자 관리형 서비스 계정 1에 버킷 A 및 B에 대한 권한이 부여됩니다.
  • 사용자 관리 서비스 계정 2에 버킷 C 및 D에 대한 권한이 부여됩니다.

또한 다음 사항에 유의하세요.

  • 사용자 알파에게 서비스 계정 1에 대한 액세스 권한이 부여됩니다.
  • 사용자 브라보에게 서비스 계정 2에 대한 액세스 권한이 부여됩니다.
  • 사용자 찰리에게 서비스 계정 1과 2에 대한 액세스 권한이 부여됩니다.

이 경우 다음 단계를 수행하세요.

  • 알파는 버킷 A와 B 간에만 전송할 수 있습니다.
  • Bravo는 버킷 C와 D 간에만 전송할 수 있습니다.
  • 찰리는 버킷 A와 B, C와 D 간에만 전송할 수 있습니다.
  • 찰리는 A와 C, A와 D, B와 C, B와 D 간에 트랜스퍼할 수 없습니다.

시나리오 3: 혼합 권한

이 시나리오에서는 프로젝트에 서비스 에이전트 권한과 사용자 관리형 서비스 계정 권한이 혼합되어 있습니다.

  • 서비스 에이전트는 버킷 A 및 B에 대한 쓰기 권한을 부여받습니다.
  • 사용자 관리형 서비스 계정 1에 버킷 C에 대한 읽기 전용 권한과 버킷 D에 대한 쓰기 권한이 부여됩니다.
  • 사용자 알파에게 사용자 관리 서비스 계정 1에 대한 액세스 권한이 부여됩니다.

이 경우 다음 단계를 수행하세요.

  • 전송 작업을 만들 권한이 있는 모든 사용자는 버킷 A와 B 간에 전송할 수 있습니다. 버킷 C 또는 D로 또는 버킷 C 또는 D에서 이전할 수 없습니다.
  • 사용자 알파는 버킷 A와 B 간에 전송할 수 있습니다.
  • 알파는 버킷 C에서 버킷 D로 이체할 수 있습니다.
  • 알파는 버킷 C에서 버킷 A 또는 B로 전송할 수 없습니다.

구현 개요

구현은 다음과 같습니다.

  • 사용자 관리형 서비스 계정을 만들거나 기존 계정을 사용합니다.
  • 다음과 같은 권한을 부여합니다.
    • 사용자가 사용자 관리 서비스 계정에 액세스할 수 있습니다.
    • 서비스 에이전트가 사용자 관리 서비스 계정에서 액세스 토큰을 생성합니다.
    • 사용자 관리 서비스 계정이 버킷에 액세스할 수 있도록 합니다.
  • 사용자가 사용자 관리 서비스 계정을 지정하는 전송 작업을 만듭니다.
  • Storage Transfer Service는 사용자가 서비스 계정에 올바른 권한을 가지고 있는지 확인합니다. 올바른 권한이 부여되지 않으면 전송 작업을 만들 수 없습니다.
  • 서비스 에이전트는 사용자 관리 서비스 계정을 대신하여 OAuth 토큰을 생성합니다. OAuth 토큰을 사용하면 Storage Transfer Service가 전송에 관련된 버킷에 액세스할 수 있습니다.
  • 전송 작업이 실행됩니다.
  • OAuth 토큰은 단기 토큰이며 만료됩니다. 토큰이 만료될 때 이전 작업이 진행 중인 경우 Storage Transfer Service에서 새 토큰을 생성하고 이전을 계속합니다.

권한 위임 설정하기

안내에 따라 사용자 관리 서비스 계정에 대한 서비스 상담사 액세스 권한을 위임합니다.

요구사항

  • 새 사용자 관리 서비스 계정을 만들려면 프로젝트에 서비스 계정 만들기 (roles/iam.serviceAccountCreator) 역할이 필요합니다.
  • 사용자 관리 서비스 계정에 대한 사용자 및 서비스 상담사의 액세스 권한을 부여하려면 사용자 관리 서비스 계정 또는 프로젝트에 대한 서비스 계정 관리자(roles/iam.serviceAccountAdmin) 역할이 필요합니다.

사용자 관리 서비스 계정 만들기 또는 식별

새 사용자 관리 서비스 계정을 만들거나 기존 계정을 사용할 수 있습니다.

  • 사용자 관리 서비스 계정을 만들려면 서비스 계정 만들기의 안내를 따르세요.

  • 기존 사용자 관리형 서비스 계정을 사용하려면 다음 형식의 이메일 주소가 필요합니다.

    SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

서비스 계정이 전송 작업과 다른 프로젝트에 있는 경우 프로젝트 간 서비스 계정 연결 사용 설정을 참고하세요.

사용자에게 액세스 권한 부여

사용자 계정에 새 사용자 관리 서비스 계정에 대한 액세스 권한을 부여하고 서비스 계정 사용자 역할 (roles/iam.serviceAccountUser)을 할당합니다. 사용자 계정은 전송 작업을 만들거나 업데이트하는 데 사용되는 계정입니다.

Google Cloud 콘솔

  1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

    서비스 계정으로 이동

  2. 프로젝트를 선택합니다.

  3. 사용자 관리형 서비스 계정의 이메일 주소를 클릭합니다.

  4. 권한 탭을 선택합니다.

  5. 액세스 권한 부여를 클릭합니다.

  6. 사용자의 이메일 주소를 입력합니다. 예를 들면 user1@example.com입니다.

  7. 역할 드롭다운 목록에서 서비스 계정 사용자를 선택합니다.

  8. 저장을 클릭합니다. 주 구성원에게 서비스 계정에 대한 역할이 부여됩니다.

gcloud

주 구성원에게 역할을 부여하려면 add-iam-policy-binding 명령어를 실행합니다.

gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \
  --member=PRINCIPAL --role=roles/iam.serviceAccountUser

다음 변수를 바꿉니다.

  • USER_MANAGED_SERVICE_ACCOUNT_EMAIL: 사용자 관리형 서비스 계정의 이메일 주소(SA_NAME@PROJECT_ID.iam.gserviceaccount.com 형식)입니다.
  • PRINCIPAL: 전송 작업을 실행하는 사용자의 이메일 주소로, user:name@example.com 형식입니다.

서비스 에이전트에 액세스 권한 부여

서비스 에이전트가 사용자 관리 서비스 계정에서 액세스 토큰을 생성할 수 있도록 하려면 서비스 에이전트에 사용자 관리 서비스 계정에 대한 액세스 권한을 부여하고 서비스 계정 토큰 생성자 역할 (roles/iam.serviceAccountTokenCreator)을 할당합니다.

액세스 권한을 부여하려면 서비스 에이전트의 이메일 주소가 필요합니다. 서비스 에이전트의 이메일을 찾으려면 다음 단계를 따르세요.

  1. googleServiceAccounts.get 참조 페이지로 이동하세요.

    이 메서드 사용해 보기라는 제목의 대화형 패널이 열립니다.

  2. 패널의 요청 매개변수프로젝트 ID를 입력합니다. 여기에서 지정하는 프로젝트는 Storage Transfer Service를 관리하는 데 사용하는 프로젝트여야 합니다.

  3. 실행을 클릭합니다.

    서비스 에이전트의 이메일이 accountEmail 값으로 반환됩니다. project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com 형식을 사용합니다.

그런 다음 서비스 에이전트에 사용자 관리 서비스 계정에 대한 액세스 권한을 부여합니다.

Google Cloud 콘솔

  1. Google Cloud 콘솔에서 서비스 계정 페이지로 이동합니다.

    서비스 계정으로 이동

  2. 프로젝트를 선택합니다.

  3. 사용자 관리형 서비스 계정의 이메일 주소를 클릭합니다.

  4. 권한 탭을 선택합니다.

  5. 액세스 권한 부여를 클릭합니다.

  6. 서비스 에이전트의 이메일 주소를 입력합니다.

  7. 역할 드롭다운 목록에서 서비스 계정 토큰 생성자를 선택합니다.

  8. 저장을 클릭합니다. 주 구성원에게 서비스 계정에 대한 역할이 부여됩니다.

gcloud

주 구성원에게 역할을 부여하려면 add-iam-policy-binding 명령어를 실행합니다.

gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \
  --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/iam.serviceAccountTokenCreator

다음 변수를 바꿉니다.

  • USER_MANAGED_SERVICE_ACCOUNT_EMAIL: 사용자 관리형 서비스 계정의 이메일 주소(SA_NAME@PROJECT_ID.iam.gserviceaccount.com 형식)입니다.
  • SERVICE_AGENT_EMAIL: 서비스 상담사의 이메일 주소입니다.

사용자 관리형 서비스 계정에 버킷 권한 부여

서비스 에이전트 대신 Google 관리 서비스 에이전트 권한에 나열된 권한을 사용자 관리 서비스 계정에 부여합니다.

사용자 관리형 서비스 계정을 사용하여 전송 작업 만들기

올바른 권한을 부여한 후 새 전송 작업을 만들 때 사용자 관리형 서비스 계정을 지정할 수 있습니다.

Google Cloud 콘솔

안내에 따라 전송을 만듭니다. 전송 작업을 완료하기 전에 다음을 실행합니다.

  1. 설정 선택 페이지에서 서비스 계정 유형 섹션을 찾습니다.
  2. 사용자 관리 서비스 계정을 선택합니다.
  3. SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com 형식을 사용하여 사용자 관리형 서비스 계정 이메일을 입력합니다.
  4. 만들기를 클릭하여 전송 작업을 만듭니다.

REST API

사용자 관리 서비스 계정을 transferJobs.create 요청의 serviceAccount 필드 값으로 지정합니다.

값은 projects/-/serviceAccounts/ACCOUNT_EMAIL_OR_UNIQUEID 형식을 사용해야 합니다.

문자열에서 서비스 계정 이메일(SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com) 또는 고유 ID (123456789012345678901)가 허용됩니다. - 와일드 카드 문자는 필수입니다. 이 문자를 프로젝트 ID로 바꾸면 안 됩니다.

예를 들면 다음과 같습니다.

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "A transfer using a user-managed service account for bucket permissions",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"serviceAccount": "projects/-/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
"transferSpec": {
    ...
  }
}