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 stai trasferendo la versione attuale di tutti gli oggetti. Se il manifest specifica una versione dell'oggetto, utilizza s3:GetObjectVersion invece.
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.

Autenticazione tramite le credenziali di accesso

Per utilizzare un ID chiave di accesso e una chiave segreta per l'autenticazione ad 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 Chiave di accesso - accesso programmatico.

  3. Concedi uno dei seguenti ruoli all'utente:

    • AmazonS3ReadOnlyAccess per fornire l'accesso di sola lettura all'origine. Consente i trasferimenti, ma non supporta l'eliminazione degli oggetti all'origine al termine del trasferimento.
    • AmazonS3FullAccess se il trasferimento è configurato per eliminare gli oggetti all'origine.
    • Un ruolo personalizzato con le autorizzazioni appropriate dalla tabella Autorizzazioni obbligatorie. Il JSON per le autorizzazioni minime è simile all'esempio seguente:

      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 chiave di accesso e della chiave di accesso segreta quando l'utente viene creato correttamente.

La modalità di trasmissione dell'ID chiave di accesso e della chiave di accesso segreta a Storage Transfer Service dipende dall'interfaccia utilizzata per avviare il trasferimento.

Google Cloud Console

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

Per iniziare, consulta Creare trasferimenti per iniziare.

gcloud CLI

Crea un file JSON nel seguente formato:

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

Trasmetti 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 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 Creare trasferimenti.

Salvare 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 sui ruoli e la registrazione delle attività di audit per proteggere i tuoi secret.

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

Abilitare l'API

Abilita l'API Secret Manager.

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 utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

Abilitare l'API

Configurare autorizzazioni aggiuntive

Autorizzazioni utente

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

  • Secret Manager Admin (roles/secretmanager.admin)

Scopri come concedere un ruolo.

Autorizzazioni service agent

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

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

Per concedere il ruolo al service agent:

Google Cloud Console

  1. Segui le istruzioni per recuperare l'indirizzo email del service agent.

  2. Vai alla pagina IAM nella Google Cloud console.

    Vai a IAM

  3. Fai clic su Concedi l'accesso.

  4. Nel campo Nuove entità, inserisci l'indirizzo email del service agent.

  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 al service agent.

  1. Segui le istruzioni per recuperare l'indirizzo email del service agent.

  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'
    

Creare un secret

Crea un secret con Secret Manager:

Google Cloud Console

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

    Vai a Secret Manager

  2. Fai clic su Crea secret.

  3. Inserisci un nome.

  4. Nel campo 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. Una volta creato il secret, prendi nota del nome completo della risorsa secret:

    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, trasmetti 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 secret:

gcloud secrets describe SECRET_NAME

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

projects/1234567890/secrets/SECRET_NAME

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

Trasmettere 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.

Trasmetti 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"
    }
  }
}

Autenticazione tramite identità federata

Per utilizzare l'identità federata per l'autenticazione ad 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"