Ir para o conteúdo

Por que meus objetos do Amazon S3 não se replicam quando eu configuro a replicação entre meus buckets?

10 minuto de leitura
0

Eu configurei a replicação entre meus buckets de uso geral do Amazon Simple Storage Service (Amazon S3). No entanto, os objetos não são replicados para o bucket de destino que está na mesma região da AWS ou em uma região diferente.

Breve descrição

Observação: é possível usar a replicação do Amazon S3 somente para buckets de uso geral. Não é possível usar a replicação para buckets de diretórios e de tabelas.

Para solucionar problemas de objetos do Amazon S3 que não se replicam para replicação entre regiões (CRR) ou replicação na mesma região (SRR), verifique as permissões do bucket de destino. Além disso, verifique as configurações de acesso público e de propriedade do bucket.

Depois de resolver os problemas que causam falha na replicação, pode haver objetos no bucket de origem que ainda não se replicaram. Por padrão, a replicação do Amazon S3 não replica objetos existentes ou objetos com status de replicação FAILED ou REPLICA. Para verificar os status de replicação dos objetos, consulte Como faço para visualizar objetos com falha na replicação de um bucket do Amazon S3 para outro? Para esses objetos, use a replicação em lote do S3.

Resolução

Identificar problemas de configuração de replicação

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

Além disso, ative a notificação do tipo de evento s3:Replication:OperationFailedReplication para determinar a causa da falha.

Conceder as permissões mínimas do Amazon S3

Confirme se o perfil do AWS Identity Access Management (IAM) que você usou na regra de replicação tem as permissões corretas. Se os buckets de origem e destino estiverem em contas diferentes da AWS, confirme se a política de bucket da conta de destino também concede permissões ao perfil de replicação. No exemplo a seguir, a política do IAM tem as permissões mínimas necessárias para replicação:

{    "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 pelo bucket de origem e DestinationBucket pelo bucket de destino.

Com base nas opções da regra de replicação, talvez seja necessário conceder permissões adicionais.

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

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

Conceder permissões adicionais do Amazon S3

Se você definir a regra de replicação como Alterar a propriedade do objeto para o proprietário do bucket de destino, deverá configurar permissões adicionais.

Observação: se a propriedade do objeto do bucket de destino for 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. A alteração ocorre por padrão.

Para conceder ao perfil do IAM as permissões s3:ObjectOwnerOverrideToBucketOwner, adicione a seguinte permissão à política de objetos do Amazon S3:

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

Observação: substitua DestinationBucket pelo seu bucket de destino.

Além disso, adicione a seguinte permissão s3:ObjectOwnerOverrideToBucketOwner na política de bucket da conta de destino:

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

Observação: substitua SourceBucket-account-ID pela conta do bucket de origem, source-account-IAM-role pelo perfil do IAM da conta de origem e DestinationBucket pelo bucket de destino.

Se você ativou excluir replicação do marcador na regra de replicação, o perfil do IAM deverá ter permissões s3:ReplicateDelete:

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

Observação: substitua DestinationBucket pelo seu bucket de destino.

Se o bucket de destino estiver em outra conta, o proprietário também deverá adicionar a seguinte permissão na política do 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"
        }

    ]
}

Observação: substitua arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role pelo nome do recurso da Amazon (ARN) do seu perfil de replicação e DestinationBucket pelo seu bucket de destino.

Conceder permissões do AWS KMS

Se você criptografou os objetos de origem do bucket com uma chave do AWS Key Management Service (AWS KMS), a regra de replicação deverá incluir a criptografia do AWS KMS.

Para configurar as permissões necessárias, conclua as seguintes etapas:

  1. Abra o console do Amazon S3.
  2. Escolha o bucket de origem.
  3. Escolha a guia Gerenciamento e, em Regras de replicação, escolha a regra de replicação.
  4. Selecione Editar.
  5. Em Encryption (Criptografia), selecione Replicate objects encrypted with AWS KMS (Replicar objetos criptografados com o AWS KMS).
  6. 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).

Para obter exemplos de políticas de replicação, consulte Exemplo de políticas: usar SSE-S3 e SSE-KMS com replicação.

Observação: se o bucket de destino estiver em uma conta diferente, especifique uma chave gerenciada pelo cliente do AWS KMS que seja de propriedade da conta de destino. A chave aws/S3 padrão criptografa os objetos com a chave gerenciada pela AWS que a conta de origem possui. No entanto, não é possível compartilhar a chave gerenciada pela AWS com outra conta.

Conceder permissões adicionais do AWS KMS para cenários entre contas

Para usar a chave do AWS KMS da conta de destino para criptografar os objetos de destino, a conta de destino deve permitir o perfil de replicação na política de chave. Exemplo de política:

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

Observação: substitua arn:aws:iam::SourceBucket-account-ID:role/service-role/source-account-IAM-role pelo ARN do perfil de replicação. Se você usar um asterisco (*) para Recurso, a política concederá permissão somente ao perfil de replicação. No entanto, a política não permite que o perfil de replicação expanda as permissões.

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

[      {  
        "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 AWS KMS concede ao usuário-raiz permissões totais para a chave. É possível delegar essas permissões a outros usuários na mesma conta. Além disso, é possível usar uma política do IAM para conceder permissões ao perfil de replicação para a chave KMS de origem. Essa configuração permite o acesso necessário, a menos que haja instruções Deny na política de chaves de origem do AWS KMS.

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

Importante: antes de remover instruções Deny explícitas, confirme por que elas existem e se as declarações afetam a segurança dos dados.

Se seus objetos ainda não se replicarem após a validação das permissões, verifique se há instruções Deny explícitas que possam causar falha na replicação.

Remova as instruções Deny na política do bucket de destino ou na política de chave do AWS KMS que restringem o acesso aos seguintes recursos:

  • Intervalos CIDR específicos
  • Endpoints de nuvem privada virtual (VPC)
  • Pontos de acesso Amazon S3

Além disso, remova as instruções Deny ou limites de permissões da política do perfil do IAM e das políticas de controle de serviços (SCPs) da AWS Organizations nas contas de origem e de destino.

Verificar se há chaves de bucket do S3

Se as chaves do AWS KMS de origem ou de destino concederem permissões com base no contexto de criptografia, verifique se está usando as chaves de bucket do S3. Se os buckets usarem as chaves de bucket do S3, o contexto de criptografia deverá destinar-se ao recurso em nível de bucket. Exemplo de contexto de criptografia:

"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 pelo bucket de origem e DESTINATION_BUCKET_NAME pelo bucket de destino.

Se você não usar chaves de bucket do S3 para os buckets de origem ou de destino, o contexto de criptografia deverá ser o recurso no nível do objeto. Exemplo de contexto de criptografia:

"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 pelo bucket de origem e DESTINATION_BUCKET_NAME pelo bucket de destino.

Verificar as ACLs de objetos

Verifique se os buckets de origem e destino usam listas de controle de acesso (ACLs) que bloqueiam o acesso. Se o objeto tiver uma ACL anexada que permita acesso público, mas o bucket de destino usa o Bloqueio de Acesso Público do S3, a replicação falhará.

Confirmar a propriedade do objeto de origem

Se outra conta carregar os objetos no bucket de origem, talvez a conta de origem não tenha acesso a esses objetos. Verifique se o bucket de origem tem ACLs ativadas.

Se o bucket de origem tiver ACLs desativadas, a conta de origem será a proprietária de todos os objetos no bucket. Se o bucket de origem tiver ACLs ativadas, verifique se a propriedade do objeto está definida como Preferência do proprietário do objeto ou Preferência do proprietário do bucket. Se a propriedade estiver definida como Bucket owner preferred (Proprietário do bucket preferencial), os objetos do bucket de origem deverão ter uma permissão de ACL bucket-owner-full-control.

A conta de origem pode desativar as ACLs para assumir a propriedade de todos os objetos no bucket. A maioria dos casos de uso não exige ACLs para gerenciar o acesso. Na verdade, é uma prática recomendada usar políticas do IAM e de bucket para gerenciar o acesso a recursos do Amazon S3. Antes de desativar as ACLs, certifique-se de que suas políticas de bucket e IAM concedam as permissões necessárias para manter o acesso ao Amazon S3.

Especificar o filtro de regra de replicação correto

Certifique-se de que você especificou corretamente o filtro da regra de replicação.

Se você especificar um filtro de regras com uma combinação de prefixo de chave e tags de objeto, o Amazon S3 executará uma operação lógica AND. A regra se aplica a um subconjunto de objetos com um prefixo de chave específico e tags específicas.

Informações relacionadas

Exemplos para configurar a replicação em tempo real

AWS OFICIALAtualizada há 6 meses