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

La delega delle autorizzazioni dell'agente di servizio a un account di servizio gestito dall'utente è una configurazione facoltativa per le organizzazioni che richiedono il controllo degli accessi ai bucket per 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 da tutti i trasferimenti all'interno di un progetto, dispone necessariamente delle autorizzazioni su tutti i bucket coinvolti in ogni trasferimento all'interno del progetto.

In alternativa, puoi assegnare le autorizzazioni del bucket a più service account gestiti dall'utente. A questi service account gestiti dall'utente vengono concesse autorizzazioni su bucket di origine e di destinazione specifici e sono anche limitati 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 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ò eseguire trasferimenti da o verso i bucket A, B, C e D.

Questo approccio 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 in o da un bucket errato.

Scenario 2: solo agenti di servizio gestiti dall'utente

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

  • Al account di servizio gestito dall'utente n. 1 vengono concesse le autorizzazioni per i bucket A e B.
  • Al 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 all'account di servizio n. 1.
  • All'utente Bravo viene concesso l'accesso all'account di servizio n. 2.
  • All'utente Charlie viene concesso l'accesso ai service account 1 e 2.

In questo caso:

  • Alpha può trasferire dati 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ò effettuare trasferimenti tra A e C, A e D, B e C o B e D.

Scenario 3: autorizzazioni miste

In questo scenario, il progetto contiene una combinazione di autorizzazioni degli agenti di servizio e autorizzazioni dei account di servizio gestiti dall'utente.

  • All'agente di servizio vengono concesse le autorizzazioni in scrittura sui bucket A e B.
  • Al 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ò eseguire trasferimenti da o verso i bucket A e B. Non possono essere trasferiti all'interno o all'esterno dei bucket C o D.
  • L'utente Alpha può trasferire dati da o verso i bucket A e B.
  • Alpha può trasferire dati in uscita 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:

  • Crei 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 tuoi 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 va a buon fine.
  • 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.

Configura 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 o gestire i job di trasferimento, il tuo account utente deve disporre delle autorizzazioni di progetto di Storage Transfer Service. Consulta Autorizzazioni utente richieste.
  • Per creare un nuovo account di servizio gestito dall'utente, devi disporre del ruolo Creazione service account (roles/iam.serviceAccountCreator) nel progetto.
  • Per concedere all'utente e all'agente di servizio l'accesso al account di servizio gestito dall'utente, devi disporre del ruolo Amministratore service account (roles/iam.serviceAccountAdmin) nel 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 Crea service account.

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

    SERVICE_ACCOUNT_NAME@PROJECT_ID.

  • Se hai bisogno dell'ID univoco del account di servizio (uniqueId), esegui gcloud iam service-accounts describe SERVICE_ACCOUNT_EMAIL --format="value(uniqueId)" o visualizza la colonna ID univoco nella pagina Service account nella consoleGoogle Cloud .

Se il account di servizio si trova in un progetto diverso da quello del job di trasferimento, consulta Abilita il collegamento dei service account tra progetti.

Concedi l'accesso all'utente

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

Console Google Cloud

  1. Nella console Google Cloud , 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 Service Account User.

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

Concedi l'accesso al service agent

Per consentire all'agente di servizio di generare un token di accesso dal service account gestito dall'utente, concedi all'agente di servizio 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 avere l'indirizzo email dell'agente di servizio. Per trovare l'indirizzo email dell'agente di servizio:

  1. Vai alla pagina di riferimento di 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 specificato qui deve essere quello che utilizzi per gestire Storage Transfer Service.

  3. Fai clic su Esegui.

    L'email dell'agente di servizio viene restituita come valore di accountEmail. Utilizza il formato project-PROJECT_NUMBER@storage-transfer-service..

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

Console Google Cloud

  1. Nella console Google Cloud , 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 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 del service account gestito dall'utente nel formato SA_NAME@PROJECT_ID..
  • SERVICE_AGENT_EMAIL: l'indirizzo email dell'agente di servizio.

Concedi le autorizzazioni per il bucket al account di servizio gestito dall'utente

Concedi le autorizzazioni elencate in Configura l'accesso a un'origine: Cloud Storage e Configura l'accesso a un sink: Cloud Storage al account di servizio gestito dall'utente, anziché all'agente di servizio.

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

Dopo aver concesso le autorizzazioni corrette, puoi specificare il account di servizio gestito dall'utente durante la creazione di un nuovo job di trasferimento.

Console Google Cloud

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

  1. Nella pagina Scegli le 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..
  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 l'indirizzo email del account di servizio (SERVICE_ACCOUNT_NAME@PROJECT_ID.) o 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.",
"transferSpec": {
    ...
  }
}

Recupera l'ID univoco di un account di servizio

Quando configuri l'accesso federato allo spazio di archiviazione AWS S3 o Microsoft Azure o specifichi un account di servizio nelle richieste API REST, potresti aver bisogno dell'ID univoco del account di servizio gestito dall'utente.

Per recuperare il uniqueId:

Console Google Cloud

  1. Vai alla pagina Service account nella console Google Cloud .

    Vai a Service account

  2. Fai clic sull'indirizzo email del account di servizio.

  3. Nella scheda Dettagli, individua l'ID univoco.

gcloud CLI

Utilizza il seguente comando Google Cloud CLI:

gcloud iam service-accounts describe USER_MANAGED_SERVICE_ACCOUNT_EMAIL \
  --format='value(uniqueId)'