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

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

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

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

Scenari di esempio

I seguenti scenari mostrano diverse opzioni di autorizzazione utilizzando l'agente di servizio e i service account 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 le autorizzazioni in scrittura sui bucket A, B, C, e D.

Qualsiasi utente con le autorizzazioni corrette per creare un job di trasferimento può trasferire dati da o verso i bucket A, B, C e D.

Questa soluzione è ideale 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 da o verso il bucket sbagliato.

Scenario 2: solo service agent gestiti dall'utente

In questo scenario, tutte le autorizzazioni vengono concesse ai service account gestiti dall'utente.

  • Account di servizio gestito dall'utente n. 1 vengono concesse le autorizzazioni sui bucket A e B.
  • Account di servizio gestito dall'utente n. 2 vengono concesse le autorizzazioni sui bucket C e D.

Inoltre:

  • All'utente Alpha viene concesso l'accesso al account di servizio n. 1.
  • All'utente Bravo viene concesso l'accesso al account di servizio n. 2.
  • All'utente Charlie viene concesso l'accesso ai service account n. 1 e n. 2.

In questo caso:

  • Alpha può trasferire dati solo tra i bucket A e B.
  • Bravo può trasferire dati solo tra i bucket C e D.
  • Charlie può trasferire dati solo tra i bucket A e B e tra C e D, solo.
  • Charlie non può trasferire dati tra A e C, A e D, B e C, o B e D.

Scenario 3: autorizzazioni miste

In questo scenario, il progetto contiene un mix di autorizzazioni dell'agente di servizio e autorizzazioni del account di servizio gestito dall'utente. autorizzazioni.

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

In questo caso:

  • Qualsiasi utente con le autorizzazioni corrette per creare un job di trasferimento può trasferire dati da o verso i bucket A e B. Non può trasferire dati da o verso il bucket C o D.
  • L'utente Alpha può trasferire dati da o verso i bucket A e B.
  • Alpha può trasferire dati dal bucket C al bucket D.
  • Alpha non può trasferire dati dal bucket C al bucket A o B.

Panoramica dell'implementazione

L'implementazione è la seguente:

  • Crea un account di servizio gestito dall'utente o ne utilizzi uno esistente.
  • Concedi le autorizzazioni:
    • Per consentire a un utente di accedere al account di servizio gestito dall'utente.
    • Per consentire all'agente di servizio di generare un token di accesso dal account di servizio gestito dall'utente.
    • Per consentire al account di servizio gestito dall'utente di accedere ai bucket.
  • L'utente crea un job di trasferimento che specifica il service account gestito dall'utente.
  • Storage Transfer Service verifica che l'utente disponga delle autorizzazioni corrette per il account di servizio. Se non sono state concesse le autorizzazioni corrette, la creazione del job di trasferimento non riesce.
  • L'agente di servizio genera un token OAuth per conto del 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 ha una durata limitata 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 service account gestito dall'utente, devi disporre del ruolo Creazione account di servizio (roles/iam.serviceAccountCreator) nel progetto.
  • Per concedere all'utente e al service agent l'accesso al service account gestito dall'utente, devi disporre del ruolo Amministratore account di servizio (roles/iam.serviceAccountAdmin) nel service account gestito dall'utente o nel progetto.

Creare o identificare un account di servizio gestito dall'utente

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

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

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

    SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Se il account di servizio si trova in un progetto diverso dal job di trasferimento, consulta la sezione Attivare il collegamento dei service account tra progetti.

Concedere l'accesso all'utente

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

Google Cloud Console

  1. Nella Google Cloud console, vai alla pagina Service account.

    Vai a Service account

  2. Seleziona un progetto.

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

  4. Seleziona la scheda Entità con accesso.

  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 nel account di servizio.

gcloud

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

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 del service account gestito dall'utente nel formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • PRINCIPAL: l'indirizzo email dell'utente che esegue il job di trasferimento, nel formato user:name@example.com.

Concedere l'accesso all'agente di servizio

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

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

  1. Vai alla pagina di riferimento googleServiceAccounts.get.

    Si apre un riquadro interattivo intitolato Prova questo metodo.

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

  3. Fai clic su Esegui.

    L'indirizzo email dell'agente di servizio viene restituito come valore di accountEmail. Utilizza il formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.

Quindi, per concedere all'agente di servizio l'accesso al account di servizio gestito dall'utente:

Google Cloud Console

  1. Nella Google Cloud console, vai alla pagina Service account.

    Vai a Service account

  2. Seleziona un progetto.

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

  4. Seleziona la scheda Entità con accesso.

  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 nel account di servizio.

gcloud

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

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 del service account gestito dall'utente nel formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com.
  • SERVICE_AGENT_EMAIL: l'indirizzo email dell'agente di servizio.

Concedere le autorizzazioni dei bucket al account di servizio gestito dall'utente

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

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

Una volta concesse le autorizzazioni corrette, puoi specificare il 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 Service account gestito dall'utente.
  3. Inserisci l'indirizzo email del account di servizio gestito dall'utente, utilizzando il formato SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
  4. Fai clic su Crea per creare il job di trasferimento.

API REST

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

Sono accettati sia l'indirizzo email del account di servizio (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com) sia l'ID univoco (123456789012345678901).

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": "SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com",
"transferSpec": {
    ...
  }
}