Trabalhar com URLs pré-assinados - Amazon Simple Storage Service

Trabalhar com URLs pré-assinados

É possível usar URLs pré-assinados para conceder acesso por tempo limitado a objetos no Amazon S3 sem atualizar a política de bucket. Um URL pré-assinado pode ser inserido em um navegador ou usado por um programa para baixar um objeto. As credenciais usadas pelo URL pré-assinado são as do usuário da AWS que gerou o URL.

Também é possível usar URLs pré-assinados para permitir que alguém carregue um objeto específico para o bucket do Amazon S3. Isso permite um carregamento sem exigir que outra parte tenha credenciais ou permissões de segurança da AWS. Se um objeto com a mesma chave já existe no bucket como especificado no URL pré-assinado, o Amazon S3 substitui o objeto existente pelo objeto carregado.

É possível usar o pre-signed URL várias vezes, até a data e a hora de expiração.

Ao criar um URL pré-assinado, você deve fornecer suas credenciais de segurança e especificar o seguinte:

  • Um bucket do Amazon S3

  • Uma chave de objeto (se o download desse objeto for no bucket do Amazon S3, se estiver carregando, esse é o nome do arquivo a ser carregado)

  • Um método HTTP (GET para baixar objetos ou PUT para carregar)

  • Um intervalo de tempo de validade

No momento, os URLs pré-assinados do Amazon S3 não comportam o uso dos algoritmos de soma de verificação de integridade de dados (CRC32, CRC32C, SHA-1, SHA-256) a seguir quando você carrega objetos. Para verificar a integridade do objeto após o carregamento, forneça um resumo MD5 do objeto ao carregá-lo com um URL pré-assinado. Para ter mais informações sobre integridade de objeto, consulte Verificar a integridade do objeto.

Quem pode criar um URL pré-assinado

Qualquer um com credenciais de segurança válidas pode criar um pre-signed URL. Mas para que alguém acesse com êxito um objeto, o URL pré-assinado deve ter sido criado por alguém que tenha permissão para executar a operação na qual o URL pré-assinado é baseado.

Veja a seguir os tipos de credencial que podem ser usados para criar um URL pré-assinado:

  • Perfil de instância do IAM: válido por até 6 horas.

  • AWS Security Token Service: válido até no máximo 36 horas quando assinado com credenciais de segurança de longo prazo ou com a duração da credencial temporária, o que terminar primeiro.

  • Usuário do IAM: válido por até 7 dias quando você estiver usando o AWS Signature Version 4.

    Para criar um URL pré-assinado que seja válido por até sete dias, primeiro delegue credenciais de usuário do IAM (a chave de acesso e a chave secreta) ao método usado para criar o URL pré-assinado.

nota

Se você criou um URL pré-assinado usando uma credencial temporária, o URL expirará quando a credencial expirar. Isso se aplica mesmo que o URL tenha sido criado com um prazo de validade posterior. Para receber informações sobre a permanência de credenciais de segurança temporárias, consulte Comparação das operações de API do AWS STS no Guia do usuário do IAM.

Tempo de validade para URLs pré-assinados

Um URL pré-assinado permanece válido pelo período de tempo especificado quando o URL é gerado. Se você criar um URL pré-assinado com o console do Amazon S3, o tempo de validade pode ser definido entre 1 minuto e 12 horas. Se você usar a AWS CLI ou AWS SDKs, o tempo de validade poderá ser definido como até sete dias.

Se tiver criado um URL pré-assinado usando um token temporário, o URL expirará quando o token expirar, mesmo que você tenha criado o URL com um tempo de expiração posterior. Para obter mais informações sobre como as credenciais que você usa afetam o tempo de validade, consulte Quem pode criar um URL pré-assinado.

O Amazon S3 confere a data e hora de validade de um URL assinado no momento da solicitação HTTP. Por exemplo, se um cliente começar a baixar um arquivo grande imediatamente antes do tempo de expiração, o download continuará mesmo que o tempo de expiração acabe durante o download. No entanto, se a conexão cair e o cliente tentar reiniciar o download posteriormente ao término do tempo de expiração, o download vai falhar.

Limitar recursos de pre-signed URLs

Os recursos de um URL pré-assinado são limitados pelas permissões do usuário que o criou. Em essência, os URLs pré-assinados são tokens ao portador que concedem acesso ao portador. Dessa forma, recomendamos que você os proteja adequadamente. Veja a seguir alguns métodos que podem ser usados para restringir o uso de URLs pré-assinados.

AWS Signature Version 4 (SigV4)

Para aplicar um comportamento específico quando solicitações de URL pré-assinado forem autenticadas usando AWS Signature Version 4 (SigV4), você pode usar chaves de condição nas políticas de bucket e políticas de ponto de acesso. Por exemplo, a política de bucket a seguir usará a condição s3:signatureAge para negar qualquer solicitação de URL pré-assinado do Amazon S3 em objetos no bucket DOC-EXAMPLE-BUCKET1 se a assinatura tiver mais de 10 minutos de idade. Para usar esse exemplo, substitua os user input placeholders por suas próprias informações.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Deny a presigned URL request if the signature is more than 10 min old", "Effect": "Deny", "Principal": {"AWS":"*"}, "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*", "Condition": { "NumericGreaterThan": { "s3:signatureAge": 600000 } } } ] }

Para obter mais informações sobre as chaves de política relacionadas ao AWS Signature versão 4, consulte Autenticação do AWS Signature versão 4 na Referência de API do Amazon Simple Storage Service.

Restrição de caminho de rede

Se quiser restringir o uso de URLs pré-assinados e todo o acesso do Amazon S3 a caminhos de rede específicos, você poderá escrever políticas do AWS Identity and Access Management (IAM). Essas políticas podem ser definidas na entidade principal do IAM que faz a chamada, no bucket do Amazon S3 ou em ambos.

Uma restrição de caminho de rede na entidade principal do IAM exige que o usuário dessas credenciais faça solicitações pela rede especificada. Uma restrição no bucket ou no ponto de acesso exige que todas as solicitações encaminhadas para esse recurso tenham origem na rede especificada. Essas restrições também são aplicadas fora do cenário de URL pré-assinado.

A condição global do IAM que você usa depende do tipo de endpoint. Se estiver usando o endpoint público para o Amazon S3, use aws:SourceIp. Se você estiver usando um endpoint de nuvem privada virtual (VPC) para o Amazon S3, use aws:SourceVpc ou aws:SourceVpce.

A declaração de política do IAM a seguir requer que a entidade principal só acesse a AWS do intervalo de rede especificado. Com essa declaração de política, exige-se que qualquer acesso tenha origem nesse intervalo. Isso inclui o caso de alguém que esteja usando um URL pré-assinado para o Amazon S3. Para usar esse exemplo, substitua os user input placeholders por suas próprias informações.

{ "Sid": "NetworkRestrictionForIAMPrincipal", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddressIfExists": {"aws:SourceIp": "IP-address-range"}, "BoolIfExists": {"aws:ViaAWSService": "false"} } }

Para ver mais um exemplo de políticas de bucket que usam a chave de condição global aws:SourceIp da AWS para restringir o acesso a um bucket do Amazon S3 a um intervalo específico de rede, consulte Gerenciar o acesso com base em endereços IP específicos.