Por que não consigo carregar conteúdo do site carregado no meu bucket do Amazon S3 por outra conta da AWS?

5 minuto de leitura
0

Eu uso um bucket do Amazon Simple Storage Service (Amazon S3) para armazenar conteúdo para meu site. Um usuário de outra conta da AWS fez o carregamento de um objeto para o site no meu bucket. Minha política de bucket está correta, mas o objeto não carrega no site.

Breve descrição

Quando seu bucket tem listas de controle de acesso (ACLs) ativadas, por padrão você não é proprietário dos objetos que outras contas da AWS carregam para o seu bucket. Como resultado, talvez você não consiga ler o objeto. A conta que fez o carregamento deve conceder explicitamente a você, proprietário do bucket, permissões ao objeto.

Além disso, uma política de bucket não se aplica a objetos no bucket que sejam de propriedade de outras contas. Portanto, a política de bucket que concede acesso de leitura aos usuários do seu site não se aplica automaticamente aos objetos carregados por outra conta.

Para corrigir esse problema, use um dos seguintes métodos:

  • Desative as ACLs em seu bucket do S3 (prática recomendada).
  • Faça com que o proprietário do objeto conceda acesso público de leitura ao objeto.
  • Faça com que o proprietário do objeto conceda o controle total do objeto a você.

Resolução

Desative as ACLs em seu bucket do S3 (prática recomendada)

Para desativar as ACLs em seu bucket do Amazon S3, escolha a Configuração de Propriedade de objetos imposta pelo proprietário do bucket. Ao aplicar essa configuração, a ACL é desativada e você automaticamente passa a possuir e ter controle total sobre todos os objetos em seu bucket. Mesmo para objetos carregados em várias contas, a propriedade desse objeto pertence ao proprietário do bucket. O proprietário do bucket também controla a política do bucket que concede acesso de leitura aplicável a esses objetos.

Pré-requisitos

Antes de desativar as ACLs, consulte Pré-requisitos para desabilitar ACLs.

Desativar ACLs

  1. Abra o console do Amazon S3.
  2. Selecione Buckets e, em seguida, selecione o nome do bucket ao qual você deseja aplicar uma configuração de propriedade do objeto do S3.
  3. Selecione a guia Permissões.
  4. Em Propriedade do objeto, selecione Editar.
  5. Em Propriedade do objeto, selecione Imposta pelo proprietário do bucket.
  6. Selecione Salvar.

Se seu caso de uso não permitir que você desative as ACLs, use um desses métodos alternativos.

Faça com que o proprietário do objeto conceda acesso público de leitura ao objeto

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.

A conta que fez o carregamento do objeto pode conceder acesso público de leitura ao objeto. Para fazer isso, execute este comando da AWS Command Line Interface (AWS CLI):

aws s3api put-object-acl --bucket docexamplebucket --key example.jpg --acl public read

Observação: substitua**--bucket** pelo nome do bucket que armazena o conteúdo do seu site.

Faça com que o proprietário do objeto conceda o controle total do objeto a você

Os proprietários de objetos podem conceder automaticamente o controle total de um objeto ao proprietário do bucket. Para fazer isso, ative a Propriedade de objetos do S3 no bucket de destino. Isso concede ao proprietário do bucket o controle quando o proprietário do objeto carrega um objeto e inclui a ACL predefinida bucket-owner-full-control.

Depois que o proprietário do bucket configura sua Propriedade de objetos do S3 como preferencial do proprietário do bucket, o proprietário do bucket pode adicionar outra política de bucket. Essa política adicional do bucket deve exigir que todas as operações PUT do Amazon S3 incluam a ACL predefinida bucket-owner-full-control. Essa ACL concede controle total sobre novos objetos ao proprietário do bucket.

Para conceder o controle total do objeto ao proprietário do bucket, a conta do carregamento deve usar a sintaxe da CLI durante o carregamento do objeto:

aws s3api put-object --bucket docexamplebucket --key example.jpg --acl bucket-owner-full-control

O proprietário do bucket agora tem propriedade sobre o objeto e o objeto herda as permissões definidas na política do bucket.

Para objetos existentes que foram carregados antes da ativação da Propriedade de objetos do S3, o proprietário do objeto deve conceder permissões ao proprietário do bucket sobre o objeto. Em seguida, o proprietário do bucket deve copiar o próprio objeto.

Para conceder o controle total do objeto ao proprietário do bucket, a conta do carregamento deve usar a sintaxe da CLI:

aws s3api put-object-acl --bucket docexamplebucket --key example.jpg --acl bucket-owner-full-control

Para herdar a propriedade do objeto, o proprietário do bucket deve copiar o próprio objeto:

aws s3 cp s3://docexamplebucket/example.jpg s3://docexamplebucket/example.jpg --acl bucket-owner-full-control

O proprietário do bucket agora tem propriedade sobre o objeto e o objeto herda as permissões definidas na política do bucket.

Exija que os carregamentos entre contas concedam ao proprietário do bucket o controle total do objeto

Para exigir que todos os carregamentos (s3:PutObject) de outra conta concedam ao proprietário do bucket controle total sobre o objeto, use uma política de bucket como esta:

{
  "Id": "Policy1541018284691",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RequireBucketOwnerFullControlOnPuts",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/iam_user"
        ]
      },
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::docexamplebucket/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    }
  ]
}

Com essa política de bucket, o usuário da outra conta (111122223333) só pode fazer carregamentos no bucket quando o usuário especifica a ACL do objeto. A ACL do objeto deve conceder controle total ao proprietário do bucket. O usuário da outra conta deve então carregar os objetos, como neste comando:

aws s3 cp path/to/local/file s3://docexamplebucket --acl bucket-owner-full-control

Informações relacionadas

Como o Amazon S3 autoriza uma solicitação

Diretrizes para política de acesso

Como configurar permissões para acesso ao website

Como controlar o acesso a um bucket com políticas de usuário

AWS OFICIAL
AWS OFICIALAtualizada há 8 meses