标签: pre-signed-url

使用我自己的域/子域生成 AWS S3 PreSigned URL

我正在使用适用于 .NET 的 AWS 开发工具包,目前正在为我的 S3 存储桶生成预签名 URL。

我目前得到的网址就像 https://{bucketname}.s3.amazonaws.com/{FileAndQueryParameters}

我正在寻找的是类似的东西 https://{MyDomainName}/{FileAndQueryParameters}

我已经尝试用我自己的 CNAME 指向替换第一个 url,{bucketname}.s3.amazonaws.com但我得到了一个明显的

<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>
Run Code Online (Sandbox Code Playgroud)

任何想法如何实现这一点?


顺便说一下,这是我现在使用的代码:

(...)
AmazonS3 client = AWSClientFactory.CreateAmazonS3Client(AccessKey, SecretKey);

string S3_KEY = Key;
string BUCKET_NAME = Bucket;
string FOLDER = SubFolder;
GetPreSignedUrlRequest request = new GetPreSignedUrlRequest();
request.WithBucketName(BUCKET_NAME);
request.WithKey(FOLDER + "/" + S3_KEY);

if (ssUseHTTPS)
{
    request.WithProtocol(Protocol.HTTPS);
}
else
{
    request.WithProtocol(Protocol.HTTP);
}

if …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 pre-signed-url

7
推荐指数
1
解决办法
1240
查看次数

Angular / AWS S3 - 使用预签名 url 将文件上传到 AWS S3

我正在开发一项功能,使用 Angular/presigned url 和 API Gateway/Lambda 将文件上传到 S3,以生成预签名 url。

我的工作流程描述如下:

  1. 从模板中获取选定的文件
  2. 请求我的 api(网关/Lambda)使用文件名生成预签名 URL。

const body = { fileName: this.selectedFile.name } const preSignedUrl = await this.http.post('https://xxxxx.execute-api.eu-west-1.amazonaws.com/dev/v1/profile/avatar ', body).toPromise();

  1. 在生成的预签名 url 上以 PUT 模式发布文件。

后端

我正在使用无服务器(Lambda/API 网关)来计算 presignedUrl。

拉姆达

const AWS = require('aws-sdk')
 
 
module.exports.uploadLargeFile = async (event) => {  
 
  console.log('1. Event: ', event.body);
  const reqBodyAsString = event.body || '{}';
  const fileName = JSON.parse(reqBodyAsString).fileName;
 
  return getUploadURL(fileName);
}
 
const getUploadURL = async (fileName) => {
  const s3Params = {
      Bucket: process.env.AVATAR_BUCKET,
      Expires: 60 …
Run Code Online (Sandbox Code Playgroud)

file-upload amazon-s3 amazon-web-services pre-signed-url angular

7
推荐指数
1
解决办法
3513
查看次数

预签名的S3 URL签名不匹配

标题说明了一切.这是我的代码;

我正在使用node-formidable文件.

form.on("end",function(field, file){
        params.Body = fs.createReadStream(params.filePath)
        delete params.filePath;
        S3.getSignedUrl('putObject',params, function(err, url) {
            if(err){console.log(err);}
            console.log(url);
        });
    })
Run Code Online (Sandbox Code Playgroud)

成功上传后,url变量返回s3 url,类似这样;

https://bucket-name.s3.amazonaws.com/746575308_8c081369df.jpg?AWSAccessKeyId=[key]&Expires=[date]&Signature=[signature]&x-amz-acl=public-read

但仍然收到SignatureDoesNotMatch错误.在描述中说

我们计算的请求签名与您提供的签名不匹配.检查您的密钥和签名方法.

这是我的参数

params = {
    Bucket:"bucketname",
    Key: file.name,
    ACL: 'public-read'
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

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

6
推荐指数
1
解决办法
1684
查看次数

AWS SDK 预签名 URL + 分段上传

有没有办法使用生成的预签名 URL 通过浏览器进行分段上传?

javascript amazon-s3 pre-signed-url

6
推荐指数
2
解决办法
9838
查看次数

s3 预签名 POST 中未强制执行内容类型

我目前正在使用 AWS javascript SDK 创建预签名的 POST。(请注意,这个问题与预签名的 PUT/URL 无关,这是另一个 s3 功能)

https://github.com/aws/aws-sdk-js/

尝试创建预签名帖子时,我会执行以下操作:

const params = {
  Bucket: 'myuniques3bucket',
  Fields: {
    Key: 'key1.png',
    'Content-Type': 'image/png'
  },
  conditions: [
    {bucket: 'myuniques3bucket'},
    {key: 'key1.png'},
    {'Content-Type': 'image/png'},
    ['content-length-range', 1024, 1048576], // 1KB to 10MB
    {'x-amz-date': amzDate},
    {'x-amz-algorithm': 'AWS4-HMAC-SHA256'},
    {'x-amz-credential': `${process.env.AWS_ACCESS_KEY_ID}/20180820/us-east-2/s3/aws4_request`}
  ],
  Expires: 300  // 300 seconds
}

s3.createPresignedPost(params, (err, data) => {
  console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

我正在围绕不应该工作的上传过程进行测试。我发现这里没有强制执行内容类型,因为我可以上传其他文件类型和其他内容类型的帖子参数。

我不清楚 JS SDK 是否为用户管理签名过程,或者我是否需要做一些特殊的事情来在签名中获取这些不同的密钥。

很明显,我可以做一些这样的事情,但不清楚我是否需​​要。不确定图书馆是否应该为我处理这个问题。

TLDR;我需要做什么才能使用 js sdk 通过 s3 预签名 POST 激活内容类型验证?

任何帮助将不胜感激。

post amazon-s3 pre-signed-url aws-sdk

6
推荐指数
1
解决办法
2865
查看次数

React Native - 无需缓存即可快速加载图像的更好方法

我正在使用FastImage缓存图像,并且在按预期缓存数据后加载图像的速度非常快。但是我的服务器每次都为相同的图像生成新的 uri(s3 预签名 url)。

因此,FastImage 将其视为新图像并尝试每次下载,这会影响我的应用程序性能。

我的问题是,有没有什么乐观的方法可以在不缓存的情况下尽可能快地渲染图像?

image amazon-s3 image-caching pre-signed-url react-native

6
推荐指数
1
解决办法
947
查看次数

如何在预签名的 S3 URL 上强制执行 SSL

我知道如何通过存储桶策略在 S3 上强制执行 SSL

但即使使用此存储桶策略,预签名的 S3 对象 URL也可以使用 HTTP 和 HTTPS 访问。

有没有办法在预签名 URL 上强制执行 SSL?在预签名期间使用存储桶策略或使用特定选项。

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

6
推荐指数
1
解决办法
1066
查看次数

boto3 s3 generate_presigned_url ExpiresIn 不能按预期工作

我试图pre-signed URL用 7dsys 过期时间生成。(据说最长持续时间为 7 天,AWS S3 预签名 URL 没有到期日

# It is called and retruned in AWS Lambda
boto3.client('s3').generate_presigned_url(
    'get_object',
    Params={'Bucket': bucket, 'Key': object_key},
    ExpiresIn=(60*60*24*7)  # 7days
)
Run Code Online (Sandbox Code Playgroud)

然而,似乎不是保留了pre-signed URL7 天,而是仅仅保留了几个小时。之后pre-signed URL只返回 XML 格式。

<Error>
  <Code>ExpiredToken</Code>
    <Message>The provided token has expired.</Message>
.
.
.
</Error>
Run Code Online (Sandbox Code Playgroud)

甚至每次尝试的过期时间似乎都不一样,有时是 5 小时,有时是 12 小时。

我不知道为什么。

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

6
推荐指数
1
解决办法
1085
查看次数

通过签名 url 将图像上传到 AWS-S3 时图像损坏

我正在尝试通过来自 NodeJS 服务器(而不是来自浏览器)的签名 url 将图像上传到 aws-s3。要上传的图像已由 NodeJS 生成。我从 aws 获取签名的 url 并成功将其上传到 s3。

但是我的形象被破坏了。出于某种原因,S3 正在向我的图像添加一些标题(比较附加的图像)。

我究竟做错了什么?

获取签名网址:

    try {
        var params = {
            Bucket: bucketName,
            Key: 'FILE_NAME.png',
            Expires: 60
        };
        const url = await s3.getSignedUrlPromise('putObject', params);
        return url;
    } catch (err) {
        throw err;
    }
Run Code Online (Sandbox Code Playgroud)

上传到 s3

        var stats = fs.statSync(filePath);
        var fileSizeInBytes = stats["size"];
        const imageBuffer = fs.readFileSync(filePath);

        var formData = {
            'file': {
                value: imageBuffer,
                options: {
                    filename: 'FILE_NAME.png'
                }
            }
        };

        request({ 
            method: 'put',
            url, 
            headers: { …
Run Code Online (Sandbox Code Playgroud)

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

6
推荐指数
3
解决办法
1643
查看次数

AWS S3 签名 url - X-Amz-Security-Token 过期太早

我处于这种情况,我需要一个预签名的网址才能生存一个月左右。由于签名 v4 无法提供此功能,因此我决定暂时使用 V2。

我已将过期时间设置为 1 个月,但由于某种原因它会在 1 天后过期?(不知道具体到期时间,可能是同一天)

<Code>ExpiredToken</Code>
<Message>The provided token has expired.</Message>
Run Code Online (Sandbox Code Playgroud)

当我进一步深入研究时,问题似乎出在 X-Amz-Security-Token 上,它过期得太早了。但我不知道如何为此标头设置值?(找不到任何相关信息)

设置:它是一个 lambda 函数,可生成签名 url 以从 S3 获取文件。一切都是通过云信息来完成的。并使用 JavaScript SDK 完成

    const s3 = new AWS.S3({
    signatureVersion: 'v2',
    region: 'eu-west-1'
});

const bucketParam = {
    Bucket: 'test-bucket',
    Key: 'testFile-1111-2222',
    Expires: 2592000
};
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激

amazon-s3 amazon-web-services aws-cloudformation pre-signed-url aws-lambda

6
推荐指数
2
解决办法
8347
查看次数