Como posso conceder acesso público de leitura a alguns objetos em meu bucket do Simple Storage Service (Amazon S3)?

Data da última atualização: 15/02/2022

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?

Breve descrição

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

  • Atualizar a lista de controle de acesso (ACL) do objeto usando o console do Simple Storage Service (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 etiqueta específica do objeto
  • Usar 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 que têm Propriedade de objeto do S3 definida como Imposta pelo proprietário do bucket. 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.

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 nível do bucket. Suas configurações não podem impedir você de tornar um objeto público. Por padrão, as configurações do bloco de acesso público estão definidas como True (Verdadeiro) em novos buckets do S3.

Atualizar a ACL do objeto usando o console do Simple Storage Service (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 para desfazer essa ação para vários objetos de uma só vez. Para remover o acesso público, será necessário ir para cada objeto no console do Simple Storage Service (Amazon S3). Em seguida, a partir da guia Permissões do objeto, modifique o acesso público. Será necessário fazer isso em cada objeto para o qual queira desfazer o acesso público concedido. Verifique e confirme cuidadosamente a lista de objetos antes de torná-los públicos.

1.    Abra o console do Amazon S3.

2.    Na lista exibida, escolha o bucket com os objetos que deseja atualizar.

3.    Navegue para a pasta contendo os objetos.

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

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

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

7.    Escolha Tornar público.

Para tornar público um objeto individual, é possível repetir o processo anterior ou seguir estas etapas:

1.    No console Simple Storage Service (Amazon S3), escolha o bucket com o objeto que deseja atualizar.

2.    Navegue para a pasta contendo o objeto.

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

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

5.    Escolha Editar.

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

7.    Selecione Entendo quais são os efeitos destas alterações neste objeto.

8.    Escolha Salvar alterações.

Atualizar a ACL do objeto usando a AWS CLI

No caso de objetos já armazenados no Simple Storage Service (Amazon S3), é possível 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 erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.

Ou, é possível executar o 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

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

Importante: antes de começar, verifique 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 etiqueta 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 etiqueta aos objetos que quer tornar publicamente acessíveis para leitura. É possível adicionar ou gerenciar as etiquetas de objeto usando o console do Simple Storage Service (Amazon S3). Ou ainda, é possível pode usar a AWS CLI.

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

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

Para adicionar uma etiqueta a um objeto que não tem nenhuma etiqueta existente, execute este comando:

Aviso: o comando substitui todas as etiquetas de objeto existentes.

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

Para adicionar uma etiqueta a um objeto que já tem etiquetas, execute o comando a seguir. Verifique e confirme ter incluído a nova etiqueta do objeto e quaisquer etiquetas existentes que 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 etiqueta do objeto, execute este comando para revisar as etiquetas 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 essa política de bucket, confirme se seu caso de uso oferece suporte a todos os objetos legíveis publicamente dentro do prefixo.

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 para o prefixo de acesso público de leitura. É possível 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: dependendo do prefixo do objeto, não é necessário copiar o objeto para conceder acesso público de leitura.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?