Salta al contenuto

Perché i miei oggetti Amazon S3 non vengono replicati quando configuro la replica tra i miei bucket?

9 minuti di lettura
0

Ho impostato la replica tra i miei bucket generici Amazon Simple Storage Service (Amazon S3). Tuttavia, gli oggetti non vengono replicati nel bucket di destinazione che si trova nella stessa Regione AWS o in una regione diversa.

Breve descrizione

Nota: puoi utilizzare la replica di Amazon S3 solo per bucket generici. Non puoi utilizzare la replica per bucket di directory e bucket di tabelle.

Per risolvere i problemi relativi agli oggetti Amazon S3 che non vengono replicati nella replica tra Regioni (CRR) o nella replica nella stessa Regione (SRR), controlla le autorizzazioni del bucket di destinazione. Inoltre, controlla le impostazioni di accesso pubblico e le impostazioni di proprietà del bucket.

Dopo aver risolto i problemi che hanno causato l’errore di replica, potrebbero esserci oggetti nel bucket di origine che non sono stati ancora replicati. Per impostazione predefinita, la replica di Amazon S3 non replica oggetti esistenti od oggetti con stato di replica FAILED o REPLICA. Per verificare gli stati di replica degli oggetti, consulta Come posso visualizzare gli oggetti la cui replica non è riuscita da un bucket Amazon S3 a un altro? Per questi oggetti, utilizza S3 Batch Replication.

Risoluzione

Identifica i problemi di configurazione della replica

Carica un oggetto nel bucket di origine per verificare la replica dopo ogni modifica della configurazione. È consigliabile modificare una configurazione alla volta per identificare eventuali problemi di configurazione della replica.

Inoltre, attiva la notifica del tipo di evento s3:Replication:OperationFailedReplication per determinare la causa dell'errore.

Concedi le autorizzazioni minime per Amazon S3

Verifica che il ruolo AWS Identity Access Management (AWS IAM) utilizzato nella regola di replica abbia le autorizzazioni corrette. Se i bucket di origine e di destinazione si trovano in account AWS diversi, verifica che la policy dei bucket dell'account di destinazione conceda le autorizzazioni al ruolo di replica. Il seguente esempio di policy IAM ha le autorizzazioni minime richieste per la replica:

{    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetReplicationConfiguration",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::SourceBucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObjectVersionForReplication",
                "s3:GetObjectVersionAcl",
                "s3:GetObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:s3:::SourceBucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateTags"
            ],
            "Resource": "arn:aws:s3:::DestinationBucket/*"
        }
    ]
}

Nota: sostituisci SourceBucket con il tuo bucket di origine e DestinationBucket con il tuo bucket di destinazione.

In base alle opzioni delle regole di replica, potresti dover concedere autorizzazioni aggiuntive.

Il ruolo IAM deve avere una policy di attendibilità che consenta ad Amazon S3 di assumere il ruolo di replica degli oggetti. Esempio di policy di attendibilità:

{    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

Autorizzazioni di Amazon S3 aggiuntive

Se imposti la regola di replica su Change object ownership to the destination bucket owner (Modifica la proprietà dell'oggetto con il proprietario del bucket di destinazione), devi configurare autorizzazioni aggiuntive.

Nota: se la proprietà dell'oggetto del bucket di destinazione è imposta dal proprietario del bucket, non è necessario cambiare la proprietà dell'oggetto al proprietario del bucket di destinazione nella regola di replica. La modifica avviene per impostazione predefinita.

Per concedere al ruolo IAM le autorizzazioni s3:ObjectOwnerOverrideToBucketOwner, aggiungi la seguente autorizzazione alla policy degli oggetti di Amazon S3:

{    "Effect": "Allow",
    "Action": [
        "s3:ObjectOwnerOverrideToBucketOwner"
    ],
    "Resource": "arn:aws:s3:::DestinationBucket/*"
}

Nota: sostituisci DestinationBucket con il tuo bucket di destinazione.

Inoltre, aggiungi la seguente autorizzazione s3:ObjectOwnerOverrideToBucketOwner alla policy di bucket per l'account di destinazione:

{    "Sid": "1",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role"
    },
    "Action": [
        "s3:ObjectOwnerOverrideToBucketOwner"
    ],
    "Resource": "arn:aws:s3:::DestinationBucket/*"
}

Nota: sostituisci SourceBucket-account-ID con l'account del bucket di origine, source-account-IAM-role con il ruolo IAM dell'account di origine e DestinationBucket con il bucket di destinazione.

Se hai attivato la replica dei contrassegni di eliminazione nella regola di replica, il ruolo IAM deve avere le autorizzazioni s3:ReplicateDelete:

{    "Effect": "Allow",
    "Action": [
        "s3:ReplicateDelete"
    ],
    "Resource": "arn:aws:s3:::DestinationBucket/*"
}

Nota: sostituisci DestinationBucket con il tuo bucket di destinazione.

Se il bucket di destinazione si trova in un altro account, anche il proprietario del bucket di destinazione deve concedere l'autorizzazione nella policy di bucket:

{    "Version": "2012-10-17",
    "Id": "PolicyForDestinationBucket",
    "Statement": [
        {
            "Sid": "Permissions on objects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role"
            },
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateTags",
                "s3:ObjectOwnerOverrideToBucketOwner",
                "s3:ReplicateDelete"
            ],
            "Resource": "arn:aws:s3:::DestinationBucket/*"
        },
        {
            "Sid": "Permissions on bucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role"
            },
            "Action": [
                "s3:GetBucketVersioning",
                "s3:PutBucketVersioning"
            ],
            "Resource": "arn:aws:s3:::DestinationBucket"
        }

    ]
}

Nota: sostituisci arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role con il nome della risorsa Amazon (ARN) del tuo ruolo di replica e DestinationBucket con il tuo bucket di destinazione.

Concedi le autorizzazioni AWS KMS

Se hai crittografato gli oggetti di origine del bucket con una chiave del Servizio AWS di gestione delle chiavi (AWS KMS), la regola di replica deve includere la crittografia AWS KMS.

Per configurare le autorizzazioni IAM, completa i seguenti passaggi:

  1. Apri la console di Amazon S3.
  2. Scegli il bucket di origine.
  3. Scegli la scheda Gestione, quindi in Regole di replica seleziona la regola di replica.
  4. Scegli Modifica.
  5. In Crittografia, scegli Replica oggetti crittografati con AWS KMS.
  6. Nella chiave AWS KMS per la crittografia degli oggetti di destinazione, seleziona una chiave AWS KMS. L'opzione predefinita consiste nell'utilizzare la chiave AWS KMS (aws/S3).

Per esempi di policy di replica, consulta Policy di esempio: utilizzo di SSE-S3 e SSE-KMS con la replica.

Nota: se il bucket di destinazione si trova in un account diverso, specifica una chiave gestita dal cliente AWS KMS di proprietà dell'account di destinazione. La chiave aws/S3 predefinita crittografa gli oggetti con la chiave gestita da AWS di proprietà dell'account di origine. Tuttavia, non puoi condividere la chiave gestita da AWS con un altro account.

Concedi autorizzazioni AWS KMS aggiuntive per scenari con più account

Per crittografare gli oggetti di destinazione utilizzando la chiave AWS KMS dell'account di destinazione, l'account di destinazione deve autorizzare il ruolo di replica nella policy della chiave. Esempio di policy:

{    "Sid": "AllowS3ReplicationSourceRoleToUseTheKey",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role"
    },
    "Action": [
        "kms:GenerateDataKey",
        "kms:Encrypt"
    ],
    "Resource": "*"
}

Nota: sostituisci arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role con l'ARN del ruolo di replica. Se utilizzi un asterisco (*) per Resource, la policy concede l'autorizzazione solo al ruolo di replica. Tuttavia, la policy non consente al ruolo di replica di estendere le sue autorizzazioni.

Inoltre, devi aggiungere le seguenti autorizzazioni minime alla policy IAM del ruolo di replica dall'account di origine:

[      {  
        "Effect": "Allow",  
        "Action": [  
            "kms:Decrypt",  
            "kms:GenerateDataKey"  
        ],  
        "Resource": [  
            "SourceKmsKeyArn"  
        ]  
    },  
    {  
        "Effect": "Allow",  
        "Action": [  
            "kms:GenerateDataKey",  
            "kms:Encrypt"  
        ],  
        "Resource": [  
            "DestinationKmsKeyArn"  
        ]  
    }  
]

Per impostazione predefinita, la policy della chiave AWS KMS concede all'utente root autorizzazioni complete per la chiave. Queste autorizzazioni possono essere delegate ad altri utenti dello stesso account. Puoi anche utilizzare una policy IAM per concedere le autorizzazioni del ruolo di replica alla chiave KMS dell'origine. Questa configurazione consente l'accesso richiesto, a meno che non siano presenti istruzioni Deny nella policy della chiave AWS KMS d'origine.

Verifica la presenza di istruzioni Deny esplicite e Allow condizionali

Importante: prima di rimuovere istruzioni Deny esplicite, verifica il motivo per cui esistono e se influiscono sulla sicurezza dei dati.

Se gli oggetti continuano a non essere replicati dopo aver convalidato le autorizzazioni, verifica la presenza di istruzioni Deny esplicite che possono causare l’errore di replica.

Rimuovi le istruzioni Deny dalla policy del bucket di destinazione o dalla policy della chiave AWS KMS che limitano l'accesso a quanto segue:

  • Intervalli CIDR specifici
  • Endpoint VPC (Virtual Private Cloud)
  • Punti di accesso Amazon S3

Inoltre, rimuovi le istruzioni Deny o i limiti delle autorizzazioni dalla policy del ruolo IAM e dalle policy di controllo dei servizi (SCP) di AWS Organizations negli account di origine e di destinazione.

Controlla le chiavi del bucket S3

Se le chiavi AWS KMS di origine o di destinazione concedono autorizzazioni in base al contesto di crittografia, controlla se utilizzi S3 Bucket Keys. Se i bucket utilizzano S3 Bucket Keys, il contesto di crittografia deve essere quello della risorsa a livello di bucket. Esempio di contesto di crittografia:

"kms:EncryptionContext:aws:s3:arn": ["arn:aws:s3:::SOURCE_BUCKET_NAME"]
"kms:EncryptionContext:aws:s3:arn": ["arn:aws:s3:::DESTINATION_BUCKET_NAME"]

Nota: sostituisci SOURCE_BUCKET_NAME con il bucket di origine e DESTINATION_BUCKET_NAME con il bucket di destinazione.

Se non utilizzi S3 Bucket Keys per i bucket di origine o di destinazione, il contesto di crittografia deve essere la risorsa a livello di oggetto. Esempio di contesto di crittografia:

"kms:EncryptionContext:aws:s3:arn": ["arn:aws:s3:::SOURCE_BUCKET_NAME/*"]
"kms:EncryptionContext:aws:s3:arn": ["arn:aws:s3:::DESTINATION_BUCKET_NAME/*"]

Nota: sostituisci SOURCE_BUCKET_NAME con il bucket di origine e DESTINATION_BUCKET_NAME con il bucket di destinazione.

Controlla le ACL dell'oggetto

Verifica se i bucket di origine e di destinazione utilizzano liste di controllo degli accessi (ACL) che bloccano l'accesso. Se l'oggetto ha un'ACL che consente l'accesso pubblico ma il bucket di destinazione utilizza Blocco dell'accesso pubblico S3, la replica ha esito negativo.

Verifica la proprietà dell'oggetto di origine

Se un altro account ha caricato gli oggetti nel bucket di origine, l'account di origine potrebbe non avere accesso a tali oggetti. Verifica che nel bucket di origine siano attivate le ACL.

Se il bucket di origine ha le ACL disattivate, l'account di origine è il proprietario di tutti gli oggetti nel bucket. Se il bucket di origine ha le ACL attivate, controlla se la proprietà dell'oggetto è impostata su Object owner preferred (Proprietario dell'oggetto preferito) o Proprietario del bucket preferito. Se la proprietà è impostata su Proprietario del bucket preferito, gli oggetti del bucket di origine devono disporre dell'autorizzazione per le ACL bucket-owner-full-control.

L'account di origine può disattivare le ACL per assumere la proprietà di tutti gli oggetti nel relativo bucket. La maggior parte dei casi d'uso non richiede l'uso di ACL per gestire l'accesso. È consigliabile utilizzare la policy IAM e la policy di bucket per gestire l'accesso alle risorse S3. Prima di disattivare le ACL, assicurati che la policy di bucket e la policy IAM concedano le autorizzazioni necessarie per mantenere l'accesso esistente ad Amazon S3.

Specifica il filtro regola di replica corretto

Assicurati di aver specificato correttamente il filtro regola di replica.

Se specifichi un filtro regola con una combinazione di un prefisso chiave e tag oggetto, Amazon S3 esegue un'operazione logica AND. In altre parole, la regola si applica a un sottoinsieme di oggetti con un prefisso chiave specifico e tag specifici.

Informazioni correlate

Esempi di configurazione della replica in tempo reale