标签: pre-signed-url

从我的节点服务器上的AWS S3提取签名的URL

解决了:

我想从我的Amazon S3服务器上获得一个签名的URL。我是AWS的新手。我在哪里设置我的密钥access_id_key,以便S3识别来自服务器的请求。

var express=require('express');
var app=express();


var AWS = require('aws-sdk')
, s3 = new AWS.S3()
, params = {Bucket: 'my-bucket', Key: 'path/to/key', Expiration: 20}

s3.getSignedUrl('getObject', params, function (err, url) {
console.log('Signed URL: ' + url)
})

app.listen(8000)
Run Code Online (Sandbox Code Playgroud)

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

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

使用从服务器端应用程序生成的签名 URL 将文件(视频文件)从 android 上传到 S3 服务器

我正在尝试使用从服务器端(用 python 编码)应用程序生成的签名 URL 将视频文件从 android 应用程序上传到 S3 服务器中的存储桶。我们正在向签名的 URL 发出 PUT 请求,但我们得到了

connection reset by peer exception.

但是当我在 POSTMAN REST CLIENT 上尝试相同的 URL 时,会收到一条成功消息。任何帮助将不胜感激。

android file-upload amazon-s3 pre-signed-url

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

HTTP授权标头和查询字符串参数之间的区别

在阅读有关与的交互时Amazon S3,我知道与的请求身份验证通过Amazon AWS两种方式完成

  1. HTTP授权:使用HTTP授权标头是提供身份验证信息的最常用方法
  2. 查询字符串参数:当您要在URL中完全表示请求时,使用查询参数来验证请求很有用。此方法也称为对URL进行预签名。

问题是,在哪种情况下我应该更喜欢一种方法。这两种身份验证方法是否各有优缺点?作为开发人员,通过使用query string parameters方法,我可以对URL进行预签名,从而使最终用户可以Amazon S3通过在Web浏览器中输入预签名的URL 来临时访问资源。我可以使用HTTP Authorization方法来实现相同的目的吗?如果是这样,哪种方法更好用?它们各自的局限性是什么?

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

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

S3预签名帖子需要特定的内容类型

首先,我使用的是ruby的aws-sdk,但是我面对的似乎是对S3的预贴帖子的误解。


我想要做的是确保通过我的预贴帖子上传到S3的所有内容都是视频。

我尝试做的是content_type_starts_with: "video/"在presigned_post哈希中设置。这会导致所有上载被拒绝Policy Condition failed: ["starts-with", "$Content-Type", "video/"]

然后content_type: "video/mp4",我尝试了,但是这导致s3允许任何文件上传,然后仅Content-Type: "video/mp4"在元数据中对其进行标记。

然后我注意到,当我上传没有Content-Type约束的文件时,S3会将文件标记为binary/octet-stream。因此,我再次尝试了第一种方法,但是这次使用content_type_starts_with: "binary/"。结果与之前相同Policy Condition Failed

我应该如何使用Content-Type字段?它似乎从未做过我想要做的事情。


这是我正在使用的代码的片段:

# In the controller

client = Aws::S3::Client.new(region: 'us-east-1')
resource = Aws::S3::Resource.new(client: client)
bucket = resource.bucket("my-bucket")

object_id = SecureRandom.uuid
object = bucket.object(object_id)

@presigned_post = object.presigned_post({
  acl: "private",
  content_length_range: 0..104857600, # 100 MB
  content_type_starts_with: "video/",
})

# In the presigned post erb

<form action="<%= presigned_post.url %>" method="post" enctype="multipart/form-data">
<% presigned_post.fields.each …
Run Code Online (Sandbox Code Playgroud)

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

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

为Amazon S3生成具有最大内容长度的预签名PUT URL

我正在尝试生成客户端可以用来将图像上传到特定S3存储桶的预签名URL。我已经成功生成了对GET文件的请求,如下所示:

GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucket, filename);
urlRequest.setMethod(method);
urlRequest.setExpiration(expiration);
Run Code Online (Sandbox Code Playgroud)

其中expiration和method分别是Date和HttpMethod对象。

现在,我试图创建一个URL,以允许用户放置文件,但是我不知道如何设置最大内容长度。我确实找到了有关POST政策的信息,但是我更喜欢在这里使用PUT-我也想避免构造JSON,尽管这似乎不太可能。

最后,一个替代的答案可能是将图像上传从API网关传递到Lambda的某种方法,因此我可以在验证文件类型和大小后将其从Lambda上传到S3(这不理想)。

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

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

通过签名URL确定存储桶对象的可用性

我们的下载托管在Google云端存储上.有一段时间了,我们一直在按需创建一个已签名的URL(当用户点击下载按钮时),然后将用户重定向到该URL.

这段代码已经生产了几个月,但最近我们发现存在竞争条件:有时URL还没有准备好.在此之前,尝试访问签名的URL会导致a 403: Forbidden.

我们尝试通过发送HEAD请求来查询URL是否准备就绪,以寻找200响应,从而缓解此问题.这似乎是一个很好的解决方案,直到我们意识到偶尔存在第三个状态:URL已创建,但尚未准备好.我们的HEAD收到了200 Success以下XML文档的回复:

<Error>
     <Code>SignatureDoesNotMatch</Code>
     <Message>
          The request signature we calculated does not match the signature
          you provided. Check your Google secret key and signing method.
     </Message>
     <StringToSign>
          GET 1469137341 /our-bucket-name/path/to/file.exe?
             response-content-disposition%3dattachment%3b+filename%3dfile.exe
     </StringToSign>
</Error>
Run Code Online (Sandbox Code Playgroud)

几秒钟后,URL就可以使用了.创建签名URL的文档没有讨论它没有立即准备好的可能性.

我的问题:您如何确定新创建的签名URL何时可以使用?

编辑

我们实际上已经使用了URL生成代码(并且它一直运行良好)已有好几个月了.仅在最近两周内我们才注意到我们使用了回退机制(即URL尚未就绪).这几乎就像谷歌在上个月改变了代码,这导致了URL准备就绪时的延迟.到目前为止,竞争条件甚至不明显.

google-cloud-storage pre-signed-url

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

Binance API密钥

我在Binance上设置了一个只读API密钥,以访问帐户信息(例如货币余额),但看不到JSON数据。我输入URL的字符串查询返回以下错误:

{“代码”:-2014,“ msg”:“ API密钥格式无效。”}

我使用的网址是这样的: https://api.binance.com/api/v3/account?X-MBX-APIKEY=**key**&signature=**s-key**

可以在以下位置找到Binance API的文档:https ://www.binance.com/restapipub.html 。我究竟做错了什么 ?

authentication api url httprequest pre-signed-url

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

带有预签名URL和CORS的S3上传

我使用预先签名的URL将文件从我的应用程序上传到S3,存储桶本身是私有的,并且仅对所有域启用了CORS(对于开发环境)。

但是,当axios帖子尝试上载文件时,我看到没有“ Access-Control-Allow-Origin”标头错误。飞行前选项请求引发此错误。

我正在从本地计算机上尝试此操作。

这是我的CORS配置。我没有为运气尝试过AllowedOrigin的通配符'*'。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>http://localhost:3000</AllowedOrigin>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <MaxAgeSeconds>300000</MaxAgeSeconds>
    <AllowedHeader>authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)

感谢任何帮助。

amazon-s3 reactjs pre-signed-url axios

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

可恢复上传到 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 返回 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
查看次数