Utilizzo delle immagini di altri progetti

Questa pagina descrive come configurare il tuo progetto in modo che Deployment Manager possa creare istanze di macchine virtuali Compute Engine utilizzando immagini del sistema operativo che appartengono a un altro progetto.

Ad esempio, supponiamo che tu abbia un progetto denominato Awesome Project, in cui Deployment Manager crea e gestisce istanze VM. Ora supponiamo di dover usare immagini private che appartengono a un altro progetto denominato Database Images. Per concedere l'accesso a queste immagini, il proprietario delle immagini database deve concedere il ruolo IAM roles/compute.imageUser all'account di servizio delle API di Google di Awesome Project, che potrà quindi utilizzare le immagini del progetto Database Images.

Puoi utilizzare questa procedura anche per concedere ai gruppi di istanze gestite l'accesso alle immagini di altri progetti.

Prima di iniziare

Limitazioni

Di seguito sono riportate le limitazioni per l'utilizzo di questa funzionalità:

  • Devi concedere il ruolo compute.imageUser a livello di progetto all'account di servizio delle API di Google del tuo progetto.
  • La concessione del ruolo compute.imageUser concede le autorizzazioni a tutte le immagini nel progetto specifico. Non è possibile condividere immagini specifiche.
  • Devi concedere questo ruolo a utenti specifici e non a allAuthenticatedUsers o allUsers.

Concessione dell'accesso alle immagini

Per concedere l'accesso alle immagini che appartengono a un altro progetto, il proprietario del progetto proprietario delle immagini deve concedere l'accesso all'account di servizio API di Google del progetto che vuole utilizzare le immagini.

  1. Nella console Google Cloud del progetto, vai alla pagina IAM che deve accedere a immagini private di proprietà di un altro progetto.

    Vai alla pagina IAM

  2. Se richiesto, seleziona il progetto dall'elenco. Ricordati di selezionare il progetto che deve accedere alle immagini archiviate in un altro progetto.
  3. Cerca Account di servizio API di Google, che ha un indirizzo email nel seguente formato:

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. Prendi nota dell'indirizzo email qui sopra. Successivamente, un proprietario del progetto in cui si trovano le immagini desiderate può concedere all'account di servizio API di Google il ruolo roles/compute.imageUser.

    Console

    1. Sempre nella console Google Cloud, vai alla pagina IAM del progetto che contiene le immagini a cui vuoi accedere.

      Vai alla pagina IAM

    2. Seleziona il progetto dall'elenco dei progetti.
    3. Fai clic sul pulsante Aggiungi per aggiungere un nuovo membro.
    4. Nella casella Membri, inserisci l'indirizzo email dell'account di servizio.
    5. Espandi il menu a discesa Ruoli e seleziona Compute Engine > Utente immagine Compute.
    6. Fai clic su Aggiungi per aggiungere l'account.

    gcloud

    Con Google Cloud CLI, aggiungi un'associazione al criterio IAM per il progetto:

    gcloud projects add-iam-policy-binding [PROJECT_ID] \
        --member serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/compute.imageUser

    dove:

    • [PROJECT_ID] è l'ID del progetto che contiene le immagini da condividere.
    • [SERVICE_ACCOUNT_EMAIL] è l'indirizzo email dell'account di servizio.

    Ad esempio:

    gcloud projects add-iam-policy-binding database-images \
        --member serviceAccount:123456789012@cloudservices.gserviceaccount.com  \
        --role roles/compute.imageUser

    API

    Nell'API, effettua una richiesta POST al seguente URL, dove [PROJECT_ID] è l'ID del progetto che contiene le immagini da condividere.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/$[PROJECT_ID]:setIamPolicy
    

    Il corpo della richiesta deve contenere l'elenco di associazioni da applicare a questo progetto. Il ruolo roles/compute.imageUser deve far parte dell'associazione. Ad esempio:

    {
       "policy": {
           "version": "0",
           "bindings": [
           {
               "role": "roles/owner",
               "members": [
                   "user:example@gmail.com"
               ]
           },
           {
               "role": "roles/compute.imageUser",
               "members": [
                   "serviceAccount:123456789012@cloudservices.gservbiceaccount.com"
               ]
           }
           ]
       }
    

    }

Utilizzo di immagini di altri progetti nella configurazione

Dopo che a un progetto è stato concesso l'accesso alle immagini di un altro progetto, gli utenti del progetto possono utilizzare le immagini specificando l'ID del progetto a cui appartengono le immagini nei modelli o nelle configurazioni:

image: projects/[PROJECT_ID]/global/images/[IMAGE_NAME]

Ad esempio, se l'ID progetto immagine è database-images, puoi fornire il seguente URI immagine nella configurazione:

resources:
- name: a-special-vm
  type: compute.v1.instances
  properties:
    machineType: zones/us-central1-a/machineTypes/f1-micro
    image: projects/database-images/global/images/example-database-image
    ...

Dopo aver aggiunto l'immagine, completa la creazione della configurazione, quindi esegui il deployment.

Che cosa succede dopo?