标签: pre-signed-url

在getSignedUrl到期后,AWS S3正常处理403

我正在尝试通过过期的URL访问S3资源时优雅地处理403.目前它返回一个amz xml错误页面.我上传了一个403.html资源,并认为我可以重定向到该资源.

存储区资源是我的应用程序保存/提取的资产.仍然,阅读文档我设置存储桶属性以将存储桶作为静态网页页面处理,并将403.html上传到存储桶根目录.除了对资源403.html的公共GET访问权限外,所有公共权限都被阻止.在存储桶属性,网站设置中,我将403.html指示为错误页面.http://<bucket>.s3-website-us-east-1.amazonaws.com/some-asset.html正确访问重定向到http://<bucket>.s3-website-us-east-1.amazonaws.com/403.html

但是,当我使用aws-sdk js/node和call方法getSignedUrl('getObject', params)生成签名的url时,它会返回不同的主机url:https://<bucket>.s3.amazonaws.com/从此方法访问过期的资源不会被重定向到403.html.我猜测,由于主机地址不同,这就是它不会自动重定向的原因.

我还为条件设置了静态网站路由规则

<Condition>
  <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
  <ReplaceKeyWith>403.html</ReplaceKeyWith>
</Redirect>
Run Code Online (Sandbox Code Playgroud)

仍然没有重定向签名的网址.所以我不知道如何优雅地处理这些过期的网址.任何帮助将不胜感激.

amazon-s3 amazon-web-services http-status-code-403 pre-signed-url

5
推荐指数
1
解决办法
1799
查看次数

通过 Flutter App 中的 PreSigned URL 将文件上传到 S3。但是当我下载它时文件已损坏

我正在开发 Flutter 应用程序,在其中使用预签名 URL 将图像文件(PUT 请求)上传到 AWS S3。上传成功,因为我可以在 S3 中看到文件。但是当我单击并从存储桶中下载它时,下载的文件已损坏。

我正在使用 Dio 库上传文件。通过邮递员将图像文件上传为二进制文件非常有效

uploadFileToPresignedS3(
    File payload, String fileName, String presignedURL) async {
  try {
    Dio dio = new Dio();

    FormData formData = new FormData.from(
        {"name": fileName, "file1": new UploadFileInfo(payload, fileName)});
    dio.put(presignedURL, data: formData);
  } catch (ex) {
    print(ex);
  }
}


Run Code Online (Sandbox Code Playgroud)

预期:上传的文件不会被破坏

实际结果:上传的文件已损坏

amazon-s3 amazon-web-services pre-signed-url flutter

5
推荐指数
1
解决办法
2518
查看次数

AWS S3签名url编码生成"SignatureDoesNotMatch"

我正在使用cordova文件传输来使用签名网址从aws s3下载文件,因为cordova filetransfer对uri进行编码,签名中的"%"将转换为"%25",从而导致签名不匹配

amazon-s3 file-transfer amazon-web-services cordova pre-signed-url

4
推荐指数
1
解决办法
998
查看次数

使用角色而不是密钥来获取 s3 中的签名 url,但没有返回任何内容,也没有错误

我尝试过,如果我使用访问密钥,它工作正常,但我试图获取访问密钥并使用角色,但是一旦我获取访问密钥。我得到的回报是www.aws.amazon.com

    const AWS = require('aws-sdk');
    const s3 = new AWS.S3();
    const params = {Bucket: config.bucket, Expires: config.time, Key};
    const url = s3.getSignedUrl('getObject', params);
    console.log('The URL is', url);
Run Code Online (Sandbox Code Playgroud)

我什至通过进入我的 ec2 并运行 cli 命令来确保我的角色设置正确,aws s3 presign s3://bucket/path/file该命令工作正常,我得到了签名的 url 作为回报,所以这意味着我的角色是正确的,不是吗?

预先感谢您的任何建议/帮助。

amazon-s3 bucket amazon-web-services pre-signed-url

4
推荐指数
1
解决办法
1558
查看次数

使用预签名 URL 进行 AWS S3 身份验证的用户访问?

我想在私有 AWS S3 存储桶上托管文件,只有通过我的 Web 应用程序身份验证的用户才能访问该存储桶。这些文件下载的链接必须是静态的。

简单的代理方法:

我知道这可以使用代理服务来完成。在这种情况下,静态链接将指向该服务,并且该服务将处理请求用户会话的验证,如果它有效,该服务将使用来自 S3 的文件内容进行响应。

预签名 URL 代理方法:

但是,与其实施代理来控制对文件的访问,我想知道是否可以以某种方式使用预先签名的 URL?

https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html

在这种情况下,代理的作用只是向用户返回一个预先签名的 URL,而不是来自 S3 的文件的实际负载。然后,最终用户可以使用这个预先签名的 URL 直接从 S3 下载文件。我不清楚的是如何在浏览器中管理此流程,我假设我需要将 JavaScript 编写为以下内容:

  1. 从代理服务请求预签名 URL
  2. 等待回应
  3. 使用响应中提供的预签名 URL(预签名 URL)下载实际文件

我在正确的轨道上吗?

javascript amazon-s3 amazon-web-services pre-signed-url

4
推荐指数
1
解决办法
1495
查看次数

S3 签名的 url 在操作期间是否过期?

我有一个过程,我获得了一个在 5 分钟后过期的存储桶的签名 url。一旦我得到签名的 url,我就开始将文件上传到存储桶。

可以说,完全上传文件需要 6 分钟。会发生什么?

到期时间是指操作(例如下载、上传)何时可以开始还是指操作何时完成?

amazon-s3 amazon-web-services pre-signed-url

4
推荐指数
1
解决办法
1484
查看次数

使用预签名 URL 流式上传到 S3

我正在尝试将文件上传到客户的 S3 中。我获得了一个预签名 URL,允许我执行请求PUT。我无权访问他们的访问权限和密钥,因此不可能使用 AWS SDK。

用例是我正在使用 gRPC 服务器流调用并将其转换为带有一些字段更改的 csv。当呼叫传入时,我希望能够将转换后的 gRPC 响应流式传输到 S3 中。我需要通过流式传输来完成此操作,因为响应可能会变得相当大,超过 100mb,因此在将所有内容上传到 S3 之前将其加载到内存中并不理想。有任何想法吗?

upload amazon-s3 amazon-web-services node.js pre-signed-url

4
推荐指数
1
解决办法
3879
查看次数

使用 aws-sdk 的 AWS S3 签名 URL 失败并显示“AuthorizationQueryParametersError”

我正在尝试为 S3 上的私有文件 test.png 创建一个预先签名的 URL。我的代码:

var AWS = require('aws-sdk'); 

AWS.config.region = 'eu-central-1';

const s3 = new AWS.S3();

const key = 'folder/test.png';
const bucket = 'mybucket';
const expiresIn = 2000; 

const params = {
    Bucket: bucket,
    Key: key,
    Expires: expiresIn,
};
console.log('params: ', params);
console.log('region: ', AWS.config.region);

var url = s3.getSignedUrl('getObject', params);
console.log('url sync: ', url);

s3.getSignedUrl('getObject', params, function (err, urlX) {
    console.log("url async: ", urlX);
});
Run Code Online (Sandbox Code Playgroud)

它在控制台中返回一个 URL。当我尝试访问它时,它显示

<Error>
<Code>AuthorizationQueryParametersError</Code>
<Message>
Query-string authentication version 4 requires the X-Amz-Algorithm, X-Amz-Credential, …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 node.js pre-signed-url aws-sdk

3
推荐指数
1
解决办法
4697
查看次数

无法使用预签名 URL 通过 Postman 将文件上传到 S3。错误:签名不匹配

如何使用签名 URL 将文件上传到 S3?

我尝试了以下方法:

  const AWS = require('aws-sdk');
  const s3 = new AWS.S3({ accessKeyId: "", secretAccessKey: "" });

  const url = s3.getSignedUrl("putObject", {
    Bucket: "SomeBucketHere",
    Key: "SomeNameHere",
    ContentType: "binary/octet-stream",
    Expires: 600
  });
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试按照以下步骤使用 Postman 上传时,出现错误SignatureDoesNotMatch

  1. 使用上述代码中的 URL 的 PUT 方法
  2. 正文:(binary单选按钮),选择文件,选择要上传的文件
  3. 点击发送

我可以确认 IAM 权限不是这里的问题。我可以完全访问存储桶。

出了什么问题以及如何测试我的签名 URL?

amazon-s3 amazon-web-services pre-signed-url postman

3
推荐指数
1
解决办法
7895
查看次数

用于上传文件的 AWS S3 generate_presigned_url 与 generate_presigned_post

我正在使用预签名的 URL 将文件上传和下载到 S3 存储桶。我遇到了这两种方法generate_presigned_url('put_object')generate_presigned_post.

这两种方法有什么区别?

# upload a file to a bucket with generate_presigned_url with put object
s3_client.generate_presigned_url('put_object', Params= {'Bucket': "BUCKET_NAME",
                                                        "Key":"OBJECT_KEY"},
                                                         ExpiresIn=3600)
  

# upload a file to a bucket using presigned post
s3_client.generate_presigned_post(Bucket="BUCKET_NAME", Key="OBJECT_PATH",
                                  ExpiresIn=3600)
Run Code Online (Sandbox Code Playgroud)

有人可以解释两者之间的区别吗?

如果我们有generate_presigned_post为什么首先有一种上传generate_presigned_url方法put_object

注意:我知道这generate_presigned_post是推荐的文件上传方法,我也使用过。但是,没有关于这些方法之间区别的明确文档。

amazon-s3 amazon-web-services python-3.x pre-signed-url boto3

3
推荐指数
1
解决办法
3030
查看次数