Ir para o conteúdo

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

7 minuto de leitura
0

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

Breve descrição

Use uma das seguintes formas de conceder acesso público de leitura a objetos em seu bucket do S3:

  • Use o console do Amazon S3 para atualizar a lista de controle de acesso (ACL) do objeto.
  • Use a AWS Command Line Interface (AWS CLI) para atualizar a ACL do objeto.
  • 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: ao definir a Propriedade de objeto do S3 como proprietário do bucket aplicada ao seu bucket, não é possível usar ACLs de bucket e objeto para conceder acesso público. Na maioria dos casos, você não precisa de ACLs para 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.

Novos buckets, pontos de acesso e objetos não permitem acesso público por padrão. Se você configurou o acesso público em bloco para todos os buckets em sua conta da AWS, receberá a mensagem “Bucket and objects not public” (Bucket e objetos não públicos).

Para acessar o bucket público, certifique-se de que sua rede não tenha firewalls ou configurações que bloqueiem o tráfego de saída para o domínio do bucket.

Resolução

Importante: por padrão, as configurações de bloqueio de acesso público são definidas como Verdadeiro nos novos buckets do S3. Antes de começar, altere as configurações de bloqueio de acesso público para Falso no nível da conta ou no nível do bucket.

Use o console do Amazon S3 para atualizar a ACL do objeto

Torne vários objetos públicos ao mesmo tempo

Aviso: certifique-se de revisar cuidadosamente os objetos antes de torná-los públicos. Depois de tornar vários objetos públicos, não será possível desfazer essa ação para todos os objetos ao mesmo tempo. Em vez disso, você deve modificar o Acesso público na guia Permissões de cada objeto.

Para tornar vários objetos públicos de uma só vez, conclua as seguintes etapas:

  1. Abra o Console do Amazon S3 e selecione os objetos que você deseja tornar públicos.
  2. Escolha Ações e, em seguida, escolha Tornar público.
  3. Na caixa de diálogo Tornar público, confirme se a lista de objetos está correta.
  4. Escolha Tornar público.

Tornar um objeto público

Para tornar público somente um objeto, repita o processo anterior ou realize as seguintes etapas:

  1. Abra o Console do Amazon S3 e selecione o bucket para o objeto que você deseja tornar público.
  2. Em Objetos, selecione o objeto.
  3. Escolha a guia Permissões e, em seguida, escolha Editar.
  4. Na seção Todos, escolha Objetos lidos.
  5. Selecione Entendo os efeitos dessas alterações neste objeto.
  6. Escolha Salvar alterações.

Use a AWS CLI para atualizar a ACL do objeto

Observação: se você receber erros ao executar comandos da AWS CLI, consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Para um objeto que já está armazenado no Amazon S3, é possível executar um comando put-object-acl para atualizar a ACL do objeto para acesso público de leitura:

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

Observação: substitua exampleobject pelo seu objeto.

Ou é possível executar o comando put-object-acl para conceder controle total do objeto ao proprietário da conta e acesso de leitura a todos os outros:

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

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

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 do Amazon S3 para marcação de objetos.

Para usar uma política para conceder acesso público de leitura a objetos com uma tag específica, realize as seguintes etapas:

  1. Adicione uma política de bucket que permita o acesso público de leitura a qualquer objeto com uma tag específica. Por exemplo, a política a seguir permite acesso público de leitura para qualquer objeto que tenha a tag de 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"
                    }
                }
            }
        ]
    }
  2. Adicione a tag aos objetos que você deseja que sejam legíveis publicamente.

  3. Para verificar quais tags um objeto tem, execute um comando get-object-tagging na AWS CLI:

    aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject
  4. Para adicionar uma tag a um objeto que não tem tags, execute um comando put-object-tagging:

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

    Aviso: o comando anterior substitui todas as tags que um objeto tem.

  5. Para adicionar uma nova tag a um objeto que já tem tags, execute o comando put-object-tagging:

    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}]'
    

    Observação: certifique-se de incluir a nova tag de objeto e as tags antigas que você deseja manter.

  6. Para verificar as tags do objeto, execute o comando get-object-tagging novamente:

    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. A política a seguir não concede acesso à lista para o prefixo. O usuário pode acessar o objeto somente quando o caminho do objeto é conhecido. Se o usuário tentar acessar um objeto que não existe no prefixo, ele receberá um erro 403.

  1. Para conceder acesso público de leitura a um prefixo de objeto específico, adicione a política de bucket a seguir:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AddPerm",
                "Effect": "Allow",
                "Principal": "*",
                "Action": [
                    "s3:GetObject"
                ],
                "Resource": [
                    "arn:aws:s3:::DOC-EXAMPLE-BUCKET/publicprefix/*"
                ]
            }
        ]
    }
  2. Execute o comando cp para copiar um objeto para o prefixo com acesso público de leitura:

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

Observação: se o objeto já tiver um prefixo legível publicamente, você não precisará copiar o objeto para um novo prefixo.

Acesse buckets ou objetos públicos do S3 a partir de redes restritas

Para acessar buckets ou objetos públicos do S3 a partir de redes restritas, é possível adicionar uma política de bucket que permita o acesso a partir de um intervalo de endereços IP específico. O exemplo de política a seguir permite a solicitação GET dos intervalos CIDR 192.0.2.0/24 e 203.0.113.0/24:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "192.0.2.0/24",
                        "203.0.113.0/24"
                    ]
                }
            }
        }
    ]
}

Informações relacionadas

Configurar ACLs

Bloquear o acesso público ao seu armazenamento Amazon S3

AWS OFICIALAtualizada há um ano