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 è in grado di trasferire dati dalle seguenti regioni Amazon S3: af-south-1, ap-east-1, ap-northeast-1, ap-northeast-2, ap-northeast-3, ap-south-1, ap-south-2, ap-southeast-1, ap-southeast-2, ap-southeast-3, ca-central-1, eu-central-1, eu-central-2, eu-north-1, eu-south-1, eu-south-2, eu-west-1, eu-west-2, me-central-1, me-central-1, me-central-1, eu-west-3me-south-1sa-east-1us-east-1us-east-2us-west-1us-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 con 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 obbligatoria.
s3:GetObject Consente a Storage Transfer Service di leggere gli oggetti nel bucket. Obbligatorio se stai trasferendo 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, usa 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 con AWS:

  1. Crea un utente AWS Identity and Access Management (AWS IAM) con un nome facilmente riconoscibile, come transfer-user.

  2. Per il tipo di accesso AWS, seleziona Chiave di accesso - accesso programmatico.

  3. Concedi all'utente uno dei seguenti ruoli:

    • AmazonS3ReadOnlyAccess per fornire un accesso di sola lettura all'origine. Questo consente i trasferimenti, ma non supporta l'eliminazione di oggetti all'origine una volta completato il trasferimento.
    • AmazonS3FullAccess se il trasferimento è configurato per eliminare gli oggetti nell'origine.
    • Un ruolo personalizzato con le autorizzazioni appropriate indicate nella tabella Autorizzazioni richieste in alto. Il codice JSON per le autorizzazioni minime è simile all'esempio seguente:

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

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

console Cloud

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

Per iniziare, consulta Creare trasferimenti.

Interfaccia a riga di comando gcloud

Crea un file JSON con il 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 della chiave all'interno dell'oggetto awsS3DataSource:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_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. che utilizza crittografia avanzata, controllo degli accessi basato sui ruoli e audit logging per proteggere i tuoi secret.

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

Abilita l'API

Attiva l'API Secret Manager.

Abilita l'API

Configurare autorizzazioni aggiuntive

Autorizzazioni utente

L'utente che crea il secret richiede il seguente ruolo:

  • Amministratore Secret Manager (roles/secretmanager.admin)

Scopri come concedere un ruolo.

Autorizzazioni dell'agente di servizio

L'agente di servizio Storage Transfer Service richiede il seguente ruolo IAM:

  • Funzione di accesso ai secret di Secret Manager (roles/secretmanager.secretAccessor)

Per concedere il ruolo all'agente di servizio:

console 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 accesso.

  4. Nella casella di testo Nuove entità, inserisci l'indirizzo email dell'agente di servizio.

  5. Nell'elenco a discesa Seleziona un ruolo, cerca e seleziona Funzione di accesso ai secret di Secret Manager.

  6. Fai clic su Salva.

gcloud

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 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. Nella casella di testo Valore secret, inserisci le credenziali nel seguente formato:

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

  6. Dopo aver creato il secret, prendi nota del nome completo della risorsa:

    1. Seleziona la scheda Panoramica.

    2. Copia il valore dell'ID risorsa. Utilizza il seguente formato:

      projects/1234567890/secrets/SECRET_NAME

gcloud

Per creare un nuovo secret utilizzando lo strumento a riga di comando gcloud, 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 la gestione dei secret, consulta la documentazione di Secret Manager.

Passa il tuo secret al comando di creazione 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": "AWS_BUCKET_NAME",
          "credentialsSecret": "SECRET_RESOURCE_ID",
      },
      "gcsDataSink": {
          "bucketName": "CLOUD_STORAGE_BUCKET_NAME"
      }
  }
}

Autenticazione con identità federata

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

  1. Creare un nuovo ruolo IAM in AWS.

  2. Seleziona Criterio di attendibilità personalizzato come tipo di entità attendibile.

  3. Copia e incolla il seguente criterio 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 il valore subjectID dell'account di servizio gestito da Google che viene creato automaticamente quando inizi a utilizzare Storage Transfer Service. Per recuperare l'subjectID:

    1. Vai alla pagina di riferimento di googleServiceAccounts.get.

      Si apre un riquadro interattivo dal titolo Prova questo metodo.

    2. Nel riquadro, in Parametri di richiesta, inserisci l'ID progetto. Il progetto specificato qui deve essere quello che stai utilizzando per gestire Storage Transfer Service.

    3. Fai clic su Execute (Esegui). subjectId è incluso nella risposta.

  5. Concedi al ruolo uno dei seguenti criteri di autorizzazione:

    • AmazonS3ReadOnlyAccess fornisce l'accesso di sola lettura all'origine. Questo consente i trasferimenti, ma non supporta l'eliminazione di oggetti all'origine una volta completato il trasferimento.
    • AmazonS3FullAccess se il trasferimento è configurato per eliminare gli oggetti nell'origine.
    • Un ruolo personalizzato con le autorizzazioni appropriate indicate nella tabella Autorizzazioni richieste in alto. Il codice JSON per le autorizzazioni minime è simile all'esempio seguente:

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

  7. Una volta creato, visualizza i dettagli del ruolo per recuperare il nome della risorsa Amazon (ARN). Annota questo valore; ha il formato arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME.

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

console Cloud

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

Per iniziare, consulta Creare trasferimenti.

Interfaccia a riga di comando gcloud

Crea un file JSON con il seguente formato:

{
  "roleArn": "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 ARN nell'ambito dell'oggetto awsS3DataSource:

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "roleArn": "ARN"
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_NAME"
  }
}

Librerie client

Consulta gli esempi nella pagina Crea trasferimenti.

Restrizioni IP

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

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

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

Quando al file viene aggiunto un nuovo intervallo, attenderemo almeno 7 giorni prima di utilizzare questo intervallo per le richieste da 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 un criterio del bucket, come descritto nella documentazione di AWS S3: Gestione dell'accesso in base a indirizzi IP specifici.