标签: pre-signed-url

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
查看次数

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
查看次数

如何使用 .NET 为 CloudFront 公开的 Amazon S3 生成签名 URL

我想要实现的目标是生成一个指向源自 S3 存储桶的 CloudFront 发行版的 singedURL。

我已成功对直接指向 S3 存储桶的 URL 进行签名,如以下 AWS 规范 -使用适用于 .NET 的 AWS SDK 生成预签名对象 URL中所述,并且工作正常。

但我真正需要的是生成签名的 CloudFront URL。

我假设我的分发已正确配置,因为我可以使用(https://d298o8yem5c56d.cloudfront.net/123.pdf)访问它,假设“限制查看者访问:”在“行为”设置中设置为“否”。将其切换为“是”后,如果没有signedURL,则无法再访问它。

我尝试使用 AWS 开发人员指南中的示例代码:使用 C# 和 .NET Framework 创建 URL 签名

URL已生成,但我收到以下错误消息

<Error> <Code>AccessDenied</Code> <Message>Access denied</Message> </Error>

有什么想法我应该检查什么吗?

.net c# amazon-web-services amazon-cloudfront pre-signed-url

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

Cloudfront URL 永不过期

Scenerio:我正在尝试生成 s3 中对象的 Cloudfront 签名 URL。

步骤:
1. 在 s3 存储桶中创建一个对象并将其公开。
2. 创建一个指向该 s3 存储桶的 cloudfront 分发。
3.使用下面的代码生成签名的url

以下是从其文档生成 cloudfront 签名 url 的代码。

import datetime

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from botocore.signers import CloudFrontSigner


def rsa_signer(message):
    with open('path/to/key.pem', 'rb') as key_file:
        private_key = serialization.load_pem_private_key(
        key_file.read(),
        password=None,
        backend=default_backend()
       )
    return private_key.sign(message, padding.PKCS1v15(), hashes.SHA1())

key_id = 'AKIAIOSFODNN7EXAMPLE'
url = 'https://d2949o5mkkp72v.cloudfront.net/hello.txt'
expire_date = datetime.datetime(2017, 1, 1)

cloudfront_signer = CloudFrontSigner(key_id, rsa_signer)

# …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services amazon-cloudfront pre-signed-url boto3

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

可恢复上传到 GCS Google Cloud Storage 签名 url 的内容已损坏

我正在尝试使用 Postman 模拟可恢复上传到 GCS 签名 url 以执行两个 PUT 以查看它是如何工作的。

参考几个帖子后:

我可以使用 Google Cloud Storage 签名 URL 进行可恢复上传吗?

使用签名网址上传到 Google Cloud

如何使用带有签名 url 的 gcs-resumable-upload

我终于成功了并成功恢复了 200 OK,但文件已损坏。以下是步骤:

0)。POST 到我们的服务器(运行 NodeJS 8.11)以获取带有 action=="resumable" 的存储桶签名 url。服务器代码是:

      const file = bucket.file(fileName);
      const config = {
        action: 'resumable',
        version: 'v4',
        expires,
        contentType
      };
      file.getSignedUrl( config, (error, url) => {
        if (error) return reject(error);
        resolve(url);
      });
Run Code Online (Sandbox Code Playgroud)

这将返回签名网址

https://storage.googleapis.com/<bucket_name/<path_to_file>?GoogleAccessId=<service_account>&Expires=<expiry_time>&Signature=<signature>

1)。POST 到带有标题{ 'x-goog-resumable': 'start' }和空正文的签名网址。我取回了创建的 HTTP 201,以及与签名 URL 相同的值的“Location”标头,加上&upload_id=AEnB2UqIJL_jf.....末尾的 …

google-cloud-storage pre-signed-url resumable

5
推荐指数
0
解决办法
779
查看次数

如何使用 AWS S3 签名 url 从 Postman 上传文件?

我想实现以下目标 -
1. 生成签名 URL
2. 使用 Postman 上传文件 (image.jpg) 到 URL

我正在使用 AWS Node SDK 创建 URL,
以下是代码 -

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

AWS.config.update({
    region: 'us-east-1'
});

const s3 = new AWS.S3();

var presignedPUTURL = s3.getSignedUrl('putObject', {
    Bucket: 'some-bucket',
    Key: 'test/image.jpg',
    Expires: 3600
});

console.log(presignedPUTURL);
Run Code Online (Sandbox Code Playgroud)

该代码创建了一个 URL,如 -

https://some-bucket.s3.amazonaws.com/test/image.jpg?AWSAccessKeyId=ABCDxxx&Expires=1572339646&Signature=someSignaturexxx
Run Code Online (Sandbox Code Playgroud)

这是邮递员的回复-

<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)

邮递员电话—— 在此处输入图片说明
-------------------------------------------------- ----------------------------- 在此处输入图片说明

我试过这个 -
https://medium.com/@aidan.hallett/securing-aws-s3-uploads-using-presigned-urls-aa821c13ae8d

我还尝试了各种组合,代码中的密钥和文件名的上传具有相同的名称,
不同的内容类型组合,
但没有运气。

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

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

测试 AWS S3 预签名 Url 返回 403 Forbidden (Nodejs)

我在 API 网关后面有一个 Lambda Nodejs 函数,它成功返回预签名 URL:

const AWS = require('aws-sdk');
const S3 = new AWS.S3({
  apiVersion: '2006-03-01',
  signatureVersion: 'v4'
});

function getSignedUrl(id, type) {
  const key = `uploads/${id}.${type}`;
  return S3.getSignedUrl('putObject', {
    Bucket: 'example-bucket-name',
    Key: key,
    Expires: 300
  });
}
Run Code Online (Sandbox Code Playgroud)

预签名 URL 可能如下所示:

https://example-bucket-name.s3.eu-central-1.amazonaws.com/uploads/489eb7115d0c479eaf9c3b6a01eb1893.png?Content-Type=image%2Fpng&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential= ASIARTVN4TPKUACY5POZ%2F20200616%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20200616T104031Z&X-Amz-Expires=300&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEEMaDGV1LWNlbnRyYWwt MSJHMEUCIQCDd%2B5hFjcBd%2FA6TEV7Se6L%2B6V8VtgCrMg0%2FbOkoGKy1wIgL20u20i%2B80rnBf49MfU1T3MQK2RQdoyQF6SwGQiYgeMq7gEIvP%2F%2F%2F% 2F%2F%2F%2F%2F%2F%2FARABGgwxMTA5NjAwOTAwNjkiDIcy2z8%2FpQIhMOOaZirCAUFhV6uGF%2Ff44lDl%2BaFxIt9D302gcuPaxlrgZWlRMHb%2FEdrKFJsWP%2FG7%2B6ovilKh9WmcBX1 fzuVa%2BHQ6rv6OaCueMENDOBEj%2FvJ1hrI%2FwMDF1RLVlqq7pTDp6h6hmUxPfbqXu1k8sjcFotVzXZTzR0dX6kmWl41uEvaglXjrGG3ApvviH%2BSFLdUdvK9PBgrgSlamGIhxdJN75xxBzQMEL fdpPJ6QanhLEwIa%2FuMliHPliXC2fasMzFEheA3Xmik43McnMJ3DovcFOuABdae1G7uUXOSaQzGZ7IjPLLZnMFfow4SzosQHlMUurlqQATPbieC9W3McsMVwggwzZX6BcN9OJb%2B0Ag3x9pS5eLnLsEio%2FyAP ZJfXzoGBH5AdZ6TAZtC5cgKy0TEebH%2F3bF4%2FiamoTQ6YcZ4f48NefoNFHcRPXl3VF%2FdINmuTSG1cNlh2svT9jAUfOgaeK7tnFAW79L38Nv7xnnFMYFpyxoUx8XVkffCXmq15dyG7rLIR0FHkJ 7p4C8eEqbQzOj%2Fsj1ELFFAWPtq38ZgFnWF%2BYf6W4UrkHD9AGdUucD1qvAA% 3D&X-Amz-签名=e11f346296a979e586b8f81a9db2ef2ce58c9f7a13a4f3c31f9a0bb9997b8b81&X-Amz-SignedHeaders=主机

然而,当在浏览器中测试所述 URL 时,我得到一个 SignatureDoesNotMatch。我认为这似乎很公平,因为我只想稍后将其与应用程序中的 PUT 一起使用。

然而,使用curl或postman我得到403 Forbidden:

curl -v -X PUT -T 489eb7115d0c479eaf9c3b6a01eb1893.png "https://example-bucket-name.s3.eu-central-1.amazonaws.com/uploads/489eb7115d0c479eaf9c3b6a01eb1893.png?Content-Type=image%2Fpng&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIARTVN4TPKUACY5POZ%2F20200616%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20200616T104031Z&X-Amz-Expires=300&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEEMaDGV1LWNlbnRyYWwtMSJHMEUCIQCDd%2B5hFjcBd%2FA6TEV7Se6L%2B6V8VtgCrMg0%2FbOkoGKy1wIgL20u20i%2B80rnBf49MfU1T3MQK2RQdoyQF6SwGQiYgeMq7gEIvP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARABGgwxMTA5NjAwOTAwNjkiDIcy2z8%2FpQIhMOOaZirCAUFhV6uGF%2Ff44lDl%2BaFxIt9D302gcuPaxlrgZWlRMHb%2FEdrKFJsWP%2FG7%2B6ovilKh9WmcBX1fzuVa%2BHQ6rv6OaCueMEnDOBEj%2FvJ1hrI%2FwMDF1RLVlqq7pTDp6h6hmUxPfbqXu1k8sjcFotVzXZTzR0dX6kmWl41uEvaglXjrGG3ApvviH%2BSFLdUdvK9PBgrgSlamGIhxdJN75xxBzQMELfdpPJ6QanhLEwIa%2FuMliHPliXC2fasMzFEheA3Xmik43McnMJ3DovcFOuABdae1G7uUXOSaQzGZ7IjPLLZnMFfow4SzosQHlMUurlqQATPbieC9W3McsMVwggwzZX6BcN9OJb%2B0Ag3x9pS5eLnLsEio%2FyAPZJfXzoGBH5AdZ6TAZtC5cgKy0TEebH%2F3bF4%2FiamoTQ6YcZ4f48NefoNFHcRPXl3VF%2FdINmuTSG1cNlh2svT9jAUfOgaeK7tnFAW79L38Nv7xnnFMYFpyxoUx8XVkffCXmq15dyG7rLIR0FHkJ7p4C8eEqbQzOj%2Fsj1ELFFAWPtq38ZgFnWF%2BYf6W4UrkHD9AGdUucD1qvAA%3D&X-Amz-Signature=e11f346296a979e586b8f81a9db2ef2ce58c9f7a13a4f3c31f9a0bb9997b8b81&X-Amz-SignedHeaders=host"
Run Code Online (Sandbox Code Playgroud)

Lambda 函数具有以下权限:

s3:ListBucket          Allow: arn:aws:s3:::example-bucket-name
s3:GetBucketLocation   Allow: arn:aws:s3:::example-bucket-name
s3:PutObject           Allow: arn:aws:s3:::example-bucket-name/uploads/*
Run Code Online (Sandbox Code Playgroud)

S3 Bucket …

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

5
推荐指数
2
解决办法
6931
查看次数