He configurado la replicación entre mis buckets, pero los objetos nuevos no se replican. ¿Cómo lo soluciono?

9 minutos de lectura
0

He configurado la replicación entre regiones (CRR) o la replicación en la misma región (SRR) entre mis buckets de Amazon Simple Storage Service (Amazon S3). Sin embargo, los objetos no se replican en el bucket de destino.

Solución

Para solucionar los problemas con los objetos que no se replican en el bucket de destino, compruebe los tipos de permisos del bucket. Compruebe también la configuración de acceso público y la de propiedad del bucket.

**Consejo:**Asegúrese de probar la replicación después de hacer cualquier cambio en la configuración. Para ello, cargue un objeto en el bucket de origen. Se recomienda realizar cambios de uno en uno en la configuración para identificar cualquier problema en la configuración de la replicación.

Tras resolver los problemas que causaban errores en la replicación, es posible que haya objetos en el bucket de origen que no se hayan replicado. De forma predeterminada, la replicación de S3 no replica los objetos existentes ni los objetos con un estado de replicación FALLIDO oRÉPLICA. Replique estos objetos mediante la replicación por lotes de S3.

Permisos mínimos de Amazon S3

Confirme que el rol de AWS Identity Access Management (IAM) tiene los permisos correctos. Si los buckets de origen y de destino se encuentran en cuentas diferentes, confirme que la política de bucket de la cuenta de destino también otorgue los permisos suficientes para el rol de replicación.

En el siguiente ejemplo, se muestra una política de IAM con los permisos mínimos necesarios para la replicación.    Según las opciones de la regla de replicación, es posible que deba conceder permisos adicionales.

{
    "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: Sustituya SourceBucket y DestinationBucket por los nombres de sus buckets de S3.

El rol de IAM debe tener una política de confianza que permite a Amazon S3 asumir el rol de replicar objetos. Por ejemplo:

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

Si el bucket de destino está en otra cuenta, la política de bucket de destino debe conceder los siguientes permisos:

{
    "Version": "2012-10-17",
    "Id": "Policy1644945280205",
    "Statement": [
        {
            "Sid": "Stmt1644945277847",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789101:role/s3-replication-role"
            },
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateTags"
            ],
            "Resource": "arn:aws:s3:::DestinationBucket/*"
        }
    ]
}

Nota: Sustituya arn:aws:iam::123456789101:role/s3-replication-role por el ARN de su rol de replicación.    

Permisos adicionales de Amazon S3

Si se establece la regla de replicación en Cambiar la propiedad del objeto al propietario del bucket de destino, el rol de IAM debe tener los permisos s3:ObjectOwnerOverrideToBuckeTowner. Este permiso se coloca en el recurso del objeto de S3. Por ejemplo:

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

La cuenta de destino también debe conceder el permiso s3:ObjectOwnerOverrideToBuckeTowner mediante la política de bucket:

{
  "Version": "2012-10-17",
  "Id": "Policy1644945280205",
  "Statement": [
    {
      "Sid": "Stmt1644945277847",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789101:role/s3-replication-role"
      },
      "Action": [
        "s3:ReplicateObject",
        "s3:ReplicateTags",
        "s3:ObjectOwnerOverrideToBucketOwner"
      ],
      "Resource": "arn:aws:s3:::DestinationBucket/*"
    }
  ]
}

**Nota:**Si la configuración de propiedad de objetos del bucket de destino incluye Aplicada al propietario del bucket, no es necesario Cambiar la propiedad del objeto al propietario del bucket de destino en la regla de replicación. Este cambio se realizará de forma predeterminada.

Si la regla de replicación tiene activada la replicación de marcador de eliminación, el rol de IAM debe tener los permisos s3:ReplicateDelete. Si el bucket de destino está en otra cuenta, el propietario del bucket de destino también debe conceder este permiso mediante la política de bucket. Por ejemplo:

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

}

Nota: Sustituya DestinationBucket por el nombre de su bucket de S3.

También se debe conceder el mismo permiso mediante la política de bucket del bucket de destino:

{
  "Version": "2012-10-17",
  "Id": "Policy1644945280205",
  "Statement": [
    {
      "Sid": "Stmt1644945277847",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789101:role/s3-replication-role"
      },
      "Action": [
        "s3:ReplicateObject",
        "s3:ReplicateTags",
        "s3:ObjectOwnerOverrideToBucketOwner",
        "s3:ReplicateDelete"
      ],
      "Resource": "arn:aws:s3:::DestinationBucket/*"
    }
  ]
}

Permisos de AWS KMS

Si los objetos de origen de un bucket están cifrados con una clave de AWS Key Management Service (AWS KMS), la regla de replicación se debe configurar para incluir objetos cifrados con KMS.

Para incluir objetos cifrados con AWS KMS:

1.    Abra la consola de Amazon S3.

2.    Elija el bucket de S3 que contiene los objetos de origen.

3.    En la pestaña Administración, seleccione una regla de replicación.

5.    Seleccione Editar.

6.    En Cifrado, seleccione Replicar objetos cifrados con AWS KMS.

7.    En Clave de AWS KMS para cifrar objetos de destino, seleccione una clave de AWS KMS. La opción predeterminada es utilizar la clave de AWS KMS (aws/S3).

Importante: Si el bucket de destino está en una cuenta de AWS diferente, especifique una clave de KMS administrada por el cliente que pertenezca a la cuenta de destino. No utilice la clave predeterminada aws/S3. De esta forma, se cifran los objetos con la clave administrada de AWS que pertenece a la cuenta de origen y no se puede compartir con otra cuenta. Como resultado, la cuenta de destino no puede acceder a los objetos del bucket de destino.

Para utilizar una clave de AWS KMS que pertenezca a la cuenta de destino para cifrar los objetos de destino, la cuenta de destino debe conceder el rol de replicación en la política de claves de KMS:

{
    "Sid": "AllowS3ReplicationSourceRoleToUseTheKey",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::123456789101:role/s3-replication-role"
    },
    "Action": ["kms:GenerateDataKey", "kms:Encrypt"],
    "Resource": "*"
}

**Nota:**Si usa un asterisco (*) como Recurso en la política de claves de AWS KMS, la política concede permiso para la clave de KMS solo al rol de replicación. La política no permite que el rol de replicación eleve sus permisos.

Además, la cuenta de origen debe añadir los siguientes permisos mínimos a la política de IAM del rol de replicación:

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

De forma predeterminada, la política de claves de KMS concede al usuario raíz todos los permisos sobre la clave. Estos permisos se pueden delegar a otros usuarios de la misma cuenta. A menos que haya instrucciones de denegación en la política de claves de KMS de origen, basta con utilizar una política de IAM para conceder permisos al rol de replicación a la clave de KMS de origen.

Instrucciones de denegación explícita y de autorización condicional

Si los objetos siguen sin replicarse tras haber validado los permisos, compruebe si hay instrucciones de denegación explícitas:

  • Las instrucciones de denegación de la política de bucket de destino o las políticas de claves de KMS que restringen el acceso a intervalos de CIDR, puntos de conexión de VPC o puntos de acceso de S3 específicos pueden provocar un error en la replicación.
  • Las instrucciones de denegación o los límites de permisos asociados al rol de IAM pueden provocar un error en la replicación.
  • Las instrucciones de denegación de las políticas de control de servicios de AWS Organizations asociadas a las cuentas de origen o de destino pueden provocar un error en la replicación.

**Consejo:**Antes de eliminar cualquier instrucción de denegación explícita, confirme el motivo de su uso y determine si la instrucción tiene impacto en la seguridad de los datos.

Si las claves de KMS de origen o de destino conceden permisos en función del contexto de cifrado, confirme que las claves de bucket de S3 estén activadas para los buckets. Si los buckets tienen activadas las claves de bucket, el contexto de cifrado debe ser el del recurso a nivel de bucket:

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

Nota: Sustituya SOURCE_BUCKET_NAME y DESTINATION_BUCKET_NAME por los nombres de los buckets de origen y de destino.    

Si las claves de bucket no están activadas para los buckets de origen o de destino, el contexto de cifrado debe ser el recurso a nivel de objeto:

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

Nota: Sustituya SOURCE_BUCKET_NAME y DESTINATION_BUCKET_NAME por los nombres de los buckets de origen y de destino.

ACL de objeto y bloqueo de acceso público

Compruebe si los buckets de origen y de destino utilizan ACL. Si el objeto tiene una ACL asociada que permite el acceso público, pero el bucket de destino utiliza el bloqueo de acceso público, se produce un error en la replicación.

Propiedad del objeto de origen

Si otra cuenta de AWS cargó los objetos del bucket de origen, es posible que la cuenta de origen no tenga permiso para esos objetos. Compruebe el bucket de origen para ver si las ACL están desactivadas. Si el bucket de origen tiene las ACL desactivadas, la cuenta de origen es la propietaria de todos los objetos del bucket. Si el bucket de origen no tiene las ACL desactivadas, compruebe si la propiedad del objeto está configurada como Propietario del objeto preferido o Propietario del bucket preferido. Si el bucket está configurado como Propietario del bucket preferido, los objetos del bucket de origen necesitan una ACL bucket-owner-full-control para que el propietario del bucket se convierta en el propietario del objeto.

La cuenta de origen puede convertirse en propietaria de todos los objetos de su bucket desactivando las ACL. La mayoría de los casos de uso no requieren el uso de ACL para administrar el acceso. Se recomienda usar políticas de IAM y de bucket para administrar el acceso a los recursos de S3. Para desactivar las ACL en su bucket de S3, consulte Control de la propiedad de los objetos y desactivación de las ACL del bucket. Asegúrese de evaluar el uso actual de las ACL en su bucket y sus objetos. Sus políticas actuales de bucket e IAM deben conceder permisos suficientes para que pueda desactivar las ACL sin que afecte al acceso a Amazon S3.


Información relacionada

Tutoriales: ejemplos para configurar la replicación

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años