서비스 계정을 사용하여 Google Drive에서 만든 파일의 소유자는 서비스 계정입니다.
11700 단어 Google Drivegoogleapitech
그 과정에서 조금 틀린 부분이 있어서 필기 등을 했다.또 개인 계정(편집)을 통해 이뤄진 것으로 확인됐다.
잘못된 행동
아래의 느낌으로 파일을 서비스 계정에서 제 개인 콘서트에 업로드합니다.
▶ 그림1-1 잘못된 행동
flowchart LR sa["service account"] -- upload ---> file subgraph My Drive file[("file")] -. parent .-> entry subgraph Shared Folder entry(( )) %% style entry fill:#fff end end entry -- browse --- user
실제 행동
実際は 図 2-1 のように「ファイルはサービスアカウントのマイドライブへアップロードされ、親フォルダーの 1 つとして共有フォルダーが設定される」という挙動になりました。
これは「アップロードされたファイルのオーナーがサービスアカウントになるため、ファイルの実体はサービスアカウントのマイドライブに作成される」ということかと思われます。
▼ 図 2-1 実際の挙動
この場合、ファイルは共有された状態なのでユーザー側から削除してもサービスアカウントのマイドライブにはファイルはそのまま残ります(図 2-2)。
▼ 図 2-2 親フォルダーの設定のみ削除
확인
今回は gdrive とサービスアカウントの鍵ファイルを利用することで確認してみます。なお、プロジェクト内の Google Drive API の有効化やサービスアカウントの設定などは割愛します[1]。
공유 설정
通常ユーザーからウェブ UI などでフォルダーを作成しサービスアカウントと共有します(図 3-1)。
図 3-1 フォルダーの共有設定にサービスアカウントを追加
업로드
gdrive の upload
コマンドでテキストファイルを共有されたフォルダーへアップロードします(図 3-2)。
▼ 図 3-2 ファイルをアップロード
$ cat test.txt
テストのファイル
$ ./gdrive --service-account gha-creds-test-temp.json -c . upload --parent "1M_ehFhKd7A-ppMimBYfkYSGHr-LcoAID" --mime application/vnd.google-apps.document test.txt
Uploading test.txt
Uploaded 12Si2whpEg-Y0216SP_BKZe2ihQzgLt9McmQBoKEIJ9I at 272.0 B/s, total 1.0 KB
웹 UI에서 확인한 후 서비스 계정은 소유자(그림3-3)이다.또 이 상태에서 액세스 관리에서는 파일을 공유하지만 알림 메일은 발송되지 않았다.그림3-3 상세 라벨의 소유자는 서비스 계정으로 표시
삭제
웹 UI로 삭제해 보세요(그림3-4).
그림 3-4 파일 삭제
사용자 측 폴더에서 삭제[2]되지만 gdrive 소유자(서비스 계정) 측의 개인 콘서트를 확인할 때 파일은 그대로 유지된다(그림3-5).
▶ 그림 3-5 사용자가 삭제한 파일 남기기
$ ./gdrive --service-account gha-creds-test-temp.json -c . list -q "trashed=false"
Id Name Type Size Created
12Si2whpEg-Y0216SP_BKZe2ihQzgLt9McmQBoKEIJ9I test doc 1.0 KB 2022-03-22 15:02:16
1M_ehFhKd7A-ppMimBYfkYSGHr-LcoAID sample dir 2022-03-22 14:44:58
소유자 측에서 삭제하면 완전히 사라진다(그림3-6).▶ 그림 3-6 소유자 측 삭제
$ ./gdrive --service-account gha-creds-test-temp.json -c . delete 12Si2whpEg-Y0216SP_BKZe2ihQzgLt9McmQBoKEIJ9I
Deleted 'test'
$ ./gdrive --service-account gha-creds-test-temp.json -c . list -q "trashed=false"
Id Name Type Size Created
1M_ehFhKd7A-ppMimBYfkYSGHr-LcoAID sample dir 2022-03-22 14:44:58
!서비스 계정을 삭제해도 삭제가 가능하지만, 서비스 계정인 내 콘서트 내 파일도 모두 사라진다.
소유자를 자신으로 설정(일반 사용자)
서비스 계정이 소유자라고 해서 곤란하지는 않지만, 평소 홈페이지 UI에서 사용하는 파일이라면 처리가 잘 안 되는 것 같다[3].따라서 소유자를 자신으로 만들고 서비스 계정에서 편집할 수 있는 방법을 고려해 보자.
직접 파일 만들기
자주 다시 만들지 않으면'웹 UI 등에서 미리 파일을 만들고 공유 설정을 통해 서비스 계정을 편집'으로 처리할 수 있다.프로그램을 따로 설정하지 않으면 수동으로 처리할 수 있지만 프로그램은 간단하다.
transferOwnersip 사용
자동화를 고려하면 Google Drive API를 사용하려고 합니다.이 경우Permissions.create는
transferOwnership
를 통해 소유자를 변경할 수 있다.이것은 gdrive면 방법이 불분명하기 때문에 자체 제작한 도구guratan로 확인한다.
$ ./gdrive --service-account gha-creds-test-temp.json -c . upload --parent "1M_ehFhKd7A-ppMimBYfkYSGHr-LcoAID" --mime application/vnd.google-apps.document test.txt
Uploading test.txt
Uploaded 1h8NZ3TkKDtXw7Nux3FWgZVe7YM8HO9rChRtBiTZAZ8o at 322.0 B/s, total 1.0 KB
$ GOOGLE_APPLICATION_CREDENTIALS=./gha-creds-test-temp.json npx guratan share --file-id 1h8NZ3TkKDtXw7Nux3FWgZVe7YM8HO9rChRtBiTZAZ8o --type user --role owner --email-address xxxxxxxxxxx --transfer-ownership
명령을 실행한 후 다음과 같이 소유자를 변경합니다.그림 4-1 상세 태그의 소유자는
또 이 방법을 사용하면 확인된 메일이 발송되지 않아 소유자가 갑자기 달라진다.그리고 그림4-2의 메일을 보냅니다. (API 옵션으로 이 메일을 보내야 합니다.)
그림4-2 변경된 우편물
그 영향인지 모르겠지만 제한이 있는 것 같아요.
text/plain
나 application/pdf
등에서 오류가 발생할 수 있다(그림4-3).이 근처에 뭐든지
moveToNewOwnersRoot
조합이 있으면 몰래'.ほにゃららrc
의 자동실행용 파일을 삽입할 수 있겠지[4].▶ 그림 4-3 text/plain 표시 오류
$ ./gdrive --service-account gha-creds-test-temp.json -c . upload --parent "1M_ehFhKd7A-ppMimBYfkYSGHr-LcoAID" --mime text/plain test.txt
Uploading test.txt
Uploaded 1WONynFnpVHv1k0J_v1tDx5fg1_9t-LA4 at 17.0 B/s, total 25.0 B
$ GOOGLE_APPLICATION_CREDENTIALS=./gha-creds-test-temp.json npx guratan share --file-id 1WONynFnpVHv1k0J_v1tDx5fg1_9t-LA4 --type user --role owner --email-address [email protected] --transfer-ownership
Error: [{"domain":"global","reason":"invalidSharingRequest","message":"Bad Request. User message: \"You can't change the owner of this item.\""}]
위에서 설명한 대로 제한이 있으므로 모든 경우에 적용할 수 없지만 파일 종류에 문제가 없으면 자동화할 수 있을 것 같습니다.!
누구에게나 갑자기 사장이 될 수 있기 때문에 변경 대상을 지정할 때 주의가 필요하다.
!
서비스 계정이 편집이 된 후에도'소유자가 된 사용자로 변경(실질적으로 아무것도 하지 않음)'할 수 있다.편리해 보이지만 "(실제로는 아무것도 하지 않고) 매번 변경된 알림 메일을 보낸다"는 점도 주의해야 한다.
기타
편집에 따라 앞에서 인용한 바와 같이 소유자의 변경이 아니라 드라이브와 권한을 공유하는 의뢰 등 방법이다.
끝말
서비스 계정의 특성을 고려하면 소유자가 되는 것은 자연스러운 일이지만, 내 콘서트 폴더에 자동으로 파일을 추가하면 일반적인 파일처럼 처리하기 쉽다.
특히 삭제는'삭제된 줄 알았는데 서비스 계정에 남는 내 콘서트'또는'서비스 계정을 삭제하면 완전히 사라질 것'으로 바뀌므로 주의해야 한다.
각주
스크랩에 간단한 필기가 있다.https://zenn.dev/hankei6km/scraps/f786cd2df1073e ↩︎
'파일 삭제' 와 같이 토스터는 사용자의 쓰레기통으로 이동하지 않습니다.↩︎
잘못 삭제하면 이용자 쪽 쓰레기통으로 이동하지 않기 때문에 조금 번거롭다 등.↩︎
슬그머니 공유된 폴더에 올리면 개인적인 느낌도 비슷한데(여기서 추가 알림 메일은 보내지 않음) 미리 사용자 설정이 있어서 OK 처리인가요?↩︎
Reference
이 문제에 관하여(서비스 계정을 사용하여 Google Drive에서 만든 파일의 소유자는 서비스 계정입니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/hankei6km/articles/owner-of-file-that-is-uploaded-by-service-account텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)