GCE에서 'AccessDeniedException : 403 Insufficient Permission'을 반환하는 gsutil 사본
SSH를 통해 GCE 인스턴스에 로그인했습니다. 거기에서 서비스 계정의 도움으로 스토리지에 액세스하고 싶습니다.
GCE> gcloud auth list
Credentialed accounts:
- 1234567890-compute@developer.gserviceaccount.com (active)
먼저 작업중인 프로젝트의 권한에서이 서비스 계정에 "수정 가능"플래그가 지정되었는지 확인했습니다. 또한 파일을 복사하기를 원하는 버킷에 대한 쓰기 ACL을 그에게 제공했습니다.
local> gsutil acl ch -u 1234567890-compute@developer.gserviceaccount.com:W gs://mybucket
그러나 다음 명령이 실패합니다.
GCE> gsutil cp test.txt gs://mybucket/logs
(또한 "mybucket"아래에 "logs"가 생성되었는지 확인했습니다.)
내가 얻는 오류 메시지는 다음과 같습니다.
Copying file://test.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Insufficient Permission 0 B
내가 무엇을 놓치고 있습니까?
찾아야 할 또 다른 사항은 GCE VM을 만들 때 적절한 범위를 설정했는지 확인하는 것입니다. VM에 서비스 계정이 연결되어 있어도 GCS에 액세스하려면 devstorage 범위를 할당해야합니다.
예를 들어 devstorage.read_only
범위가있는 VM을 만든 경우 서비스 계정에 버킷에 대한 쓰기 권한이 있어도 버킷에 대한 쓰기 시도가 실패합니다. 당신은 필요 devstorage.full_control
나 devstorage.read_write
.
자세한 내용은 서비스 계정을 사용할 인스턴스 준비 섹션을 참조 하세요.
참고 : 기본 컴퓨팅 서비스 계정의 범위는 매우 제한적입니다 (GCS에 대한 읽기 전용 포함). 이는 기본 서비스 계정에 프로젝트 편집자 IAM 권한이 있기 때문에 수행됩니다. 사용자 서비스 계정을 사용하는 경우 사용자가 만든 서비스 계정은 기본적으로 모든 범위 액세스 권한을 갖기 때문에 일반적으로 문제가되지 않습니다.
VM에 필요한 범위를 추가 한 후에도 gsutil
새 범위가없는 캐시 된 자격 증명을 계속 사용할 수 있습니다. ~/.gsutil
gsutil 명령어를 다시 시도하기 전에 삭제 하세요. (댓글에서 이것을 지적한 @mndrix에게 감사드립니다.)
gsutil config -b
그런 다음 제공하는 URL로 이동합니다. [클릭 허용]
그런 다음 인증 코드를 복사하여 터미널에 붙여 넣습니다.
해당 프로젝트에 필요한 권한이있는 계정으로 로그인해야합니다.
gcloud auth login
댓글을 올릴 수 없기 때문에이 질문에 대한 답변을 작성했습니다.
이 오류는 경우 gsutil
에 따라 sudo
접두사가 있는 명령을 실행하는 경우에도 발생할 수 있습니다 .
- 버킷을 만든 후 권한 탭으로 이동하여 이메일을 추가하고 스토리지 관리자 권한을 설정 합니다.
- Access VM instance via SSH >> run command:
gcloud auth login
and follow the steps.
Ref: https://groups.google.com/d/msg/gce-discussion/0L6sLRjX8kg/kP47FklzBgAJ
From the docs: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes
You need to first stop the instance -> go to edit page -> go to "Cloud API access scopes" and choose "storage full access or read/write or whatever you need it for"
Changing the service account and access scopes for an instance If you want to run the VM as a different identity, or you determine that the instance needs a different set of scopes to call the required APIs, you can change the service account and the access scopes of an existing instance. For example, you can change access scopes to grant access to a new API, or change an instance so that it runs as a service account that you created, instead of the Compute Engine Default Service Account.
인스턴스의 서비스 계정 및 액세스 범위를 변경하려면 인스턴스를 일시적으로 중지해야합니다. 인스턴스를 중지하려면 인스턴스 중지 문서를 읽어보세요. 서비스 계정 또는 액세스 범위를 변경 한 후에는 인스턴스를 다시 시작해야합니다. 중지 된 인스턴스의 서비스 계정 또는 액세스 범위를 변경하려면 다음 방법 중 하나를 사용하십시오.
'programing' 카테고리의 다른 글
Browserify-브라우저에서 browserify를 통해 생성 된 파일에 번들 된 함수를 호출하는 방법 (0) | 2020.10.18 |
---|---|
핵심 데이터 배경 컨텍스트 모범 사례 (0) | 2020.10.18 |
자신의 프로젝트에서 플레이 그라운드로 자신의 클래스를 가져 오는 방법 (0) | 2020.10.17 |
dom4j를 대체하기 위해 어떤 Java XML 라이브러리를 권장합니까? (0) | 2020.10.17 |
원격 호스트가 연결을 종료했습니다. (0) | 2020.10.17 |