copia gsutil che restituisce "AccessDeniedException: 403 Autorizzazione insufficiente" da GCE


90

Ho effettuato l'accesso a un'istanza GCE tramite SSH. Da lì vorrei accedere all'archivio con l'aiuto di un account di servizio:

GCE> gcloud auth list
Credentialed accounts:
 - 1234567890-compute@developer.gserviceaccount.com (active)

Per prima cosa mi sono assicurato che questo account di servizio fosse contrassegnato come "Può modificare" nelle autorizzazioni del progetto su cui sto lavorando. Mi sono anche assicurato di dargli l'ACL di scrittura sul bucket Vorrei che copiasse un file:

local> gsutil acl ch -u 1234567890-compute@developer.gserviceaccount.com:W gs://mybucket

Ma poi il seguente comando fallisce:

GCE> gsutil cp test.txt gs://mybucket/logs

(Mi sono anche assicurato che "log" fosse creato in "mybucket").

Il messaggio di errore che ricevo è:

Copying file://test.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Insufficient Permission               0 B  

Cosa mi sto perdendo?


7
La VM GCE è stata creata con il controllo completo o l'ambito GCS di lettura / scrittura?
jterrace

1
Grazie per averlo fatto notare. Non ero a conoscenza di questa opzione in effetti. Ho ricreato l'istanza con l'opzione abilitata e ha funzionato. Se potessi suggerire di attivare la bandiera come risposta, la contrassegnerei felicemente.
Christophe

Risposte:


131

Un'altra cosa da cercare è assicurarsi di impostare gli ambiti appropriati durante la creazione della VM GCE. Anche se a una VM è collegato un account di servizio, è necessario assegnarle ambiti di devstorage per accedere a GCS.

Ad esempio, se avessi creato la tua VM con l' devstorage.read_onlyambito, il tentativo di scrivere in un bucket non avrebbe avuto esito positivo, anche se il tuo account di servizio dispone dell'autorizzazione per scrivere nel bucket. Avresti bisogno di devstorage.full_controlo devstorage.read_write.

Vedere la sezione sulla preparazione di un'istanza per utilizzare gli account di servizio per i dettagli.

Nota: l'account del servizio di calcolo predefinito ha ambiti molto limitati (inclusa la sola lettura per GCS). Questa operazione viene eseguita perché l'account di servizio predefinito dispone delle autorizzazioni IAM dell'editor di progetto. Se si utilizza un account di servizio utente, questo non è in genere un problema poiché gli account di servizio creati dall'utente ottengono l'accesso a tutti gli ambiti per impostazione predefinita.

Dopo aver aggiunto gli ambiti necessari alla macchina virtuale, è gsutilpossibile che si stiano ancora utilizzando le credenziali memorizzate nella cache che non dispongono dei nuovi ambiti. Elimina ~/.gsutilprima di provare di nuovo i comandi gsutil. (Grazie a @mndrix per averlo sottolineato nei commenti.)


1
Ho ricreato la mia istanza con le autorizzazioni e ora funziona tutto. Grazie
Syclone

33
A partire da ora, puoi modificare gli ambiti. Arresta la macchina, modifica, quindi modifica gli ambiti di accesso dell'API Cloud. Credo che questo sia disponibile solo per circa un mese.
Warren

143
Dopo aver aggiunto gli ambiti necessari alla macchina virtuale, è gsutilpossibile che si stiano ancora utilizzando le credenziali memorizzate nella cache che non dispongono dei nuovi ambiti. Elimina ~ / .gsutil prima di provare di gsutilnuovo i comandi.
mndrix

2
Grazie mille mndrix!
Guillermo

2
@mndrix salva la situazione
Ben Guild

50

Devi accedere con un account che abbia le autorizzazioni necessarie per quel progetto:

gcloud auth login

1
Non dimenticare di emettere gcloud auth revoke <email-account>dopo aver finito.
ssasa

50

gsutil config -b

Quindi vai all'URL fornito, [CLIC Consenti]

Quindi copia il codice di verifica e incollalo sul terminale.


Nota che questo non funziona se corri gsutilda ssh.
bfontaine

3
"Non funziona" in quanto non apre il browser. Invece, fornisce un URL da copiare e incollare manualmente.
BuvinJ

6
Funziona bene anche per tutti gli altri se si elimina il file-b . Ciò non aprirà un browser, ma sputerà semplicemente un URL che può essere aperto al di fuori della shell.
oligofren

8

Ho scritto una risposta a questa domanda poiché non posso pubblicare commenti:

Questo errore può verificarsi anche se in alcuni casi stai eseguendo il gsutilcomando con un sudoprefisso.


3
Questo è davvero un commento, non una risposta. Con un po 'più di rappresentante, sarai in grado di pubblicare commenti .
Lece

1
Ho dato la risposta (+1) in modo che @TheLoneDeranger abbia una reputazione più vicina al privilegio "Pubblica commento".
Rann Lifshitz

8
  1. Arresta VM
  2. got -> Dettagli dell'istanza VM.
  3. in "Ambiti di accesso all'API Cloud" seleziona "Consenti accesso completo a tutte le API Cloud" quindi fai clic su "Salva".
  4. riavvia la VM ed elimina ~ / .gsutil.



2

Quindi ho provato un sacco di cose cercando di copiare dal bucket GCS alla mia VM. Spero che questo post aiuti qualcuno.

Tramite connessione SSHed: inserisci qui la descrizione dell'immagine

e seguendo questo script:

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

Ho ricevuto questo errore:

AccessDeniedException: 403 Accesso non configurato. Vai alla console di Google Cloud Platform ( https://cloud.google.com/console#/project ) per il tuo progetto, seleziona API e autenticazione e abilita l'API JSON di Google Cloud Storage.

Ciò che ha risolto questo problema è stato seguendo la sezione "Attivazione dell'API" menzionata in questo collegamento: https://cloud.google.com/storage/docs/json_api/

inserisci qui la descrizione dell'immagine

Una volta attivata l'API, mi sono autenticato nella finestra SSHed tramite

gcloud auth login

Seguendo la procedura di autenticazione sono finalmente riuscito a scaricare da Google Storage Bucket sulla mia VM.

PS

Mi sono assicurato di:

  1. Assicurati che gsutils sia installato sulla mia istanza VM.
  2. Vai al mio bucket, vai alla scheda autorizzazioni e aggiungi gli account di servizio desiderati e imposta l'autorizzazione / ruolo di amministratore di archiviazione. inserisci qui la descrizione dell'immagine

    3.Assicurati che la mia VM abbia gli ambiti di accesso dell'API Cloud corretti: inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


1

Dai documenti: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes

Devi prima arrestare l'istanza -> vai alla pagina di modifica -> vai a "Ambiti di accesso API cloud" e scegli "accesso completo allo spazio di archiviazione o lettura / scrittura o qualunque cosa ti serva"

Modifica dell'account di servizio e degli ambiti di accesso per un'istanza Se si desidera eseguire la VM con un'identità diversa o si determina che l'istanza necessita di un diverso set di ambiti per chiamare le API richieste, è possibile modificare l'account di servizio e gli ambiti di accesso di un'istanza esistente. Ad esempio, puoi modificare gli ambiti di accesso per concedere l'accesso a una nuova API o modificare un'istanza in modo che venga eseguita come account di servizio che hai creato, anziché come account di servizio predefinito di Compute Engine.

Per modificare l'account di servizio di un'istanza e gli ambiti di accesso, l'istanza deve essere temporaneamente interrotta. Per interrompere l'istanza, leggi la documentazione per Arresto di un'istanza. Dopo aver modificato l'account del servizio o gli ambiti di accesso, ricordarsi di riavviare l'istanza. Utilizzare uno dei seguenti metodi per modificare l'account del servizio o accedere agli ambiti dell'istanza arrestata.


0

Modifica le autorizzazioni del bucket.

Aggiungi un utente per "Tutti gli utenti" e concedi l'accesso "Amministratore archiviazione".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.