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

Última atualização: 15/04/2021

Quero que alguns objetos em meu bucket do Amazon Simple Storage Service (Amazon S3) possam ser lidos publicamente. Contudo, não quero mudar as permissões em outros objetos no mesmo bucket. Como posso fazer isso?

Descrição breve

Habilite o acesso público de leitura usando um destes métodos:

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

Resolução

Importante: antes de começar, confirme que não tem nenhuma configuração de bloqueio de acesso público na conta ou no bucket. Suas configurações não podem impedir você de tornar um objeto público. Por padrão, as configurações de bloqueio de acesso público estão definidas como True (Verdadeiro) em novos buckets do S3.

Atualizar a ACL do objeto usando o console do Amazon S3

Para tornar vários objetos públicos ao mesmo tempo, siga estas etapas:

Aviso: depois que você torna vários objetos públicos, não será possível desfazer essa ação para vários objetos ao mesmo tempo. Para remover o acesso público, será necessário ir para cada objeto no console do Amazon S3 e lá, modificar a opção Public access (Acesso público) na guia Permissions (Permissões) do objeto. Será necessário fazer isso em cada objeto para o qual queira desfazer o acesso público concedido. Revise cuidadosamente a lista de objetos antes de torná-los públicos.

1.    Abra o console do Amazon S3.

2.    Na lista mostrada, escolha o bucket com os objetos que você quer atualizar.

3.    Navegue para a pasta contendo os objetos.

4.    Na lista de objetos, selecione todos os itens que quer tornar públicos.

5.    Escolha Actions (Ações) e, em seguida, escolha Make public (Tornar público).

6.    Na caixa de diálogo Make public (Tornar público), confirme que a lista de objetos está correta.

7.    Escolha Make public (Tornar público).

Para tornar público um objeto específico, siga estas etapas:

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

2.    Navegue para a pasta contendo o objeto.

3.    Escolha o link no nome do objeto para abri-lo.

4.    Escolha a guia Permissions (Permissões).

5.    Escolha Edit (Editar).

6.    Na seção Everyone (Todos), selecione Objects Read (Leitura de objetos).

7.    Selecione I understand the effects of these changes on this object (Entendo quais são os efeitos destas alterações neste objeto).

8.    Escolha Save changes (Salvar alterações).

Atualizar a ACL do objeto usando a AWS CLI

No caso de objetos já armazenados no Amazon S3, você pode executar este comando para atualizar a ACL do objeto com o acesso público de leitura:

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

Observação: se você receber mensagens de erro ao executar comandos da AWS CLI, confirme que está usando a versão mais recente da interface.

Você também pode executar este comando para conceder controle total do objeto ao proprietário da conta da AWS e acesso de leitura a todas as outras pessoas:

Observação: no valor --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

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

Importante: antes de começar, revise a definição de preço 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, esta política permite acesso público de leitura a qualquer objeto marcado com o par de chave-valor 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 quer tornar publicamente acessíveis para leitura. Você pode adicionar ou gerenciar tags de objetos usando o console do Amazon S3 ou usando a AWS CLI.

Para conferir se um objeto já 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 sem tags, execute este comando:

Aviso: este comando substitui quaisquer tags existentes no objeto.

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 já tem tags, execute o comando a seguir. Confirme que incluiu a nova tag do objeto e quaisquer tags existentes que você queira 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 do objeto, execute este comando para revisar as tags de todos os objetos:

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

Usar 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 em um prefixo específico. Antes de usar esta política, confirme que seu caso de uso é compatível com todos os objetos com acesso público de leitura no mesmo prefixo.

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

{
  "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 para o prefixo de acesso público de leitura. Você pode copiar um objeto para o prefixo executando um comando semelhante a este:

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

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


Este artigo foi útil?


Precisa de ajuda com faturamento ou suporte técnico?