구글 드라이브 API SA(서비스 계정) 제한과 우회 방법
<AutoRclone로 인한 Policy Violation> |
Service account 사용에 제한을 걸기 시작한 구글
Policy Violation
Action required: Critical problem with your Google Cloud/APIs project “프로젝트 이름” (id: “프로젝트 ID“)
얼마 전부터 구글은 AutoRclone과 Service account(SA: 서비스 계정)를 사용해 과도한 트래픽을 생성하는 계정에 대해 API 사용을 제한하기 시작했다. 이런 경고를 받은 구글 계정은 Keep, 이메일, 유튜브, 구글 드라이브 등의 다른 구글 서비스를 사용하는 데는 문제가 없지만, 항소가 받아지기 전까진 구글 드라이브 API를 사용할 수 없다(테스트 결과 정확히는 서비스 계정(SA)을 사용할 수 없는 것으로 여겨진다). 새 프로젝트를 생성해도 기존에 만들어진 SA를 사용할 수 없고, 새 SA를 생성할 수도 없다. 이 문제에서 벗어나는 방법은 새 구글 계정을 만들어 「구글 공유 드라이브 무료 동기화 유틸 | AutoRclone」 과정을 다시 반복하는 것이다.
어찌 되었든, AutoRclone은 아직 잘 작동한다.
문제는 허용된 일일 트래픽이 얼마 정도냐 하는 것이다. 기존엔 구글 계정당, 그리고 SA당 750GB 트래픽 제한을 두었으며 이 제한을 초과하면 다운로드가 막히는 정도에서 그쳤다. 이번 사태처럼 엄격한 조치를 취하지는 않았다. 지금도 SA당/계정당 750GB 트래픽 제한은 변함없어 보이지만, AutoRclone처럼 여러 SA를 사용해 누적 트래픽이 구글이 설정한 제한에 도달하면 예전처럼 단순히 다운로드가 막히는 선에서 그치는 것이 아니라 Policy Violation 메일과 함께 API 사용이 금지된다.
내가 두 번(그러니까 두 계정)의 경고 메일 중 첫 번째 메일을 받은 날 AutoRclone으로 복사한 자료의 양이 대략 19TB였으며 이것은 두 계정을 사용한 결과다. 한 계정은 이날 경고받았고, 다른 계정은 다음 날 AutoRclone을 몇 번 더 사용하고 나서야 경고받았다.
정확한 양은 유추하기 어렵지만, 대충 짐작해보면 구글이 허용한 최댓값은 최대 19TB는 넘지 않을 것이며 (경고 이후 몇 번의 테스트를 통해 알게 된) 허용한 최솟값은 최소 4~5TB 정도는 되는 것 같다(일일 기준). 아마 많은 사람의 경험이 쌓이다 보면 정확한 값이 계산될 것이다.
참고로 오늘 논의하는 팁은 아직 검증되지 않았다는 것을 명심하자!
항소 결과는 「구글 클라우드 API 정책 위반 이후」 글 참고!
서비스 계정 사용 제한 우회하기
<대충 이런 식으로 Service account 제한을 우회할 수 있다> |
현재는 새 구글 계정 두 개를 만들어 각각 서비스 계정 다섯 개씩만 만들어 사용하는 중이다. 그러다 새로운 사실을 알게 되었다. 내 구글 공유 드라이브에 새 구성원(멤버)을 추가하여 접근 권한을 부여하듯 다른 구글 계정에 서비스 계정 사용 권한을 부여할 수 있다는 사실이다.
구글 계정 A: 계정 A / 구글 계정 B: 계정 B
계정 A의 SA: A-SA(5개) / 계정 B의 SA: B-SA(5개)
라고 한다면, B-SA에 대한 액세스 권한을 계정 A에 부여하면, 계정 A는 A-SA와 더불어 B-SA도 사용할 수 있다. 위와 같은 상황에선 계정 A는 총 10개의 SA를 사용할 수 있다는 말이다.
만약 (무료 계정 기준) 구글 계정당 5개의 SA를 사용하는 것이 안전하다면, 구글 계정 20개를 만들고 각각의 구글 계정에 SA를 다섯 개씩 만든 다음 [Manage Access(액세스 관리)] 메뉴를 이용해 계정 A에 액세스 권한을 부여하면, 계정 A는 예전처럼 SA 100개를 사용할 수 있다. 물론 구글 계정 20개를 만드는 것은 쉽지 않지만, 불가능한 것도 아니다. AutoRclone으로 대량의 자료를 복사해야 하는 사람이라면 틈틈이 구글 계정을 만들어놓아야 할 것이다.
이와 관련해서 간단한 테스트를 했다.
[계정 A + A-SA]를 사용한 AutoRclone으로 자료를 복사했을 때와 [계정 A + B-SA]를 사용한 AutoRclone으로 자료를 복사했을 때 Google Drive API 메뉴에서 제공하는 [측정항목]을 비교하는 간단한 실험이었다.
[계정 A + A-SA]를 사용한 AutoRclone으로 자료를 복사했을 때(위 그래프)는 당연히 계정 A에서 트래픽이 감지되었다. 반면에 [계정 A + B-SA]를 사용한 AutoRclone으로 자료를 복사했을 때(아래 그래프)는 계정 A가 아니라 계정 B에서 트래픽이 감지되었다. 즉, 구글 드라이브 API에서의 트래픽 계산은 계정(혹은 프로젝트) 단위 측정되는 것이 아니라 SA에 따라 측정되는 것으로 보인다.
그렇다면 내가 제안한 방법대로 서비스 계정 제한을 우회할 수 있을 것 같다. 실례로 [경고받은 계정 + A-SA(or B-SA) = AutoRclone 정상 작동]을 확인할 수 있었다. 즉, 새 구글 계정의 새 SA에 대한 액세스 권한을 경고받은 계정에 부여하면, 경고받은 계정도 새 SA를 사용해 AutoRclone을 사용할 수 있다는 말이다.
이번에는 [할당량]을 살펴보자.
[계정 A + A-SA]를 사용한 AutoRclone으로 자료를 복사했을 때(위 그래프)는 당연히 계정 A의 할당량이 소비되었고, 반면에 [계정 A + B-SA]를 사용한 AutoRclone으로 자료를 복사했을 때(아래 그래프)는 예상할 수 있듯 계정 B의 할당량이 소비되었다. 할당량의 차이는 파일 복사 수 8개(A-SA)와 31(B-SA)개의 차이에서 오는 것이다.
두 복사 작업(8개와 31개)을 모두 계정 A에서 처리했지만, 결과적으로 계정 B의 SA와 트래픽을 분담하는 결과가 되었다.
서비스 계정 액세스 관리
서비스 계정 액세스 관리는 Google Cloud Platform > IAM > Service ccounts(서비스 계정)에서 할 수 있다. 액세스 관리를 설정할 서비스 계정을 선택한 상태에서,
[MANAGE ACCESS(액세스 관리)] > [ADD PRINCIPAL(구성원 추가)]
메뉴에서 선택된 SA에 접근하길 원하는 구글 계정을 추가하면 된다. 나 같은 경우 Role은 Owner(소유자)로 설정했다.
새로 만든 서비스 계정은 [새 키]를 만들어야 사용할 수 있다. 여기서 새 키를 생성하면 AutoRclone의 [accounts] 폴더에 넣어 사용하는 json 파일을 내려받을 수 있다.
서비스 계정에 액세스 권한만 부여한다고 해서 AutoRclone에서 사용할 수 있는 것은 아니다. 위에서 받은 json 파일을 수정해야 한다.
json 파일을 열어 "project_id" 값을 이 서비스 계정을 사용하게 될 프로젝트 이름으로 변경해야 한다.
비록 보잘 것 없지만 광고 수익(Ad revenue)은 블로거의 콘텐츠 창작 의욕을 북돋우는 강장제이자 때론 하루하루를 이어주는 즐거움입니다
이걸 해결해주시네요. 감사드립니다.
답글삭제다른 분들도 되는지 모르겠네요
삭제정말 대단하십니다.... 감탄만 나오네요
답글삭제그냥 우연히 발견했을 뿐입니다. 그나저나 다른 분들도 잘 되었으면 하빈다.
삭제