Configurare l'accesso a un sink: Cloud Storage

Storage Transfer Service può utilizzare un bucket di destinazione (sink) Cloud Storage in due tipi di trasferimento:

  • Trasferimenti senza agenti: trasferimenti da cloud a cloud, ad esempio da AWS S3, Azure Blob Storage o Cloud Storage a Cloud Storage. Le autorizzazioni vengono concesse all'agente di servizio Storage Transfer Service.

  • Trasferimenti basati su agenti: trasferimenti da file system, HDFS o spazio di archiviazione compatibile con S3 a Cloud Storage che utilizzano agenti di trasferimento e pool di agenti. Le autorizzazioni devono essere concesse sia all'agente di servizio sia all'account dell'agente di trasferimento.

Concessione automatica delle autorizzazioni nella console Google Cloud

Se utilizzi la console Google Cloud per creare un trasferimento senza agente e disponi delle autorizzazioni utente richieste, all'agente di servizio verranno concesse automaticamente le autorizzazioni richieste per il bucket di destinazione.

Puoi saltare i passaggi di questa pagina. Se necessario, configura l'accesso all'origine, quindi crea un trasferimento.

Prerequisiti

  • Autorizzazioni dell'account utente: per concedere i ruoli IAM richiesti elencati in questa pagina, il tuo account utente (o account di servizio gestito dall'utente) deve disporre delle autorizzazioni per modificare le policy IAM nel bucket di destinazione e nel progetto del pool di agenti. Per maggiori dettagli sui requisiti degli account utente, vedi Autorizzazioni degli account utente.

  • Autorizzazioni del progetto di trasferimento basato su agenti: per i trasferimenti basati su agenti, assicurati di aver configurato i ruoli a livello di progetto richiesti per il tuo agente di servizio e l'account dell'agente di trasferimento. Vedi Autorizzazioni a livello di progetto basate su agenti.

Trova l'indirizzo email dell'agente di servizio

L'agente di servizio viene creato automaticamente la prima volta che crei un job di trasferimento, esegui i comandi di configurazione di gcloud transfer, visiti la pagina Storage Transfer nella consoleGoogle Cloud o chiami googleServiceAccounts.get.

Per ottenere l'indirizzo email dell'agente di servizio, che viene utilizzato per identificarlo nei comandi di Storage Transfer Service:

  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 l'ID progetto.
  3. Fai clic su Esegui.

Copia il valore di accountEmail. Utilizza il formato: project-PROJECT_NUMBER@storage-transfer-service..

Concedi le autorizzazioni richieste

Seleziona il tipo di trasferimento per visualizzare i passaggi per concedere l'accesso.

Trasferimento senza agente

I seguenti ruoli predefiniti concedono insieme le autorizzazioni necessarie per il bucket di destinazione all'agente di servizio:

  • Storage Legacy Bucket Reader (roles/storage.legacyBucketReader)
  • Storage Object User (roles/storage.objectUser) o Storage Object Admin (roles/storage.objectAdmin) se conservi gli ACL degli oggetti (ACL_PRESERVE).

Aggiungi l'agente di servizio alla policy IAM del bucket di destinazione:

Console

  1. Nella console Google Cloud , vai alla pagina Bucket in Cloud Storage.

    Vai a Bucket

  2. Fai clic sul menu Altro () del bucket di destinazione.
  3. Scegli Accesso in modifica.
  4. Fai clic su + Aggiungi entità.
  5. In Nuove entità, inserisci l'indirizzo email del service agent.
  6. Seleziona Storage Legacy Bucket Reader dal menu a discesa Seleziona un ruolo.
  7. Fai clic su Aggiungi un altro ruolo e seleziona Storage Object User o Storage Object Admin se conservi gli ACL degli oggetti.
  8. Fai clic su Salva.

gcloud

Esegui questi comandi gcloud storage:

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.OBJECT_ROLE
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader

Sostituisci:

  • BUCKET_NAME: il nome del bucket di destinazione.
  • SERVICE_AGENT_EMAIL: l'indirizzo email dell'agente di servizio.
  • OBJECT_ROLE: specifica objectUser per impostazione predefinita o objectAdmin se conservi gli ACL degli oggetti (ACL_PRESERVE).

API REST

  1. Genera un token di accesso per autenticare la tua richiesta. Se utilizzi l'interfaccia a riga di comando gcloud, esegui:

    gcloud auth print-access-token
  2. Recupera la policy IAM del bucket esistente (GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam), aggiungi le seguenti associazioni al relativo array bindings e salva la policy unita come sink_policy.json:

    {
    "bindings": [
      {
        "role": "roles/storage.OBJECT_ROLE",
        "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
      },
      {
        "role": "roles/storage.legacyBucketReader",
        "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
      }
    ]
    }

    Sostituisci:

  3. Invia una richiesta PUT utilizzando curl:

    curl -X PUT --data-binary @sink_policy.json \
      -H "Authorization: Bearer OAUTH2_TOKEN" \
      -H "Content-Type: application/json" \
      "https://storage./storage/v1/b/BUCKET_NAME/iam"

    Sostituisci:

    • OAUTH2_TOKEN: il token di accesso OAuth 2.0 generato nel passaggio 1.
    • BUCKET_NAME: il nome del bucket di destinazione.

Trasferimento basato su agenti

I seguenti ruoli predefiniti concedono all'agente di servizio l'accesso richiesto al bucket di destinazione:

  • Storage Object Creator (roles/storage.objectCreator)
  • Storage Object Viewer (roles/storage.objectViewer)
  • Storage Legacy Bucket Reader (roles/storage.legacyBucketReader)

Il seguente ruolo concede l'accesso richiesto al bucket di destinazione all'account dell'agente di trasferimento:

  • Storage Object User (roles/storage.objectUser)

Concedi questi ruoli nel bucket di destinazione.

Console

  1. Nella console Google Cloud , vai alla pagina Bucket in Cloud Storage.

    Vai a Bucket

  2. Fai clic sul menu Extra bucket () per il bucket di destinazione e seleziona accesso in modifica.
  3. Fai clic su + Aggiungi entità.
  4. In Nuove entità, inserisci l'indirizzo email del service agent.
  5. Seleziona Storage Object Creator, Storage Object Viewer e Storage Legacy Bucket Reader dal menu a discesa Seleziona un ruolo.
  6. Fai di nuovo clic su + Aggiungi entità.
  7. Inserisci l'indirizzo email del tuo account agente di trasferimento. Si tratta dell'utente o del account di servizio utilizzato durante l'installazione degli agenti di trasferimento. Ad esempio, my-agent-sa@PROJECT_ID. o user@example.com.
  8. Seleziona Storage Object User dal menu a discesa Seleziona un ruolo.
  9. Fai clic su Salva.

gcloud

  1. Concedi i ruoli di logging e visualizzatore all'agente di servizio:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreator
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectViewer
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
  2. Concedi i ruoli di scrittura e gestione all'account dell'agente di trasferimento:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member=serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT --role=roles/storage.objectUser

    Sostituisci:

    • BUCKET_NAME: il nome del bucket di destinazione.
    • SERVICE_AGENT_EMAIL: l'indirizzo email dell'agente di servizio.
    • serviceAccount_OR_user: specifica serviceAccount se l'account dell'agente di trasferimento è un account di servizio o user se gli agenti sono stati installati con un account utente.
    • TRANSFER_AGENT_ACCOUNT: l'indirizzo email dell'account che ha installato gli agenti di trasferimento. Ad esempio, my-agent-sa@PROJECT_ID. o user@example.com.

API REST

  1. Genera un token di accesso per autenticare la tua richiesta. Se utilizzi l'interfaccia a riga di comando gcloud, esegui:

    gcloud auth print-access-token
  2. Recupera la policy IAM del bucket esistente (GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam), aggiungi le seguenti associazioni al relativo array bindings e salva la policy unita come agent_sink_policy.json:

    {
      "bindings": [
        {
          "role": "roles/storage.objectCreator",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.objectViewer",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.legacyBucketReader",
          "members": ["serviceAccount:SERVICE_AGENT_EMAIL"]
        },
        {
          "role": "roles/storage.objectUser",
          "members": ["serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT"]
        }
      ]
    }

    Sostituisci:

    • SERVICE_AGENT_EMAIL: l'indirizzo email dell'agente di servizio.
    • serviceAccount_OR_user: specifica serviceAccount se l'account dell'agente di trasferimento è un account di servizio o user se gli agenti sono stati installati con un account utente.
    • TRANSFER_AGENT_ACCOUNT: l'indirizzo email dell'account che ha installato gli agenti di trasferimento. Ad esempio, my-agent-sa@PROJECT_ID. o user@example.com.
  3. Aggiorna la policy del bucket tramite curl:

    curl -X PUT --data-binary @agent_sink_policy.json \
        -H "Authorization: Bearer OAUTH2_TOKEN" \
        -H "Content-Type: application/json" \
        "https://storage./storage/v1/b/BUCKET_NAME/iam"

    Sostituisci:

    • OAUTH2_TOKEN: il token di accesso OAuth 2.0 generato nel passaggio 1.
    • BUCKET_NAME: il nome del bucket di destinazione.

Riferimento alle autorizzazioni granulari

Seleziona il tipo di trasferimento per visualizzare i ruoli e le autorizzazioni richiesti.

Trasferimento senza agente

Per i trasferimenti senza agenti, le autorizzazioni devono essere concesse all'agente di servizio Storage Transfer Service:

Autorizzazione Descrizione
storage.buckets.get Consente all'agente di servizio di ispezionare i metadati e la località del bucket.
storage.objects.create Consente all'agente di servizio di scrivere gli oggetti trasferiti nel bucket di destinazione.
storage.objects.get Consente di visualizzare gli oggetti e i metadati esistenti. Obbligatorio se il trasferimento è configurato per sovrascrivere gli oggetti nel sink quando sono diversi o mai.
storage.objects.list Consente di elencare gli oggetti nel bucket di destinazione. Obbligatorio se si verifica se gli oggetti esistono già nel sink.
storage.objects.delete Consente di eliminare gli oggetti nel bucket di destinazione. Obbligatorio se sono abilitate le opzioni di sovrascrittura o eliminazione di oggetti univoci.
storage.objects.setIamPolicy Consente di impostare gli ACL degli oggetti nel bucket di destinazione. Obbligatorio se è abilitata la conservazione degli ACL degli oggetti (ACL_PRESERVE).
storage.folders.create
storage.folders.get
Consente di creare e leggere cartelle. Obbligatorio per il trasferimento a un bucket di destinazione con spazio dei nomi gerarchico abilitato.

Trasferimento basato su agenti

Per i trasferimenti basati su agenti a una destinazione Cloud Storage, le autorizzazioni sono suddivise tra due entità:

  • Agente di servizio: richiede le autorizzazioni per scrivere i log di trasferimento e verificare l'esistenza degli oggetti nel bucket di destinazione.

  • Account agente di trasferimento: il account di servizio o l'account utente che esegue gli agenti di trasferimento che scrivono file in Cloud Storage.

Autorizzazioni agente di servizio

Autorizzazione Descrizione
storage.buckets.get Consente all'agente di servizio di ispezionare i metadati e la località del bucket.
storage.objects.create Consente di creare log di trasferimento nel bucket.
storage.objects.get Consente di verificare se gli oggetti sono già stati trasferiti.

Trasferisci le autorizzazioni dell'account agente

Autorizzazione Descrizione
storage.objects.create Consente agli agenti di scrivere oggetti nel bucket di destinazione durante il trasferimento.
storage.objects.get Consente agli agenti di leggere i dati e i metadati degli oggetti nel bucket di destinazione.
storage.objects.list Consente agli agenti di elencare gli oggetti esistenti nel bucket di destinazione.
storage.objects.delete Obbligatorio se il trasferimento è configurato per sovrascrivere o eliminare oggetti nel sink.
storage.multipartUploads.create
storage.multipartUploads.abort
storage.multipartUploads.listParts
storage.multipartUploads.list
Consente agli agenti di eseguire caricamenti multiparte per file di grandi dimensioni. Incluso automaticamente in roles/storage.objectUser.
storage.folders.create
storage.folders.get
Consente agli agenti di creare e leggere cartelle durante il trasferimento a un bucket di destinazione con lo spazio dei nomi gerarchico abilitato.

Passaggi successivi