programing

GCE에서 'AccessDeniedException : 403 Insufficient Permission'을 반환하는 gsutil 사본

nasanasas 2020. 10. 18. 18:18
반응형

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_controldevstorage.read_write.

자세한 내용은 서비스 계정을 사용할 인스턴스 준비 섹션을 참조 하세요.

참고 : 기본 컴퓨팅 서비스 계정의 범위는 매우 제한적입니다 (GCS에 대한 읽기 전용 포함). 이는 기본 서비스 계정에 프로젝트 편집자 IAM 권한이 있기 때문에 수행됩니다. 사용자 서비스 계정을 사용하는 경우 사용자가 만든 서비스 계정은 기본적으로 모든 범위 액세스 권한을 갖기 때문에 일반적으로 문제가되지 않습니다.

VM에 필요한 범위를 추가 한 후에도 gsutil새 범위가없는 캐시 된 자격 증명을 계속 사용할 수 있습니다. ~/.gsutilgsutil 명령어를 다시 시도하기 전에 삭제 하세요. (댓글에서 이것을 지적한 @mndrix에게 감사드립니다.)


gsutil config -b

그런 다음 제공하는 URL로 이동합니다. [클릭 허용]

그런 다음 인증 코드를 복사하여 터미널에 붙여 넣습니다.


해당 프로젝트에 필요한 권한이있는 계정으로 로그인해야합니다.

gcloud auth login

댓글을 올릴 수 없기 때문에이 질문에 대한 답변을 작성했습니다.

이 오류는 경우 gsutil에 따라 sudo접두사가 있는 명령을 실행하는 경우에도 발생할 수 있습니다 .


  1. 버킷을 만든 후 권한 탭으로 이동하여 이메일을 추가하고 스토리지 관리자 권한을 설정 합니다.

스크린 샷

  1. 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.

인스턴스의 서비스 계정 및 액세스 범위를 변경하려면 인스턴스를 일시적으로 중지해야합니다. 인스턴스를 중지하려면 인스턴스 중지 문서를 읽어보세요. 서비스 계정 또는 액세스 범위를 변경 한 후에는 인스턴스를 다시 시작해야합니다. 중지 된 인스턴스의 서비스 계정 또는 액세스 범위를 변경하려면 다음 방법 중 하나를 사용하십시오.

참고 URL : https://stackoverflow.com/questions/27275063/gsutil-copy-returning-accessdeniedexception-403-insufficient-permission-from

반응형