Configurei a replicação entre meus buckets, mas novos objetos não estão se replicando. Como posso solucionar isso?

9 minuto de leitura
0

Configurei a replicação entre regiões (CRR) ou a replicação na mesma região (SRR) entre meus buckets do Amazon Simple Storage Service (Amazon S3). No entanto, os objetos não estão se replicando no bucket de destino.

Resolução

Para solucionar problemas com objetos que não estão se replicando no bucket de destino, verifique os diferentes tipos de permissões do seu bucket. Além disso, verifique as configurações de acesso público e de propriedade do bucket.

Dica: carregue um objeto no bucket de origem para testar a replicação após cada alteração de configuração. A prática recomendada é fazer uma alteração de configuração de cada vez para identificar problemas de configuração de replicação.

Depois de resolver os problemas que causam falha na replicação, pode haver objetos no bucket de origem que não foram replicados. Por padrão, a replicação do S3 não replica objetos existentes ou objetos com um status de replicação FAILED (Falhou) ou REPLICA (Réplica). Replique esses objetos usando a replicação em lote do S3.

Permissões mínimas do Amazon S3

Confirme se o perfil do AWS Identity Access Management (IAM) tem as permissões corretas. Se os buckets de origem e destino estiverem em contas diferentes, confirme se a política de bucket da conta de destino também concede permissões suficientes ao perfil de replicação.

O exemplo a seguir mostra uma política do IAM com as permissões mínimas necessárias para replicação.    Com base nas opções da regra de replicação, talvez seja necessário conceder permissões adicionais.

{
    "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/*"
        }
    ]
}

Observação: substitua SourceBucket e DestinationBucket pelos nomes dos seus buckets do S3.

O perfil do IAM deve ter uma política de confiança que permita ao Amazon S3 assumir a função de replicar objetos. Por exemplo:

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

Se o bucket de destino estiver em outra conta, a política do bucket de destino deverá conceder as seguintes permissões:

{
    "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/*"
        }
    ]
}

Observação: Substitua arn:aws:iam::123456789101:role/s3-replication-role pelo ARN do seu perfil de replicação.    

Permissões adicionais do Amazon S3

Se a regra de replicação estiver definida como Change object ownership to the destination bucket owner (Alterar a propriedade do objeto para o proprietário do bucket de destino), o perfil do IAM deverá ter permissões s3:ObjectOwnerOverrideToBucketOwner. Essa permissão é colocada no recurso do objeto do S3. Por exemplo:

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

A conta de destino também deve conceder a permissão s3:ObjectOwnerOverrideToBucketOwner por meio da 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/*"
    }
  ]
}

Observação: se as configurações de propriedade do objeto do bucket de destino incluírem Bucket owner enforced (Imposição do proprietário do bucket), você não precisará da configuração Change object ownership to the destination bucket owner (Alterar a propriedade do objeto para o proprietário do bucket de destino) na regra de replicação. Essa alteração ocorrerá por padrão.

Se a regra de replicação tiver a opção delete marker replication activated (replicação do marcador de exclusão ativada), o perfil do IAM deverá ter permissões s3:ReplicateDelete. Se o bucket de destino estiver em outra conta, seu proprietário também deverá conceder essa permissão por meio da política do bucket. Por exemplo:

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

}

Observação: substitua DestinationBucket pelo nome do seu bucket do S3.

A mesma permissão também deve ser concedida por meio da política de bucket no 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/*"
    }
  ]
}

Permissões do AWS KMS

Se os objetos de origem de um bucket estiverem criptografados com uma chave do AWS Key Management Service (AWS KMS), a regra de replicação deverá ser configurada para incluir objetos criptografados pelo KMS.

Para incluir objetos criptografados com o AWS KMS:

1.    Abra o console do Amazon S3.

2.    Escolha o bucket do S3 que contém os objetos de origem.

3.    Na guia Management (Gerenciamento), selecione uma regra de replicação.

5.    Escolha Edit (Editar).

6.    Em Encryption (Criptografia), selecione Replicate objects encrypted with AWS KMS (Replicar objetos criptografados com o AWS KMS).

7.    Em AWS KMS key for encrypting destination objects (Chave do AWS KMS para criptografar objetos de destino), selecione uma chave do AWS KMS. A opção padrão é usar a chave do AWS KMS (aws/S3).

Importante: Se o bucket de destino estiver em uma conta diferente da AWS, especifique uma chave gerenciada pelo cliente do KMS que seja de propriedade da conta de destino. Não use a chave padrão aws/S3. Esta criptografa os objetos com a chave gerenciada pela AWS que pertence à conta de origem e não pode ser compartilhada com outra conta. Como resultado, a conta de destino não pode acessar os objetos no bucket de destino.

Para usar uma chave do AWS KMS que pertence à conta de destino para criptografar os objetos de destino, a conta de destino deve conceder o perfil de replicação na política de chaves do KMS:

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

**Observação:**Se você usar um asterisco (\ *) para Resource na política de chaves do AWS KMS, a política concederá permissão para a chave do KMS somente ao perfil de replicação. A política não permitirá que o perfil de replicação eleve suas permissões.

Além disso, a conta de origem deve adicionar as seguintes permissões mínimas à política do IAM do perfil de replicação:

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

Por padrão, a política de chave do KMS concede ao usuário raiz permissões totais para a chave. Essas permissões podem ser delegadas a outros usuários na mesma conta. A menos que haja declarações de negação na política de chave do KMS de origem, é suficiente usar uma política do IAM para conceder permissões ao perfil de replicação à chave KMS de origem.

Declarações explícitas de negação e permissão condicional

Se os seus objetos ainda não estiverem se replicando depois que você validar as permissões, verifique se há alguma declaração de negação explícita:

  • Declarações de negação na política de bucket de destino ou políticas de chave do KMS que restringem o acesso a intervalos de CIDR, endpoints da VPC ou pontos de acesso do S3 específicos podem causar falha na replicação.
  • Declarações de negação ou limites de permissões associados ao perfil do IAM podem causar falha na replicação.
  • Declarações de negação nas políticas de controle de serviços do AWS Organizations vinculadas às contas de origem ou de destino podem causar falha na replicação.

**Dica:**Antes de remover qualquer declaração de negação explícita, confirme o motivo do uso da negação e determine se a declaração tem impacto na segurança dos dados.

Se as chaves do KMS de origem ou de destino concederem permissões com base no contexto de criptografia, confirme se as chaves de buckets do S3 estão ativadas para os buckets. Se os buckets tiverem as chaves de buckets ativadas, o contexto de criptografia deverá ser para o recurso em nível de bucket:

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

Observação: Substitua SOURCE_BUCKET_NAME e DESTINATION_BUCKET_NAME pelos nomes dos seus buckets de origem e destino.

Se chaves de bucket não estiverem ativadas para os buckets de origem ou de destino, o contexto de criptografia deverá ser o recurso em nível de objeto:

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

Observação: Substitua SOURCE_BUCKET_NAME e DESTINATION_BUCKET_NAME pelos nomes dos seus buckets de origem e destino.

ACLs de objeto e bloqueio do acesso público

Verifique se os buckets de origem e destino estão usando ACLs. Se o objeto tiver uma ACL anexada que permita acesso público, mas o bucket de destino estiver usando o bloqueio de acesso público, a replicação falhará.

Propriedade do objeto de origem

Se os objetos no bucket de origem tiverem sido carregados por outra conta da AWS, talvez a conta de origem não tenha permissão para esses objetos. Verifique o bucket de origem para ver se as ACLs estão desativadas. Se o bucket de origem tiver ACLs desativadas, a conta de origem será a proprietária de todos os objetos nesse bucket. Se o bucket de origem não tiver ACLs desativadas, verifique se a propriedade do objeto está definida como Object owner preferred (Proprietário do objeto preferencial) ou Bucket owner preferred (Proprietário do bucket preferencial). Se o bucket estiver definido como Bucket owner preferred (Proprietário do bucket preferencial), os objetos do bucket de origem precisarão de uma ACL bucket-owner-full-control para que o proprietário do bucket se torne o proprietário do objeto.

A conta de origem pode se apropriar de todos os objetos em seu bucket desativando ACLs. A maioria dos casos de uso não exige o uso de ACLs para gerenciar o acesso. É uma prática recomendada usar políticas do IAM e de bucket para gerenciar o acesso a recursos do S3. Para desativar ACLs em seu bucket S3, consulte Controlar a propriedade de objetos e desabilitar ACLs no seu bucket. Certifique-se de avaliar o uso atual de ACLs no seu bucket e nos objetos. Suas políticas atuais de bucket e do IAM devem conceder permissões suficientes para que você possa desativar ACLs sem afetar o acesso ao Amazon S3.


Informações relacionadas

Passo a passo: Exemplos para configurar a replicação

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos