파이썬 자동설계프로젝트

구글 gmail 개인계정으로는 서비스계정을 통한 소유자 변경이 어렵군요.

mylife365 2024. 11. 25. 15:54

기존의 개인 **Gmail 계정(@gmail.com)**을 Google Workspace 계정으로 직접 전환할 수는 없습니다. Google Workspace는 조직(회사, 학교, 비영리 단체 등)을 위해 설계된 서비스이기 때문에, 개인 계정과는 별개의 서비스로 운영됩니다.

그러나 Google Workspace 계정을 새로 만들고 기존 Gmail 데이터를 옮기는 방법은 가능합니다. 아래에 자세히 설명드리겠습니다.


1. Google Workspace 계정을 새로 생성

Google Workspace 계정을 설정하면 원하는 도메인(예: @company.com)을 사용하여 계정을 생성할 수 있습니다.

절차: Google Workspace 계정 생성

  1. Google Workspace 공식 사이트로 이동.
  2. Google Workspace 가입:
    • 무료 체험 시작 버튼을 클릭.
    • 조직 이름, 연락처 정보, 도메인을 입력합니다.
    • 도메인이 없다면 Google에서 구매 가능.
  3. 관리자 계정 생성:
    • 관리자로 사용할 이메일 계정을 생성합니다(예: admin@yourdomain.com).
  4. 계정 설정 완료:
    • Google Workspace 설정 페이지에서 이메일, Google Drive 등을 활성화합니다.

2. 기존 Gmail 데이터를 Google Workspace로 이전

새로 만든 Google Workspace 계정으로 기존 Gmail 데이터(이메일, 파일, 캘린더 등)를 이전할 수 있습니다.

데이터 이전 방법

  1. Google Workspace 관리자 도구 사용:
  2. Google Takeout 사용:
    • 기존 Gmail 데이터를 내보내고, Workspace 계정으로 가져옵니다.
      • Google Takeout에서 데이터 다운로드.
      • 새 Workspace 계정으로 파일 업로드.

3. 개인 데이터 보호 및 도메인 고려

  • Google Workspace 계정을 생성하면 해당 계정은 조직 도메인 기반(@company.com)으로 운영됩니다.
  • 개인 데이터를 Workspace 계정으로 옮기는 경우, 해당 계정이 조직 관리자의 통제 하에 있다는 점을 고려하세요.

4. Workspace 계정을 사용할 수 없는 경우의 대안

만약 Google Workspace 계정을 만들 수 없거나 개인 Gmail 계정만 사용할 수 있는 경우, 다음 대안을 활용하세요:

  1. 서비스 계정을 활용한 새로운 데이터 업로드:
    • 기존 데이터를 다운로드한 후, 서비스 계정을 통해 Google Drive에 재업로드.
    • 서비스 계정이 업로드한 파일은 자동으로 서비스 계정 소유가 됩니다.
  2. 공유 방식으로 서비스 계정에 위임:
    • 개인 Gmail 계정에서 서비스 계정으로 파일을 공유하고, 편집 권한을 부여한 뒤 파일 관리 작업 수행.

Workspace로의 전환 여부

Workspace 계정은 개인 Gmail 계정을 대체하는 것이 아니라, 별도의 계정으로 만들어 사용해야 합니다. 이를 통해 회사나 조직 차원에서 강력한 데이터 관리 및 권한 설정을 활용할 수 있습니다.

추가 질문이나 도움이 필요하다면 언제든 알려주세요! 😊

 

아래는 Google Drive API를 사용하여 특정 폴더 내 모든 파일의 소유자를 서비스 계정으로 변경하는 PHP 코드입니다. 이 코드는 주어진 폴더를 대상으로 모든 파일의 소유자를 변경하는 작업을 수행합니다.


코드

<?php
require_once $_SERVER['DOCUMENT_ROOT'] . '/session.php'; // 세션 파일 포함
require_once $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/lib/mydb.php';

// Google Drive 서비스 계정 인증 설정
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $_SERVER['DOCUMENT_ROOT'] . '/tokens/mytoken.json');
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->setScopes([Google_Service_Drive::DRIVE]);
$service = new Google_Service_Drive($client);

// 서비스 계정 이메일 (JSON 파일에서 확인)
$serviceAccountEmail = 'mystorage@cryptic-net-441502-n7.iam.gserviceaccount.com';

// 폴더 ID 설정
$folderId = 'YOUR_FOLDER_ID'; // 대상 폴더 ID

/**
 * 대상 폴더 내 모든 파일 ID 가져오기
 */
function listFilesInFolder($service, $folderId) {
    $fileIds = [];
    $pageToken = null;

    do {
        $response = $service->files->listFiles([
            'q' => "'$folderId' in parents and trashed=false",
            'fields' => 'nextPageToken, files(id, name)',
            'pageToken' => $pageToken,
        ]);

        foreach ($response->files as $file) {
            $fileIds[] = $file->id;
        }

        $pageToken = $response->nextPageToken;
    } while ($pageToken);

    return $fileIds;
}

/**
 * 파일의 소유자를 서비스 계정으로 변경
 */
function transferOwnership($service, $fileId, $serviceAccountEmail) {
    try {
        // 서비스 계정에 소유자 권한 부여
        $newPermission = new Google_Service_Drive_Permission();
        $newPermission->setType('user');
        $newPermission->setRole('owner'); // 소유자 설정
        $newPermission->setEmailAddress($serviceAccountEmail);

        $service->permissions->create($fileId, $newPermission, ['transferOwnership' => true]);
        echo "소유권 이전 성공: $fileId\n";
    } catch (Exception $e) {
        echo "소유권 이전 실패 (파일 ID: $fileId): " . $e->getMessage() . "\n";
    }
}

/**
 * 메인 실행 로직
 */
try {
    echo "폴더 ID: $folderId\n";
    echo "소유권 이전 시작...\n";

    // 폴더 내 모든 파일 가져오기
    $fileIds = listFilesInFolder($service, $folderId);

    foreach ($fileIds as $fileId) {
        transferOwnership($service, $fileId, $serviceAccountEmail);
    }

    echo "폴더 내 모든 파일의 소유권 이전 완료.\n";
} catch (Exception $e) {
    echo "오류 발생: " . $e->getMessage() . "\n";
}

코드 설명

  1. 서비스 계정 설정:
    • putenv를 사용하여 서비스 계정 JSON 파일 경로를 지정합니다.
    • mystorage@cryptic-net-441502-n7.iam.gserviceaccount.com은 서비스 계정의 이메일입니다.
  2. listFilesInFolder 함수:
    • 폴더 ID를 기준으로 해당 폴더에 포함된 모든 파일 ID를 가져옵니다.
    • trashed=false 조건을 추가하여 삭제된 파일은 제외합니다.
  3. transferOwnership 함수:
    • Google Drive API의 permissions.create를 사용하여 서비스 계정을 소유자로 설정합니다.
    • transferOwnership=true를 설정하여 소유권 이전을 수행합니다.
  4. 폴더 내 모든 파일 처리:
    • listFilesInFolder로 파일 ID를 가져오고, transferOwnership 함수로 하나씩 소유자를 변경합니다.

실행 방법

  1. 폴더 ID 설정:
    • 소유자를 변경할 Google Drive 폴더의 ID를 $folderId에 입력합니다.
    • Google Drive 웹 UI에서 폴더 링크(URL)에서 ID를 복사할 수 있습니다.
      https://drive.google.com/drive/folders/
      
  2. 서비스 계정 설정 확인:
    • 서비스 계정이 JSON 파일에 있는 대로 설정되었는지 확인합니다.
    • 서비스 계정 이메일을 Google Drive 폴더와 공유하고 편집자 권한을 부여합니다.
  3. PHP 코드 실행:
    • PHP 서버에서 실행하여 소유권 이전 작업을 수행합니다.

주의사항

  1. Google Workspace 계정 필수:
    • 소유권 이전은 Google Workspace 계정(회사/학교 계정)에서만 가능합니다.
    • 개인 Google 계정(@gmail.com)은 소유권 이전을 지원하지 않습니다.
  2. 서비스 계정 권한 필요:
    • 서비스 계정이 파일에 접근할 수 있도록 폴더와 공유되고 편집 권한을 가지고 있어야 합니다.
  3. 폴더 소유권은 변경 불가능:
    • Google Drive는 폴더 자체의 소유권 변경을 지원하지 않습니다. 폴더 내 파일의 소유권만 변경 가능합니다.

위 코드를 실행한 후, 결과나 발생하는 문제를 알려주시면 추가로 도와드리겠습니다.

반응형