Como conceder acesso público de leitura a alguns objetos em meu bucket do Amazon S3?

6 minuto de leitura
0

Quero que alguns objetos no meu bucket do Amazon Simple Storage Service (Amazon S3) sejam legíveis publicamente. No entanto, não quero alterar as permissões em outros objetos que estão no mesmo bucket.

Breve descrição

Conceda acesso público de leitura de uma das seguintes formas:

  • Atualize a lista de controle de acesso (ACL) do objeto usando o console do Amazon S3
  • Atualize a ACL do objeto usando a AWS Command Line Interface (AWS CLI)
  • Use uma política de bucket que conceda acesso público de leitura a uma tag de objeto específica
  • Use uma política de bucket que conceda acesso público de leitura a um prefixo específico

Importante: conceder acesso público por meio de ACLs de bucket e objeto não funciona para buckets com propriedade de objeto do S3 definida como Bucket Owner Enforced. Na maioria dos casos, as ACLs não precisam conceder permissões a objetos e buckets. Em vez disso, use as políticas do AWS Identity Access and Management (IAM) e as políticas de bucket do S3 para conceder permissões a objetos e buckets.

Por padrão, novos buckets, pontos de acesso e objetos não permitem acesso público. Se o bloqueio de acesso público for ativado para todos os buckets da conta, a mensagem “Bucket e objetos não públicos” será exibida. Para saber mais, consulte Definir configurações de bloqueio de acesso público para sua conta.

Resolução

Importante: antes de começar, confirme se você não tem nenhuma configuração de bloqueio de acesso público no nível da conta ou do bucket. Suas configurações não devem impedir que você torne os objetos públicos. Por padrão, as configurações de bloqueio de acesso público são definidas como True nos novos buckets do S3.

Atualize a ACL do objeto usando o console do Amazon S3

Para tornar vários objetos públicos de uma só vez, siga estas etapas:

Aviso: depois de tornar vários objetos públicos, não há opção de desfazer essa ação para vários objetos ao mesmo tempo. Para remover o acesso público, você deve acessar cada objeto no console do Amazon S3. Em seguida, na guia Permissões do objeto, modifique o Acesso público. Você deve fazer isso para cada objeto em que quiser desfazer o acesso público que concedeu. Certifique-se de revisar cuidadosamente a lista de objetos antes de torná-los públicos.

1.    Abra o console do Amazon S3.

2.    Na lista de buckets, escolha aquele com os objetos que deseja atualizar.

3.    Navegue até a pasta que contém os objetos.

4.    Na lista de objetos, selecione todos os objetos que você deseja tornar públicos.

5.    Escolha Ações e, em seguida, escolha Tornar público.

6.    Na caixa de diálogo Tornar público, confirme se a lista de objetos está correta.

7.    Escolha Tornar público.

Para tornar público um objeto individual, você pode repetir o processo anterior ou seguir estas etapas:

1.    No console do Amazon S3, escolha o bucket com o objeto que você deseja atualizar.

2.    Navegue até a pasta que contém o objeto.

3.    Abra o objeto escolhendo o link no nome do objeto.

4.    Escolha a guia Permissões.

5.    Escolha Editar.

6.    Na seção Todos, selecione Objetos lidos.

7.    Selecione Entendo os efeitos dessas alterações neste objeto.

8.    Escolha Salvar alterações.

Atualize a ACL do objeto usando a AWS CLI

Para um objeto que você já armazenou no Amazon S3, você pode executar este comando para atualizar a ACL para acesso público de leitura:

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --acl public-read

Observação: se você receber erros ao executar comandos da AWS CLI, verifique se está utilizando a versão mais recente da AWS CLI.

Ou você pode executar esse comando para conceder controle total do objeto ao proprietário da conta da AWS e acesso de leitura a todos os outros:

Observação: para o valor de**--grant-full-control**, insira o ID de usuário canônico da conta.

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --grant-full-control id="008exampleA45666666668889999008853" --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers

Use uma política de bucket que conceda acesso público de leitura a uma tag de objeto específica

Importante: antes de começar, não deixe de conferir os preços da marcação de objetos do S3.

Primeiro, adicione uma política de bucket que permita o acesso público de leitura a qualquer objeto com uma tag específica. Por exemplo, essa política permite acesso público de leitura para qualquer objeto marcado com o par de valores-chave public=yes:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Condition": {
        "StringEquals": {
          "s3:ExistingObjectTag/public": "yes"
        }
      }
    }
  ]
}

Em seguida, adicione a tag aos objetos que você deseja que sejam legíveis publicamente. Você pode adicionar ou gerenciar tags de objetos usando o console do Amazon S3. Ou você pode usar a AWS CLI.

Para verificar se um objeto tem alguma tag, execute este comando da AWS CLI:

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

Para adicionar uma tag a um objeto que não tem tags, execute este comando:

Aviso: esse comando substitui todas as tags de objeto existentes.

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet={Key=public,Value=yes}'

Para adicionar uma tag a um objeto que tenha tags, execute o comando a seguir. Certifique-se de incluir a nova tag de objeto, bem como as tags que você deseja manter.

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet=[{Key=public,Value=n},{Key=exampletag1,Value=one},{Key=exampletag2,Value=two}]'

Depois de adicionar a tag de objeto, execute este comando para revisar as tags de todos os objetos:

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

Use uma política de bucket que conceda acesso público de leitura a um prefixo específico

Aviso: a política de bucket a seguir concede acesso público de leitura a todos os objetos com um prefixo específico. Antes de usar essa política de bucket, confirme se seu caso de uso oferece suporte a todos os objetos publicamente legíveis dentro do prefixo. Essa política não concede acesso à lista para o prefixo. O usuário pode acessar o objeto somente se o caminho do objeto for conhecido. Ao acessar um objeto que não existe no prefixo, o usuário recebe um erro 403.

Para conceder acesso público de leitura a um prefixo de objeto específico, adicione uma política de bucket semelhante à seguinte:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/publicprefix/*"]
      }
  ]
}

Em seguida, copie os objetos no prefixo com acesso público de leitura. Você pode copiar um objeto no prefixo executando um comando semelhante ao seguinte:

aws s3 cp s3://DOC-EXAMPLE-BUCKET/exampleobject s3://DOC-EXAMPLE-BUCKET/publicprefix/exampleobject

Observação: dependendo do prefixo do objeto, não é necessário copiar o objeto para conceder acesso público de leitura.

Informações relacionadas

Configurar ACLs

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos