Configurare l'accesso a un'origine: Amazon S3

Puoi configurare l'accesso a un bucket Amazon S3 utilizzando uno dei due metodi seguenti:

Aree geografiche supportate

Storage Transfer Service supporta le seguenti regioni Amazon S3:
af-south-1
ap-east-1
ap-east-2
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ap-southeast-2
ap-southeast-3
ap-southeast-4
ap-southeast-5
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
il-central-1
me-central-1
me-south-1
sa-east-1
us-east-1
us-east-2
us-west-1
us-west-2
us-gov-east-1
us-gov-west-1
I trasferimenti che utilizzano la rete privata gestita da Google supportano le seguenti regioni AWS:
ap-east-1
ap-northeast-1
ap-northeast-2
ap-northeast-3
ap-south-1
ap-south-2
ap-southeast-1
ca-central-1
ca-west-1
eu-central-1
eu-central-2
eu-north-1
eu-south-1
eu-south-2
eu-west-1
eu-west-2
eu-west-3
us-east-1
us-east-2
us-west-1
us-west-2
 

Autorizzazioni obbligatorie

Per utilizzare Storage Transfer Service per spostare i dati da un bucket Amazon S3, il tuo account utente o il ruolo di identità federata deve disporre delle autorizzazioni appropriate per il bucket:

Autorizzazione Descrizione Utilizza
s3:ListBucket Consente a Storage Transfer Service di elencare gli oggetti nel bucket. Sempre obbligatorio.
s3:GetObject Consente a Storage Transfer Service di leggere gli oggetti nel bucket. Obbligatorio se trasferisci la versione corrente di tutti gli oggetti. Se il manifest specifica una versione dell'oggetto, utilizza s3:GetObjectVersion.
s3:GetObjectVersion Consente a Storage Transfer Service di leggere versioni specifiche degli oggetti nel bucket. Obbligatorio se il manifest specifica una versione dell'oggetto. In caso contrario, utilizza s3:GetObject.
s3:DeleteObject Consente a Storage Transfer Service di eliminare gli oggetti nel bucket. Obbligatorio se imposti deleteObjectsFromSourceAfterTransfer su true.

Esegui l'autenticazione utilizzando le credenziali di accesso

Per utilizzare un ID chiave di accesso e una chiave segreta per l'autenticazione su AWS:

  1. Crea un utente AWS Identity and Access Management (AWS IAM) con un nome che puoi riconoscere, ad esempio transfer-user.

  2. Per il tipo di accesso AWS, seleziona Access key - programmatic access (Chiave di accesso - accesso programmatico).

  3. Concedi all'utente uno dei seguenti ruoli:

    • AmazonS3ReadOnlyAccess per fornire l'accesso di sola lettura all'origine. In questo modo sono consentiti i trasferimenti, ma non è supportata l'eliminazione degli oggetti nell'origine una volta completato il trasferimento.
    • AmazonS3FullAccess se il trasferimento è configurato per eliminare gli oggetti all'origine.
    • Un ruolo personalizzato con le autorizzazioni appropriate della tabella Autorizzazioni richieste. Il codice JSON per le autorizzazioni minime è simile al seguente esempio:

      Regioni AWS standard

      {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME/*",
            "arn:aws:s3:::S3_BUCKET_NAME"
          ]
        }
      ]
      }

      Regioni AWS GovCloud

      {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws-us-gov:s3:::S3_BUCKET_NAME/*",
            "arn:aws-us-gov:s3:::S3_BUCKET_NAME"
          ]
        }
      ]
      }
  4. Prendi nota dell'ID della chiave di accesso e della chiave di accesso segreta quando l'utente viene creato correttamente.

Il modo in cui passi l'ID della chiave di accesso e la chiave di accesso segreta a Storage Transfer Service dipende dall'interfaccia che utilizzi per avviare il trasferimento.

Console Google Cloud

Inserisci i valori direttamente nel modulo di creazione del job di trasferimento.

Per iniziare, consulta Crea trasferimenti.

gcloud CLI

Crea un file JSON nel seguente formato:

{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}

Passa la posizione del file al comando gcloud transfer jobs create utilizzando il flag source-creds-file:

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/KEYFILE.JSON

API REST

L'oggetto transferSpec deve contenere le informazioni sulla chiave come parte dell'oggetto awsS3DataSource:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "S3_BUCKET_NAME",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  "gcsDataSink": {
    "bucketName": "GCS_BUCKET_NAME"
  }
}

Librerie client

Consulta gli esempi nella pagina Crea trasferimenti.

Salva le credenziali di accesso in Secret Manager

Secret Manager è un servizio sicuro che archivia e gestisce dati sensibili come le password. Utilizza una crittografia efficace, il controllo degli accessi basato su ruoli e l'audit logging per proteggere i tuoi secret.

Storage Transfer Service può utilizzare Secret Manager per proteggere le tue credenziali di accesso ad AWS. Carica le tue credenziali in Secret Manager, quindi passa il nome della risorsa secret a Storage Transfer Service.

Abilita l'API

Abilita l'API Secret Manager, se non è già abilitata.

Ruoli richiesti per abilitare le API

Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

Abilitare l'API

Configura autorizzazioni aggiuntive

Autorizzazioni utente

L'utente che crea il secret deve disporre del seguente ruolo:

  • Secret Manager Admin (roles/secretmanager.admin)

Scopri come concedere un ruolo.

Autorizzazioni agente di servizio

Il service agent di Storage Transfer Service richiede il seguente ruolo IAM:

  • Secret Manager Secret Accessor (roles/secretmanager.secretAccessor)

Per concedere il ruolo al tuo agente di servizio:

Console Google Cloud

  1. Segui le istruzioni per recuperare l'email dell'agente di servizio.

  2. Vai alla pagina IAM nella console Google Cloud .

    Vai a IAM

  3. Fai clic su Concedi l'accesso.

  4. Nel campo Nuove entità, inserisci l'indirizzo email dell'agente di servizio.

  5. Nel menu a discesa Seleziona un ruolo, cerca e seleziona Secret Manager Secret Accessor.

  6. Fai clic su Salva.

gcloud CLI

Utilizza il comando gcloud projects add-iam-policy-binding per aggiungere il ruolo IAM all'agente di servizio.

  1. Segui le istruzioni per recuperare l'email dell'agente di servizio.

  2. Dalla riga di comando, inserisci il seguente comando:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:SERVICE_AGENT_EMAIL' \
      --role='roles/secretmanager.secretAccessor'
    

Crea un secret

Crea un secret con Secret Manager:

Console Google Cloud

  1. Vai alla pagina Secret Manager nella console Google Cloud .

    Vai a Secret Manager

  2. Fai clic su Crea secret.

  3. Inserisci un nome.

  4. Nel campo Valore secret, inserisci le tue credenziali nel seguente formato:

    {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
    
  5. Fai clic su Crea secret.

  6. Una volta creato il secret, prendi nota del nome completo della risorsa:

    1. Seleziona la scheda Panoramica.

    2. Copia il valore di ID risorsa. Utilizza il seguente formato:

      projects/1234567890/secrets/SECRET_NAME

gcloud CLI

Per creare un nuovo secret utilizzando gcloud CLI, passa le credenziali in formato JSON al comando gcloud secrets create:

printf '{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-

Recupera il nome completo della risorsa del secret:

gcloud secrets describe SECRET_NAME

Prendi nota del valore di name nella risposta. Utilizza il seguente formato:

projects/1234567890/secrets/SECRET_NAME

Per maggiori dettagli sulla creazione e sulla gestione dei secret, consulta la documentazione di Secret Manager.

Passa il secret al comando di creazione del job

L'utilizzo di Secret Manager con Storage Transfer Service richiede l'utilizzo dell'API REST per creare un job di trasferimento.

Passa il nome della risorsa Secret Manager come valore del campo transferSpec.awsS3DataSource.credentialsSecret:

POST https://storagetransfer.googleapis.com/v1/transferJobs

{
  "description": "Transfer with Secret Manager",
  "status": "ENABLED",
  "projectId": "PROJECT_ID",
  "transferSpec": {
    "awsS3DataSource": {
      "bucketName": "S3_BUCKET_NAME",
      "credentialsSecret": "SECRET_RESOURCE_ID"
    },
    "gcsDataSink": {
      "bucketName": "GCS_BUCKET_NAME"
    }
  }
}

Esegui l'autenticazione utilizzando l'identità federata

Per utilizzare l'identità federata per l'autenticazione su AWS:

  1. Crea un nuovo ruolo IAM in AWS.

  2. Seleziona Policy di attendibilità personalizzata come tipo di entità attendibile.

  3. Copia e incolla la seguente policy di attendibilità:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:sub": "SUBJECT_ID"
            }
          }
        }
      ]
    }
    
  4. Sostituisci SUBJECT_ID con uno dei seguenti valori:

    Agente di servizio

    Se il job di trasferimento non specifica un serviceAccount (ovvero non stai delegando le autorizzazioni dell'agente di servizio a un service account gestito dall'utente), sostituisci SUBJECT_ID con l'subjectId dell'agente di servizio che viene creato automaticamente quando inizi a utilizzare Storage Transfer Service. Per recuperare subjectId:

    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. Il subjectId è incluso nella risposta.

    Account di servizio gestito dall'utente

    Se deleghi le autorizzazioni dell'agente di servizio a un service account gestito dall'utente, il valore di SUBJECT_ID è l'ID univoco del account di servizio (uniqueId).

    Per recuperare uniqueId, consulta Recupera l'ID univoco di un account di servizio account.

  5. Concedi al ruolo una delle seguenti policy sulle autorizzazioni:

    • AmazonS3ReadOnlyAccess fornisce l'accesso di sola lettura all'origine. In questo modo sono consentiti i trasferimenti, ma non è supportata l'eliminazione degli oggetti nell'origine una volta completato il trasferimento.
    • AmazonS3FullAccess se il trasferimento è configurato per eliminare gli oggetti all'origine.
    • Un ruolo personalizzato con le autorizzazioni appropriate della tabella Autorizzazioni richieste. Il codice JSON per le autorizzazioni minime è simile al seguente esempio:

      Regioni AWS standard

      {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::S3_BUCKET_NAME/*",
            "arn:aws:s3:::S3_BUCKET_NAME"
          ]
        }
      ]
      }

      Regioni AWS GovCloud

      {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws-us-gov:s3:::S3_BUCKET_NAME/*",
            "arn:aws-us-gov:s3:::S3_BUCKET_NAME"
          ]
        }
      ]
      }
  6. Assegna un nome al ruolo e crealo.

Una volta creato, visualizza i dettagli del ruolo per recuperare il nome della risorsa Amazon (ARN) del ruolo. Prendi nota di questo valore, che ha uno dei seguenti formati:

  • Per le regioni AWS standard: arn:aws:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME
  • Per le regioni AWS GovCloud: arn:aws-us-gov:iam::AWS_ACCOUNT:role/AWS_ROLE_NAME

Il modo in cui passi l'ARN del ruolo a Storage Transfer Service dipende dall'interfaccia che utilizzi per avviare il trasferimento.

Console Google Cloud

Inserisci l'ARN del ruolo direttamente nel modulo di creazione del job di trasferimento.

Per iniziare, consulta Crea trasferimenti.

gcloud CLI

Crea un file JSON nel seguente formato:

{
  "roleArn": "AWS_ROLE_ARN"
}

Passa la posizione del file al comando gcloud transfer jobs create utilizzando il flag source-creds-file:

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/ARNFILE.JSON

API REST

L'oggetto transferSpec deve contenere le informazioni sull'ARN del ruolo come parte dell'oggetto awsS3DataSource:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "roleArn": "AWS_ROLE_ARN"
  },
  "gcsDataSink": {
    "bucketName": "GCS_BUCKET_NAME"
  }
}

Librerie client

Consulta gli esempi nella pagina Crea trasferimenti.

Limitazioni IP

Se il tuo progetto AWS utilizza limitazioni IP per l'accesso allo spazio di archiviazione, devi aggiungere gli intervalli IP utilizzati dai worker di Storage Transfer Service all'elenco di IP consentiti.

Poiché questi intervalli IP possono cambiare, pubblichiamo i valori attuali come file JSON a un indirizzo permanente:

https://www.gstatic.com/storage-transfer-service/ipranges.json

Quando un nuovo intervallo viene aggiunto al file, attendiamo almeno 7 giorni prima di utilizzarlo per le richieste di Storage Transfer Service.

Ti consigliamo di estrarre i dati da questo documento almeno una volta alla settimana per mantenere aggiornata la configurazione della sicurezza. Per uno script Python di esempio che recupera gli intervalli IP da un file JSON, consulta questo articolo della documentazione di Virtual Private Cloud.

Per aggiungere questi intervalli come IP consentiti, utilizza il campo Condition in una policy del bucket, come descritto nella documentazione di AWS S3: Gestione dell'accesso in base a indirizzi IP specifici.