Dopo aver testato la mia applicazione in locale procedo con il deploy su Google Cloud. La mia pipeline si basa sulle Github Action. Le Action aggiornano l'immagine del container all'interno di un GCE con OS dedicato per la containerizzazione chiamato Container-Optimized OS.
La configurazione del mio ambiente locale è la medesima, essendo un'applicazione sviluppata su Spring Boot utilizzo la property spring.cloud.gcp.credentials.encoded-key (nel mio caso su Vault) per passare al container il json encodato in base 64 per le credenziali di accesso a GCE.
Ho molte cose da verificare dopo il mio primo rilascio ma l'errore che mi ha messo più in difficoltà è sicuramente quello legato alla scrittura di file di backup sul bucket di GCP. Nello specifico l'errore che ricevo è:
com.google.cloud.storage.StorageException: Provided scope(s) are not authorized] with root cause
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
POST https://storage.googleapis.com/upload/storage/v1/b/nome-bucket/o?projection=full&uploadType=multipart
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Provided scope(s) are not authorized",
"reason" : "forbidden"
} ],
"message" : "Provided scope(s) are not authorized"
}
La cosa mi sorprende perché le credenziali utilizzate sono le stesse che utilizzo da locale, quindi, perché questo errore? Ho pensato che i file da creare avessere dimensioni o path non ammessi, ha verificato che il service account avesse dei problemi ma niente di tutto questo.
Il motivo risiende nei parametri dell'istanza legata al Cloud API access scopes. Nel caso delle istanze GCE c'é un layer di permessi che devono essere impostati per definire la modalità di accesso alle risorse interne al progetto, nel caso dello Storage (Bucket) il default è "read-only" e per questo non ero in grado di creare contenuti all'interno del mio bucket dall'instanza GCE. A questo punto mi viene il dubbio che non sia necessario passare le credenziali in quanto queste forse sono già legate alla VM creata... verifico e vi aggiorno.