amazon-web-services - S3 预签名 url 不带路径

标签 amazon-web-services amazon-s3 boto3 boto

我需要一种方法让客户端将数据上传到 S3,而不向他们显示文件的完整位置(路径)。这可以通过 AWS S3 预签名 URL 实现吗?

我正在使用 boto3

s3.client.generate_presigned_url(
  ClientMethod='put_object', 
  ExpiresIn=7200,
  Params={'Bucket': BUCKET, 'Key': name}
)

但结果将是:

https://s3.amazonaws.com/MY_BUCKET/upload/xxxx-xxxx/file-name.bin?AWSAccessKeyId=XXXX&Signature=XXXX&Expires=XXXX

我需要类似的东西,不会在路径中显示 key 名称(/upload/xxxx-xxxx/file-name.bin)。

如果没有预签名网址,我还有哪些其他解决方案?

最佳答案

我认为最好的方法是使用 AWS Cloudfront 分发文件。您可以将 Cloudfront 发行版的来源设置为 MY_BUCKET.s3.amazonaws.com。还可以使用 MY_BUCKET.s3.amazonaws.com/upload 等子文件夹作为源。

Cloudfront 将使用生成的 CDN 端点域在 S3 源中为您的文件提供服务,或者也可以设置和使用自定义域。

https://d111111abcdef8.cloudfront.net/upload/xxxx-xxxx/file-name.bin https://uploads.example.com/upload/xxxx-xxxx/file-name.bin

如果您使用子文件夹作为源:

https://uploads.example.com/xxxx-xxxx/file-name.bin


有关在 Cloudfront 上将 S3 存储桶设置为源的更多信息:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html#concept_S3Origin

有关使用 S3 存储桶的目录路径作为源的更多信息:https://aws.amazon.com/about-aws/whats-new/2014/12/16/amazon-cloudfront-now-allows-directory-path-as-origin-name/

有关自定义 URL 的更多信息:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html

关于amazon-web-services - S3 预签名 url 不带路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54932737/

相关文章:

python - Athena 查询在控制台中有效,但在 sagemaker 中不适用于 boto3 客户端(将 csv 转换为表格)

amazon-web-services - CodeDeploy找不到我的AWS Lambda函数

php - 我们的用户从 Amazon S3 下载随机失败,需要帮助找出问题所在

python - 到最近的 AWS 区域的客户端 IP 地址

php - Crontab 没有运行 PHP 脚本,尽管有日志

python - AttributeError: 'module' 对象在脚本中没有属性 '_Condition'

amazon-s3 - 将 Locust 与 Boto3 结合使用的示例

python - 在 yaml 中构建 Lambda 函数 - 问题

python - 如何在 boto3 中设置 executionRoleArn 的值?

amazon-web-services - 在可扩展的网站上显示实时数据?