AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
Por que não consigo copiar um objeto entre dois buckets do Amazon S3?
Quero copiar um objeto de um bucket do Amazon Simple Storage Service (Amazon S3) para outro, mas não consigo.
Resolução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Políticas de bucket e políticas do IAM
Para copiar um objeto entre buckets, verifique se você configurou as permissões corretas. Para copiar um objeto entre buckets na mesma conta da AWS, use as políticas do AWS Identity and Access Management (AWS IAM) para definir permissões. Para copiar um objeto entre buckets em contas diferentes, você deve definir permissões nas políticas do IAM e políticas de bucket relevantes.
Observação: para obter instruções sobre como modificar uma política de bucket, consulte Adicionar uma política de bucket usando o console do Amazon S3. Para obter instruções sobre como modificar as permissões de um usuário do IAM, consulte Alterar permissões de um usuário do IAM. Para obter instruções sobre como modificar as permissões de um perfil do IAM, consulte Atualizar permissões para um perfil.
Confirme estas permissões necessárias:
- No mínimo, sua identidade do IAM (usuário ou perfil) deve ter permissões para a ação s3:GetObject no bucket de origem. Se os buckets estiverem na mesma conta, defina essas permissões com as políticas da sua identidade do IAM. Também é possível permitir explicitamente a identidade do IAM na política de bucket do S3. Se os buckets estiverem em contas diferentes, defina essas permissões com a política de bucket e as políticas da sua identidade do IAM.
- No mínimo, sua identidade IAM precisa ter permissões para a ação s3:PutObject no bucket de destino. Se os buckets estiverem na mesma conta, defina essas permissões com as políticas da sua identidade do IAM. Também é possível permitir explicitamente a identidade do IAM na política de bucket do S3. Se os buckets estiverem em contas diferentes, defina essas permissões com a política de bucket e as políticas da sua identidade do IAM.
- Analise as políticas de bucket e políticas do IAM relevantes para confirmar se não há declaração de negação explícitas que entrem em conflito com as permissões de que você precisa. Uma declaração de negação explícita substitui uma declaração de permissão.
- Para operações específicas, confirme se sua identidade do IAM tem permissões para todas as ações necessárias dentro da operação. Por exemplo, para executar o comando aws s3 cp, você precisa de permissão para s3:GetObject e s3:PutObject. Para executar o comando aws s3 cp com a opção --recursive, você precisa de permissão para s3:GetObject, s3:PutObject e s3:ListBucket. Para executar o comando aws s3 sync, você precisa de permissão para s3:GetObject, s3:PutObject e s3:ListBucket.
Observação: se você usar a operação da API AssumeRole para acessar o Amazon S3, verifique se configurou corretamente a relação de confiança. - Para operações específicas da versão, confirme se sua identidade do IAM tem permissões para ações específicas da versão. Por exemplo, para copiar uma versão específica de um objeto, você precisa da permissão para s3:GetObjectVersion e s3:GetObject.
- Para copiar objetos que tenham tags de objeto, sua identidade do IAM deve ter as permissões s3:GetObjectTagging e s3:PutObjectTagging. É preciso ter a permissão s3:GetObjectTagging para o objeto de origem e a permissão s3:PutObjectTagging para objetos presentes no bucket de destino.
- Analise as políticas de bucket e políticas do IAM relevantes para verificar se o elemento Resource tem o caminho correto. Para permissões no nível de bucket, o elemento Resource deve apontar para um bucket. Para permissões em nível de objeto, o elemento Resource deve apontar para um objeto ou objetos.
Por exemplo, uma declaração de política para uma ação em nível de bucket, como s3:ListBucket, deve especificar um bucket no elemento Resource:
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
Uma declaração de política para ações em nível de objeto, como s3:GetObject ou s3:PutObject, deve especificar um objeto ou objetos no elemento Resource:
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
Propriedade do objeto
Se as políticas de bucket tiverem as permissões corretas e você ainda não conseguir copiar um objeto entre buckets, verifique qual conta é proprietária do objeto. A política de bucket se aplica somente aos objetos que pertencem ao proprietário do bucket. Um objeto que pertence a uma conta diferente pode ter permissões conflitantes em sua lista de controle de acesso (ACL).
Observação: o problema de propriedade do objeto e da ACL normalmente ocorre quando você copia logs de serviço da AWS entre contas. Exemplos de logs de serviço incluem logs do AWS CloudTrail e logs de acesso do Elastic Load Balancing.
Para encontrar a conta que possui um objeto, siga estas etapas:
- Abra o console do Amazon S3.
- Navegue até o objeto que não é possível copiar entre buckets.
- Clique na guia Permissões do objeto.
- Revise os valores em Beneficiário.
Se sua conta for proprietária do objeto, em Beneficiário, em Proprietário do objeto (sua conta da AWS), o ID canônico conterá sua conta da AWS. Se outra conta for proprietária do objeto e você puder acessá-lo, as duas afirmações a seguir são verdadeiras:
- O ID canônico em Proprietário do objeto (sua conta da AWS) contém uma conta externa.
- O ID canônico em Grupo de usuários autenticados (qualquer pessoa com uma conta da AWS) contém sua conta da AWS.
Se outra conta possuir um objeto que não é possível acessar, os campos de ID canônico do Proprietário do objeto (sua conta da AWS) e de outros beneficiários estarão vazios.
Se o objeto que você não consegue copiar entre buckets pertencer a outra conta, o proprietário do objeto poderá realizar uma das seguintes opções:
- O proprietário do objeto pode conceder ao proprietário do bucket o controle total do objeto. Depois que o proprietário do bucket for proprietário do objeto, a política de bucket se aplica ao objeto. Como prática recomendada de segurança, o proprietário do bucket pode desativar as ACLs do bucket para definir a propriedade do objeto como obrigatória para o proprietário do bucket.
- O proprietário do objeto pode manter a propriedade do objeto, mas deve alterar a ACL para as configurações necessárias para seu caso de uso.
Criptografia do AWS KMS
Um objeto pode estar criptografado com uma chave do AWS Key Management Service (AWS KMS). Nesse caso, confirme se sua identidade do IAM tem as permissões corretas para a chave. Se sua identidade do IAM e chave do AWS KMS pertencerem à mesma conta, confirme se sua política de chave concede as permissões necessárias do AWS KMS.
Se sua identidade do IAM e chave do AWS KMS pertencerem a contas diferentes, confirme se a chave e as políticas do IAM concedem as permissões necessárias.
Por exemplo, se você copiar objetos entre dois buckets (e cada bucket tiver sua própria chave), a identidade do IAM deve especificar estas permissões:
- Permissões kms:Decrypt, fazendo referência à primeira chave do KMS
- Permissões kms:GenerateDataKey e kms:Decrypt, fazendo referência à segunda chave do KMS
Para obter mais informações, consulte Políticas-chave em AWS KMS e Ações, recursos e chaves de condição para o AWS Key Management Service.
Classes de armazenamento do Amazon Archive ou classes de armazenamento do Amazon Glacier e Intelligent Archive
Não é possível copiar um objeto da classe de armazenamento do Amazon S3 Glacier. Você deve primeiro restaurar o objeto do Amazon S3 Glacier antes de poder copiá-lo. Para obter instruções, consulte Restaurar um objeto arquivado.
Requester Pays ativados no bucket
Se o bucket de origem ou de destino tiver o Requester Pays ativados e você quiser acessar o bucket de outra conta, verifique sua solicitação. Certifique-se de que sua solicitação inclua o parâmetro de Requester Pays correto:
- Em comandos da AWS Command Line Interface (AWS CLI), inclua a opção --request-payer.
- Em solicitações GET, HEAD e POST, inclua x-amz-request-payer : requester.
- Em URLs assinados, inclua x-amz-request-payer=requester.
Política de controle de serviço da AWS Organizations
Se você usa a AWS Organizations, verifique as políticas de controle de serviços para verificar se elas permitem acesso ao Amazon S3.
Por exemplo, essa política resulta em um erro 403 Forbidden quando você tenta acessar o Amazon S3. Isso ocorre porque ele nega o acesso explicitamente:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "S3:*", "Resource": "*" } ] }
Para obter mais informações sobre os atributos da AWS Organizations, consulte Habilitando todos os recursos de uma organização com AWS Organizations.
Problemas de solicitação entre regiões com endpoints da VPC para o Amazon S3
Os endpoints da VPC para o Amazon S3 não oferecem suporte a solicitações em diferentes regiões AWS. Por exemplo, suponha que você tenha uma instância do Amazon Elastic Compute Cloud (Amazon EC2) na Região A. Essa instância tem um endpoint da nuvem privada virtual (VPC) configurado em sua tabela de rotas associada. A instância do EC2 não pode copiar um objeto da Região B para um bucket na Região A. Em vez disso, você recebe uma mensagem de erro semelhante a este exemplo:
"An error occurred (AccessDenied) when calling the CopyObject operation: VPC endpoints do not support cross-region requests"
Para solucionar esse problema de solicitação entre regiões, use os seguintes métodos:
- Remova o endpoint da VPC da tabela de rotas. Se você remover o endpoint da VPC, em vez disso, a instância deverá ser capaz de se conectar à Internet.
- Execute o comando copy de outra instância que não usa o endpoint da VPC. Ou execute o comando copy a partir de uma instância que não esteja na Região A nem na Região B.
- Se você precisar usar o endpoint da VPC, primeiro envie uma solicitação GET para copiar o objeto do bucket de origem para a instância do EC2. Em seguida, envie uma solicitação PUT para copiar o objeto da instância do EC2 para o bucket de destino.
Informações relacionadas
- Tópicos
- Storage
- Idioma
- Português
Vídeos relacionados


Conteúdo relevante
feita há um ano