Per i trasferimenti senza agenti, Storage Transfer Service utilizza per impostazione predefinita un service agent per trasferire i dati tra l'origine e la destinazione. Concedi le autorizzazioni all'agente di servizio 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 per tutti i bucket coinvolti in ogni trasferimento.
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 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
Gli scenari seguenti mostrano diverse opzioni di autorizzazione utilizzando 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 le autorizzazioni di scrittura sui bucket A, B, C e D.
Qualsiasi utente con le autorizzazioni corrette per creare un job di trasferimento può trasferire dati nei bucket A, B, C e D o da questi bucket.
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 nel bucket sbagliato o di estrarli da questo.
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 sui bucket A e B.
- Al account di servizio gestito dall'utente n. 2 vengono concesse le autorizzazioni per i 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 1 e 2.
In questo caso:
- Alpha può essere trasferito solo tra i bucket A e B.
- Bravo può essere trasferito solo tra i bucket C e D.
- Charlie può trasferire i dati solo tra i bucket A e B e tra C e D.
- Charlie non può essere trasferito 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.
- All'agente di servizio vengono concesse le autorizzazioni di scrittura sui bucket A e B.
- Al account di servizio gestito dall'utente n. 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 n. 1.
In questo caso:
- Qualsiasi utente con le autorizzazioni corrette per creare un job di trasferimento può trasferire dati nei bucket A e B o da questi bucket. Non possono essere trasferiti nel bucket C o D o viceversa.
- L'utente Alpha può trasferire elementi nei bucket A e B o da questi bucket.
- Alpha può trasferire fuori dal bucket C nel bucket D.
- Alpha non può essere trasferito 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 al account di servizio gestito dall'utente.
- Per consentire all'agente di servizio di generare un token di accesso dall'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 l'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 account di servizio gestito dall'utente, devi disporre del ruolo Creazione service account (
roles/iam.serviceAccountCreator
) per il progetto. - Per concedere l'accesso all'utente e all'agente di servizio all'account di servizio gestito dall'utente, devi disporre del ruolo Amministratore service account (
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 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 account di servizio gestito dall'utente e
assegna il ruolo Utente service account (roles/iam.serviceAccountUser
).
L'account utente è l'account utilizzato per creare o aggiornare il job di trasferimento.
Console Google Cloud
Nella console Google Cloud , vai alla pagina Service Accounts.
Seleziona un progetto.
Fai clic sull'indirizzo email del account di servizio gestito dall'utente.
Seleziona la scheda Autorizzazioni.
Fai clic su
Concedi l'accesso.Inserisci l'indirizzo email dell'utente. Ad esempio,
user1@example.com
.Dall'elenco a discesa Ruolo, seleziona Utente account di servizio.
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.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 service account (roles/iam.serviceAccountTokenCreator
).
Per concedere l'accesso, devi disporre dell'indirizzo email dell'agente di servizio. Per trovare l'email dell'agente di servizio:
Vai alla pagina di riferimento di
googleServiceAccounts.get
.Si apre un riquadro interattivo intitolato Prova questo metodo.
Nel riquadro, in Parametri della richiesta, inserisci il tuo ID progetto. Il progetto che specifichi qui deve essere quello che utilizzi per gestire Storage Transfer Service.
Fai clic su Esegui.
L'email dell'agente di servizio viene restituita come valore di
accountEmail
. Utilizza il formatoproject-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
.
Poi, per concedere all'agente di servizio l'accesso al account di servizio gestito dall'utente:
Console Google Cloud
Nella console Google Cloud , vai alla pagina Service Accounts.
Seleziona un progetto.
Fai clic sull'indirizzo email del account di servizio gestito dall'utente.
Seleziona la scheda Autorizzazioni.
Fai clic su
Concedi l'accesso.Inserisci l'indirizzo email dell'agente di servizio.
Dall'elenco a discesa Ruolo, seleziona Creatore token account di servizio.
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.iam.gserviceaccount.com
. - SERVICE_AGENT_EMAIL: L'indirizzo email dell'agente del servizio.
Concedi le autorizzazioni del bucket al account di servizio gestito dall'utente
Concedi le autorizzazioni elencate in Autorizzazioni dell'agente di servizio gestito da Google 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
Una volta concesse 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:
- Nella pagina Scegli impostazioni, individua la sezione Tipo di service account.
- Seleziona Service account gestito dall'utente.
- Inserisci l'email del account di servizio gestito dall'utente, utilizzando il formato
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
. - 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
.
Il valore deve utilizzare il formato
projects/-/serviceAccounts/ACCOUNT_EMAIL_OR_UNIQUEID
.
Nella stringa sono accettati l'email del account di servizio
(SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
)
o l'ID univoco (123456789012345678901
). Il carattere jolly -
è obbligatorio; sostituirlo con un ID progetto non è valido.
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": {
...
}
}