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


90

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  

내가 무엇을 놓치고 있습니까?


7
GCE VM이 전체 제어 또는 읽기 / 쓰기 GCS 범위로 생성 되었나요?
jterrace

1
지적 해주셔서 감사합니다. 나는 실제로 그 옵션을 알지 못했습니다. 옵션을 활성화 한 상태로 인스턴스를 다시 생성했는데 제대로 작동했습니다. 답변으로 플래그를 켜도록 제안 할 수 있다면 기꺼이 플래그를 지정할 것입니다.
Christophe

답변:


131

찾아야 할 또 다른 사항은 GCE VM을 만들 때 적절한 범위를 설정했는지 확인하는 것입니다. VM에 서비스 계정이 연결되어 있어도 GCS에 액세스하려면 devstorage 범위를 할당해야합니다.

예를 들어 devstorage.read_only범위가있는 VM을 만든 경우 서비스 계정에 버킷에 대한 쓰기 권한이 있어도 버킷에 대한 쓰기 시도가 실패합니다. 당신은 필요 devstorage.full_controldevstorage.read_write.

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

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

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


1
권한을 사용하여 인스턴스를 다시 만들었으며 이제 모두 작동합니다. 감사합니다
Syclone

33
이제 범위를 편집 할 수 있습니다. 머신을 중지하고 수정 한 다음 Cloud API 액세스 범위를 변경합니다. 나는 이것이 이제 약 한 달 동안 만 가능하다고 믿습니다.
Warren

143
VM에 필요한 범위를 추가 한 후에도 gsutil새 범위가없는 캐시 된 자격 증명을 계속 사용할 수 있습니다. gsutil명령을 다시 시도하기 전에 ~ / .gsutil을 삭제 하십시오.
mndrix

2
mndrix 감사합니다!
Guillermo

2
@mndrix가 하루를 저장합니다
Ben Guild

50

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

gcloud auth login

1
gcloud auth revoke <email-account>완료 한 후 발행하는 것을 잊지 마십시오 .
ssasa

50

gsutil config -b

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

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


gsutil에서 실행하면 작동하지 않습니다 ssh.
bfontaine

3
브라우저를 열지 않는 한 "작동하지 않습니다". 대신 수동으로 복사하여 붙여 넣을 수있는 URL을 제공합니다.
BuvinJ

6
.NET Framework 를 삭제하면-b 다른 모든 사람에게도 잘 작동 합니다 . 브라우저가 열리지는 않지만 단순히 셸 외부에서 열 수있는 URL을 뱉어냅니다.
oligofren

8

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

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


3
이것은 답변이 아니라 실제로 의견입니다. 더 많은 담당자 가 있으면 댓글을 게시 할 수 있습니다 .
Lece

1
@TheLoneDeranger가 '댓글 게시'권한에 더 가까운 평판을 얻을 수 있도록 답변 (+1)을 제공했습니다.
Rann Lifshitz

8
  1. VM 중지
  2. got-> VM 인스턴스 세부 정보.
  3. "Cloud API 액세스 범위"에서 "모든 클라우드 API에 대한 전체 액세스 허용"을 선택한 다음 "저장"을 클릭합니다.
  4. VM을 다시 시작하고 ~ / .gsutil을 삭제합니다.



2

그래서 GCS 버킷에서 VM으로 복사하려고 시도했습니다. 이 게시물이 누군가에게 도움이되기를 바랍니다.

SSH 연결을 통해 : 여기에 이미지 설명 입력

이 스크립트를 따르십시오.

sudo gsutil cp gs://[BUCKET_NAME]/[OBJECT_NAME] [OBJECT_DESTINATION_IN_LOCAL]

이 오류가 발생했습니다.

AccessDeniedException : 403 액세스가 구성되지 않았습니다. 프로젝트 의 Google Cloud Platform 콘솔 ( https://cloud.google.com/console#/project )로 이동하여 API 및 인증을 선택하고 Google Cloud Storage JSON API를 사용 설정하세요.

이 문제를 해결 한 것은이 링크 ( https://cloud.google.com/storage/docs/json_api/)에 언급 된 "API 활성화"섹션을 따르는 것이 었습니다.

여기에 이미지 설명 입력

API를 활성화하면 SSHed 창에서

gcloud auth login

인증 절차에 따라 마침내 Google Storage Bucket에서 VM으로 다운로드 할 수있었습니다.

추신

나는 확인했다 :

  1. 내 VM 인스턴스에 gsutils가 설치되어 있는지 확인합니다.
  2. 내 버킷으로 이동하여 권한 탭으로 이동하여 원하는 서비스 계정을 추가하고 스토리지 관리자 권한 / 역할을 설정합니다. 여기에 이미지 설명 입력

    3. VM에 적절한 Cloud API 액세스 범위가 있는지 확인합니다. 여기에 이미지 설명 입력

여기에 이미지 설명 입력


1

문서에서 : https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes

먼저 인스턴스 중지-> 편집 페이지로 이동-> "Cloud API 액세스 범위"로 이동하여 "스토리지 전체 액세스 또는 읽기 / 쓰기 또는 필요한 모든 항목"을 선택해야합니다.

인스턴스의 서비스 계정 및 액세스 범위 변경 VM을 다른 ID로 실행하거나 필요한 API를 호출하기 위해 인스턴스에 다른 범위 집합이 필요하다고 판단하는 경우 서비스 계정 및 액세스 범위를 변경할 수 있습니다. 기존 인스턴스의. 예를 들어 액세스 범위를 변경하여 새 API에 대한 액세스 권한을 부여하거나 Compute Engine 기본 서비스 계정 대신 사용자가 만든 서비스 계정으로 실행되도록 인스턴스를 변경할 수 있습니다.

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


0

버킷의 권한을 변경합니다.

"모든 사용자"에 대한 사용자를 추가하고 "저장소 관리자"액세스 권한을 부여합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.