Delega le autorizzazioni dell'agente di servizio a un account di servizio gestito dall'utente

Per i trasferimenti senza agente, Storage Transfer Service utilizza per impostazione predefinita un agente di servizio per trasferire i dati tra l'origine e la destinazione. Concedi all'agente di servizio le autorizzazioni per accedere ai tuoi bucket Cloud Storage.

Poiché lo stesso agente di servizio Storage Transfer Service viene utilizzato per tutti i trasferimenti all'interno di un progetto, ha necessariamente autorizzazioni su tutti i bucket coinvolti in ogni trasferimento.

In alternativa, puoi assegnare le autorizzazioni del bucket a più account di servizio gestiti dall'utente. A questi account di servizio gestiti dall'utente vengono concesse autorizzazioni per bucket di origine e di destinazione specifici e sono limitati anche ad account utente specifici (gli account che creano o attivano il job di trasferimento).

Scenari di esempio

I seguenti scenari mostrano diverse opzioni di autorizzazione che utilizzano l'agente di servizio e gli account di servizio gestiti dall'utente.

Espandi ogni sezione per visualizzare i dettagli.

Scenario 1: solo agente di servizio

In questo scenario, tutte le autorizzazioni vengono concesse all'agente di servizio.

  • All'agente di servizio vengono concesse autorizzazioni di scrittura sui bucket A, B, C e D.

Qualsiasi utente con le autorizzazioni corrette per creare un job di trasferimento può eseguire il trasferimento all'interno o all'esterno dei bucket A, B, C e D.

Questo funziona bene quando l'utente di Storage Transfer Service è un utente attendibile per i dati in tutti i bucket e può configurare correttamente i job di trasferimento per evitare di spostare i dati nel bucket sbagliato o al di fuori.

Scenario 2: solo agenti di servizio gestiti dall'utente

In questo scenario, tutte le autorizzazioni vengono concesse ai service account gestiti dagli utenti.

  • All'account di servizio gestito dall'utente 1 vengono concesse autorizzazioni per i bucket A e B.
  • All'account di servizio gestito dall'utente 2 vengono concesse autorizzazioni per i bucket C e D.

Inoltre:

  • All'utente Alpha viene concesso l'accesso all'account di servizio 1.
  • All'utente Bravo viene concesso l'accesso all'account di servizio 2.
  • All'utente Charlie viene concesso l'accesso agli account di servizio 1 e 2.

In questo caso:

  • Alpha può trasferire solo tra i bucket A e B.
  • Bravo può eseguire trasferimenti solo tra i bucket C e D.
  • Charlie può eseguire trasferimenti solo tra i bucket A e B e tra C e D.
  • Charlie non può trasferirsi da A a C, da A a D, da B a C o da B a D.

Scenario 3: autorizzazioni miste

In questo scenario, il progetto contiene un insieme di autorizzazioni dell'agente di servizio e autorizzazioni dell'account di servizio gestite dall'utente.

  • All'agente di servizio vengono concesse autorizzazioni di scrittura sui bucket A e B.
  • All'account di servizio gestito dall'utente 1 vengono concesse autorizzazioni di sola lettura sul bucket C e autorizzazioni di scrittura sul bucket D.
  • All'utente Alpha viene concesso l'accesso all'account di servizio gestito dall'utente 1.

In questo caso:

  • Qualsiasi utente con le autorizzazioni corrette per creare un job di trasferimento può eseguire il trasferimento all'interno o all'esterno dei bucket A e B. Non possono essere trasferiti all'interno o all'esterno del bucket C o D.
  • L'utente Alpha può trasferire elementi nei bucket A e B o viceversa.
  • Alpha può trasferire in uscita dal bucket C al bucket D.
  • Alpha non può trasferire elementi dal bucket C al bucket A o B.

Panoramica dell'implementazione

L'implementazione è la seguente:

  • Crea un account di servizio gestito dall'utente o utilizzane uno esistente.
  • Concedi le autorizzazioni:
    • Per consentire a un utente di accedere all'account di servizio gestito dall'utente.
    • L'agente di servizio generi un token di accesso dall'account di servizio gestito dall'utente.
    • L'account di servizio gestito dall'utente possa accedere ai tuoi bucket.
  • L'utente crea un job di trasferimento che specifica l'account di servizio gestito dall'utente.
  • Storage Transfer Service controlla che l'utente disponga delle autorizzazioni corrette sull'account di servizio. Se non sono state concesse le autorizzazioni corrette, la creazione del job di trasferimento non va a buon fine.
  • L'agente di servizio genera un token OAuth per conto dell'account di servizio gestito dall'utente. Il token OAuth consente a Storage Transfer Service di accedere ai bucket coinvolti nel trasferimento.
  • Il job di trasferimento viene eseguito.
  • Il token OAuth è di breve durata e scade. Se il job di trasferimento è in corso quando il token scade, Storage Transfer Service ne genera uno nuovo e continua il trasferimento.

Configurare la delega delle autorizzazioni

Segui le istruzioni per delegare l'accesso dell'agente di servizio a un account di servizio gestito dall'utente.

Requisiti

  • Per creare un nuovo account di servizio gestito dall'utente, devi disporre del ruolo Crea account di servizio (roles/iam.serviceAccountCreator) nel progetto.
  • Per concedere all'utente e all'agente di servizio l'accesso all'account di servizio gestito dall'utente, devi disporre del ruolo Amministratore account di servizio (roles/iam.serviceAccountAdmin) nell'account di servizio gestito dall'utente o nel progetto.

Crea o identifica un account di servizio gestito dall'utente

Puoi creare un nuovo account di servizio gestito dall'utente o utilizzarne uno esistente.

  • Per creare un account di servizio gestito dall'utente, segui le istruzioni riportate in Creare account di servizio.

  • Per utilizzare un account di servizio gestito dall'utente esistente, devi disporre del relativo indirizzo email, che utilizza il seguente formato:

    SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Se l'account di servizio si trova in un progetto diverso da quello del job di trasferimento, consulta Abilitare l'attacco degli account di servizio tra progetti.

Concedi l'accesso all'utente

Concedi all'account utente l'accesso al nuovo account di servizio gestito dall'utente e assegni il ruolo Utente account di servizio (roles/iam.serviceAccountUser). L'account utente è quello utilizzato per creare o aggiornare il job di trasferimento.

Google Cloud console

  1. Nella Google Cloud console, vai alla pagina Account di servizio.

    Vai ad Account di servizio

  2. Seleziona un progetto.

  3. Fai clic sull'indirizzo email dell'account di servizio gestito dall'utente.

  4. Seleziona la scheda Autorizzazioni.

  5. Fai clic su Concedi l'accesso.

  6. Inserisci l'indirizzo email dell'utente. Ad esempio, user1@example.com.

  7. Nell'elenco a discesa Ruolo, seleziona Utente account di servizio.

  8. Fai clic su Salva. All'entità viene concesso il ruolo nell'account di servizio.

gcloud

Per concedere un ruolo a un'entità, esegui il comando add-iam-policy-binding:

gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \
  --member=PRINCIPAL --role=roles/iam.serviceAccountUser

Sostituisci le seguenti variabili:

  • USER_MANAGED_SERVICE_ACCOUNT_EMAIL: l'indirizzo email dell'account servizio gestito dall'utente nel formatoSA_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • PRINCIPAL: l'indirizzo email dell'utente che esegue il job di trasferimento, nel formato user:name@example.com.

Concedi l'accesso all'agente di servizio

Per consentire all'agente di servizio di generare un token di accesso dall'account di servizio gestito dall'utente, concedi all'agente di servizio l'accesso all'account di servizio gestito dall'utente e assegna il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator).

Per concedere l'accesso, devi disporre dell'indirizzo email dell'agente di servizio. Per trovare l'indirizzo email dell'agente di servizio:

  1. Vai alla pagina di riferimento googleServiceAccounts.get.

    Si apre un riquadro interattivo denominato Prova questo metodo.

  2. Nel riquadro, in Parametri di richiesta, inserisci il tuo ID progetto. Il progetto specificato qui deve essere quello che utilizzi per gestire Storage Transfer Service.

  3. Fai clic su Execute (Esegui).

    L'email dell'agente di servizio viene restituita come valore di accountEmail. Utilizza il formatoproject-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.

Per concedere all'agente di servizio l'accesso all'account di servizio gestito dall'utente:

Google Cloud console

  1. Nella Google Cloud console, vai alla pagina Account di servizio.

    Vai ad Account di servizio

  2. Seleziona un progetto.

  3. Fai clic sull'indirizzo email dell'account di servizio gestito dall'utente.

  4. Seleziona la scheda Autorizzazioni.

  5. Fai clic su Concedi l'accesso.

  6. Inserisci l'indirizzo email dell'agente di servizio.

  7. Nell'elenco a discesa Ruolo, seleziona Creatore token account di servizio.

  8. Fai clic su Salva. All'entità viene concesso il ruolo nell'account di servizio.

gcloud

Per concedere un ruolo a un'entità, esegui il comando add-iam-policy-binding:

gcloud iam service-accounts add-iam-policy-binding USER_MANAGED_SERVICE_ACCOUNT_EMAIL \
  --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/iam.serviceAccountTokenCreator

Sostituisci le seguenti variabili:

  • USER_MANAGED_SERVICE_ACCOUNT_EMAIL: l'indirizzo email dell'account servizio gestito dall'utente nel formatoSA_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • SERVICE_AGENT_EMAIL: l'indirizzo email dell'agente di servizio.

Concedi le autorizzazioni del bucket all'account di servizio gestito dall'utente

Concedi le autorizzazioni elencate in Autorizzazioni dell'agente di servizio gestito da Google all'account di servizio gestito dall'utente anziché all'agente di servizio.

Creare un job di trasferimento utilizzando un account di servizio gestito dall'utente

Dopo aver concesso le autorizzazioni corrette, puoi specificare l'account di servizio gestito dall'utente quando crei un nuovo job di trasferimento.

Google Cloud console

Segui le istruzioni per creare un trasferimento. Prima di finalizzare il job di trasferimento:

  1. Nella pagina Scegli impostazioni, individua la sezione Tipo di service account.
  2. Seleziona Account di servizio gestito dall'utente.
  3. Inserisci l'indirizzo email dell'account di servizio gestito dall'utente utilizzando il formatoSERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  4. Fai clic su Crea per creare il job di trasferimento.

API REST

Specifica l'account di servizio gestito dall'utente come valore del campo serviceAccount nella richiesta transferJobs.create.

Il valore deve utilizzare il formato projects/-/serviceAccounts/ACCOUNT_EMAIL_OR_UNIQUEID.

Nella stringa sono accettati l'indirizzo email dell'account di servizio (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com) o l'ID univoco (123456789012345678901). Il carattere jolly - è obbligatorio; la sua sostituzione con un ID progetto non è valida.

Ad esempio:

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "A transfer using a user-managed service account for bucket permissions",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"serviceAccount": "projects/-/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
"transferSpec": {
    ...
  }
}