Carregar objetos com URLs pré-assinados - Amazon Simple Storage Service

Carregar objetos com URLs pré-assinados

Você pode usar URLs pré-assinados para permitir que alguém carregue um objeto no seu bucket do Amazon S3. O uso de um URL pré-assinado permitirá um carregamento sem exigir que outra pessoa tenha credenciais ou permissões de segurança da AWS. Um URL pré-assinado é limitado pelas permissões do usuário que o criou. Isto é, se você receber um URL pré-assinado para carregar um objeto, só poderá fazer isso se o criador do URL pré-assinado tiver as permissões necessárias para carregar esse objeto.

Quando alguém usa o URL para carregar um objeto, o Amazon S3 cria o objeto no bucket especificado. Se um objeto com a mesma chave especificada no pre-signed URL já existir no bucket, o Amazon S3 substituirá o objeto existente pelo objeto obtido por upload. Após o carregamento, o proprietário do bucket será o proprietário do objeto.

Para obter informações gerais sobre URLs pré-assinados, consulte Baixar e fazer upload de objetos com URLs pré-assinados.

É possível criar um URL pré-assinado para carregar um objeto sem escrever nenhum código usando o AWS Explorer for Visual Studio. Também é possível gerar um URL pré-assinado programaticamente usando AWS SDKs.

nota

No momento, o AWS Toolkit for Visual Studio não é compatível com o Visual Studio para Mac.

  1. Instale o AWS Toolkit for Visual Studio usando as instruções a seguir, Installing and setting up the Toolkit for Visual Studio no Guia do usuário do AWS Toolkit for Visual Studio.

  2. Conecte-se à AWS usando as etapas a seguir, Conectar-se ao AWS no Guia do usuário do AWS Toolkit for Visual Studio.

  3. No painel do lado esquerdo chamado AWS Explorer, clique com o botão direito do mouse no bucket para o qual você deseja que um objeto seja carregado.

  4. Escolha Criar URL pré-assinado….

  5. Na janela pop-up, defina a data e hora de validade para o URL pré-assinado.

  6. Em Chave de objeto, defina o nome do arquivo a ser carregado. O arquivo que você está carregando deve corresponder exatamente a esse nome. Se já existir um objeto com a mesma chave de objeto no bucket, o Amazon S3 substituirá o objeto existente pelo objeto recém-carregado.

  7. Escolha PUT para especificar que esse URL pré-assinado será usado para carregar um objeto.

  8. Escolha o botão Generate (Gerar).

  9. Para copiar o URL para a área de transferência, escolha Copy (Copiar).

  10. Para usar esse URL, você pode enviar uma solicitação PUT com o comando curl. Inclua o caminho completo para o arquivo e o próprio URL pré-assinado.

    curl -X PUT -T "/path/to/file" "presigned URL"

É possível gerar um URL pré-assinado que possa realizar uma ação do S3 por tempo limitado.

nota

Se você usar a AWS CLI ou SDKs da AWS, o tempo de validade dos URLs pré-assinados poderá ser definido como até sete dias. Para obter mais informações, consulte Tempo de validade para URLs pré-assinados.

Python

O script do Python a seguir gera um URL PUT pré-assinado para fazer upload de um objeto em um bucket de uso geral do S3.

  1. Copie o conteúdo do script e salve-o como arquivo “put-only-url.py”. Para usar os exemplos a seguir, substitua os espaços reservados para entrada do usuário por suas próprias informações (como o nome de seu arquivo).

    import argparse import boto3 from botocore.exceptions import ClientError def generate_presigned_url(s3_client, client_method, method_parameters, expires_in): """ Generate a presigned Amazon S3 URL that can be used to perform an action. :param s3_client: A Boto3 Amazon S3 client. :param client_method: The name of the client method that the URL performs. :param method_parameters: The parameters of the specified client method. :param expires_in: The number of seconds the presigned URL is valid for. :return: The presigned URL. """ try: url = s3_client.generate_presigned_url( ClientMethod=client_method, Params=method_parameters, ExpiresIn=expires_in ) except ClientError: print(f"Couldn't get a presigned URL for client method '{client_method}'.") raise return url def main(): parser = argparse.ArgumentParser() parser.add_argument("bucket", help="The name of the bucket.") parser.add_argument( "key", help="The key (path and filename) in the S3 bucket.", ) args = parser.parse_args() # By default, this will use credentials from ~/.aws/credentials s3_client = boto3.client("s3") # The presigned URL is specified to expire in 1000 seconds url = generate_presigned_url( s3_client, "put_object", {"Bucket": args.bucket, "Key": args.key}, 1000 ) print(f"Generated PUT presigned URL: {url}") if __name__ == "__main__": main()
  2. Para gerar uma URL PUT pré-assinado para fazer upload de um arquivo, execute o script a seguir com o nome do bucket e o caminho do objeto desejado.

    O comando a seguir usa exemplo de valores. Substitua os espaços reservados para entrada do usuário por suas próprias informações.

    python put-only-url.py amzn-s3-demo-bucket <object-path>

    O script exibirá um URL PUT pré-assinado:

    Generated PUT presigned URL: https://amzn-s3-demo-bucket.s3.amazonaws.com/object.txt?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=vjbyNxybdZaMmLa%2ByT372YEAiv4%3D&Expires=1741978496
  3. Agora você pode fazer upload do arquivo usando o URL pré-assinado gerado com curl:

    curl -X PUT -T "path/to/your/local/file" "generated-presigned-url"

Para obter mais exemplos de como usar SDKs da AWS para gerar um URL pré-assinado para fazer upload de um objeto, consulte Create a presigned URL for Amazon S3 by using an AWS SDK.