Salta al contenuto

Come posso copiare oggetti S3 da un altro account AWS?

5 minuti di lettura
0

Voglio copiare oggetti Amazon Simple Storage Service (Amazon S3) tra account AWS e assicurarmi che l'account di destinazione sia il proprietario degli oggetti copiati.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Gli oggetti in Amazon S3 non sono automaticamente di proprietà dell'account AWS che li carica. Quando modifichi l'impostazione Proprietà dell'oggetto S3, è consigliabile utilizzare l'impostazione Proprietario del bucket applicato. L'impostazione Proprietario del bucket applicato semplifica la gestione degli accessi per i dati archiviati in Amazon S3. Tuttavia, questa opzione disattiva tutte le liste di controllo degli accessi (ACL) del bucket e le ACL su qualsiasi oggetto del bucket.

Quando utilizzi l'impostazione Proprietario del bucket applicato nella Proprietà dell'oggetto S3, lo stesso proprietario del bucket possiede automaticamente tutti gli oggetti in un bucket Amazon S3. Per i bucket esistenti, l'account che carica l'oggetto S3 è il proprietario dell'oggetto a meno che le ACL non vengano esplicitamente disattivate.

Se il metodo esistente si basa sulle ACL per condividere oggetti, identifica i principali che utilizzano le ACL per accedervi. Per ulteriori informazioni, consulta Prerequisiti per la disattivazione delle ACL.

Se non riesci a disattivare le ACL, completa questi passaggi per avere a proprietà degli oggetti fino a quando non potrai modificare la policy del bucket:

  1. Nell'account di origine, crea una policy AWS Identity and Access Management (IAM) gestita dal cliente che concede a un'identità IAM l'accesso multi-utente. L'utente IAM deve avere accesso per recuperare oggetti dal bucket di origine e inserirli nel bucket di destinazione.
    Esempio di policy:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket",
                    "s3:GetObject"
                ],
                "Resource": [
                    "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET",
                    "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET/*"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket",
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": [
                    "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET",
                    "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*"
                ]
            }
        ]
    }

    Nota: l'esempio precedente di policy IAM include solo le autorizzazioni minime richieste per elencare oggetti e copiare oggetti in bucket multi-account. Personalizza le azioni S3 consentite in base al caso d'uso. Per esempio, se l'utente deve copiare oggetti con tag oggetto, devi concedere anche le autorizzazioni per s3:getObjectTagging. Se riscontri errori di autorizzazione, isola i problemi relativi a IAM come utente amministratore.

  2. Nell'account di origine, collega la policy gestita dal cliente all'identità IAM.

  3. Nell'account di destinazione, imposta Proprietà dell’oggetto S3 sul bucket di destinazione come Proprietario del bucket preferito. L'account di destinazione ora è automaticamente proprietario dei nuovi oggetti caricati con l'ACL impostata su bucket-owner-full-control.

  4. Nell'account di destinazione, modifica la policy del bucket di destinazione per concedere all'account di origine l'autorizzazione per caricare oggetti. Inoltre, includi una condizione nella policy del bucket che richieda il caricamento di oggetti per impostare l'ACL bucket-owner-full-control.
    Esempio di policy:

    {
        "Version": "2012-10-17",
        "Id": "Policy1611277539797",
        "Statement": [
            {
                "Sid": "Stmt1611277535086",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::222222222222:user/Jane"
                },
                "Action": "s3:PutObject",
                "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/*",
                "Condition": {
                    "StringEquals": {
                        "s3:x-amz-acl": "bucket-owner-full-control"
                    }
                }
            },
            {
                "Sid": "Stmt1611277877767",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::222222222222:user/Jane"
                },
                "Action": "s3:ListBucket",
                "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET"
            }
        ]
    }

    Nota: sostituisci destination-DOC-EXAMPLE-BUCKET con il nome del bucket di destinazione e arn:aws:iam::222222222222:user/Jane con l'ARN dell'identità IAM dell'account di origine.
    L'esempio precedente di policy del bucket include solo le autorizzazioni minime richieste per caricare un oggetto con l'ACL richiesta. Personalizza le azioni S3 consentite in base al tuo caso d'uso.

  5. Assicurati che l'ACL sia impostata su bucket-owner-full-control in modo che l'identità IAM dell'account di origine possa caricare oggetti nel bucket di destinazione. Ad esempio, l'identità IAM di origine deve eseguire il comando AWS CLI cp con l'opzione —acl:

    aws s3 cp s3://source-DOC-EXAMPLE-BUCKET/object.txt s3://destination-DOC-EXAMPLE-BUCKET/object.txt --acl bucket-owner-full-control

    Nell'esempio precedente, il comando copia il file object.txt. Per copiare un'intera cartella, esegui il seguente comando:

    aws s3 cp directory/ s3://bucketname/directory --recursive --acl bucket-owner-full-control
    

    Nota: se ricevi un errore AccessDenied, consulta Risolvi i problemi relativi all'accesso negato (403 Forbidden) errori in Amazon S3.

Importante: se il tuo bucket S3 ha una crittografia predefinita con il Servizio AWS di gestione delle chiavi (AWS KMS) attivato, devi modificare anche le autorizzazioni della chiave AWS KMS. Per istruzioni, consulta Il mio bucket Amazon S3 dispone di una crittografia predefinita che utilizza una chiave AWS KMS personalizzata. Come posso consentire agli utenti di scaricare e caricare contenuti nel bucket?

Per copiare grandi quantità di dati tra bucket S3, consulta What's the best way to transfer large amounts of data from one Amazon S3 bucket to another? ( Qual è il modo migliore per trasferire grandi quantità di dati da un bucket Amazon S3 a un altro?) Inoltre, consulta Come faccio a ottimizzare il trasferimento di grandi quantità di dati su Amazon S3?

Informazioni correlate

Esempi di policy del bucket Amazon S3

Esempio 2: Esempio 2: il proprietario del bucket concede autorizzazioni per il bucket multi-account

Come posso cambiare la proprietà degli oggetti per un bucket Amazon S3 quando questi vengono caricati da altri account AWS?

Utilizzo di una policy basata sulle risorse per delegare l'accesso a un bucket Amazon S3 in un altro account