标签: pre-signed-url

“aws_security_token”的用途是什么

我想将预签名 URL 与 AWS S3 结合使用。我注意到预签名 URL 包含aws_access_key_idaws_security_token.

根据我的理解,它aws_security_token是 URL 的一部分,因为我使用的是临时安全凭证,并且它是正确签署 URL 所必需的。

但是,给前端客户端提供 URL 来下载图像是否可以?是aws_security_tokenURL 的一部分(未加密)。我担心安全性,并且无法弄清楚令牌的用途是什么。以及攻击者可以用 myaws_access_key_idaws_security_token.

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

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

带有签名网址的 Google 存储

mutlipart/formdata ---boundaryString 如何使用谷歌存储的签名网址上传内容类型的文件?

我面临的问题是,当我们使用浏览器上传文件时,浏览器将内容类型放置在内容类型标头值的动态部分mutlipart/formdata ---boundaryString 中。boundaryString

现在,由于谷歌签名方法要求内容类型成为签名的一部分。生成签名 URL 变得不可能。

google-cloud-storage pre-signed-url

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

使用适用于 Java 的 AWS 开发工具包生成预签名 URL

我按照https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURLJavaSDK.html中的示例创建预签名 s3 url (v4),当我尝试访问已签名的 s3 url (v4) 时,出现“访问被拒绝”错误网址

<Error>
   <Code>AccessDenied</Code>
   <Message>Access Denied</Message>
   <RequestId>0FB02ECDDF5EAC7B</RequestId>
   <HostId>vA+mmsv9PCunNe5uPkPrmpqqN3vFctQ13c9dIRlKWTYsT0zNA1V9g+4YS+lCItrBlyQtdHpyspg=</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)

以下是代码片段

public class GeneratePresignedURL {

    public static void main(String[] args) throws IOException {
        String clientRegion = "us-east-1";
        String bucketName = "com-example-bucket";
        String objectKey = "path/to/file.img"; // No leading `/`
        // https://com-example-bucket.s3.amazonaws.com/path/to/file.img

        try { 
            AWSCredentialsProvider awsCredentialsProvider = new DefaultAWSCredentialsProviderChain();

            // Assuming that us-east-1 defaults to v4, couldn't find a way to set it explicitly
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withRegion(clientRegion)
                    .withCredentials(awsCredentialsProvider)
                    .build();

            // Set …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services pre-signed-url aws-sdk aws-java-sdk

2
推荐指数
1
解决办法
2万
查看次数

签名可写 URL 错误:我们计算的请求签名与您提供的签名不匹配

我正在将一个虚拟文件上传到 Google Cloud Storage,然后在将它传递给另一个单独托管的服务之前签署一个读/写 URL。不幸的是,我收到了 403 响应,其中包含以下消息:

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

我用来创建虚拟对象并签署 URL 的代码:

const string BASE64_JSON_CREDS = "UklQIFN0YW4gTGVl"; // credentials of service account with "Storage Admin" role (entire json file as received from Google's Console)
const string BUCKET = "testbucket";
const string FILENAME = "test.jpg";
byte[] imageBytes = File.ReadAllBytes(@"test.jpg");

GoogleCredential credentials = null;
using (var stream = new MemoryStream(Convert.FromBase64String(BASE64_JSON_CREDS)))
{
    credentials = GoogleCredential.FromStream(stream);
}

StorageClient storageClient = StorageClient.Create(credentials);
var bucket = await storageClient.GetBucketAsync(BUCKET);
await storageClient.UploadObjectAsync(bucket.Name, FILENAME, null, new MemoryStream());

var …
Run Code Online (Sandbox Code Playgroud)

c# google-cloud-storage pre-signed-url google-cloud-platform

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

AWS - 元数据设置为小写

所以我有一个问题,每当我尝试使用预签名 URL 将文件发布到 s3 存储桶时,元数据的密钥将被强制为小写?

我查看了预签名 URL,当 URL 生成时它已经设置了小写部分,我想知道为什么?我该如何解决这个问题?

我尝试在文件的 s3 存储桶中创建手动键值对,显然我也可以在其中设置大写字母的键?

   const params = {
        Bucket: 'buckets3',
        Key: 'hoho-fileUpload-' + uuid.v4(),
        Metadata: {"FooBar": "FooBar"},
        Expires: 600
    };
Run Code Online (Sandbox Code Playgroud)

s3 中的电流输出:

x-amz-meta-foobar: FooBar

许愿输出:

x-amz-meta-FooBar:FooBar

metadata amazon-s3 amazon-web-services pre-signed-url aws-sdk

2
推荐指数
1
解决办法
1359
查看次数

python AWS boto3为文件上传创建预先签名的url

我正在为客户端将视频文件上传到 s3 的应用程序编写 django 后端。我想使用预先签名的 url,因此 django 服务器将对 url 进行签名并将其传递回客户端,然后客户端将他们的视频上传到 s3。问题是, generate_presigned_url 方法似乎不知道 s3 客户端 upload_file 方法......

按照这个例子,我使用下面的代码来生成上传的 url:

s3_client = boto3.client('s3')
try:
    s3_object_name = str(uuid4()) + file_extension
    params = {
        "file_name": local_filename,
        "bucket": settings.VIDEO_UPLOAD_BUCKET_NAME,
        "object_name": s3_object_name,
    }
    response = s3_client.generate_presigned_url(ClientMethod="upload_file",
                                                Params=params,
                                                ExpiresIn=500)
except ClientError as e:
    logging.error(e)
    return HttpResponse(503, reason="Could not retrieve upload url.")
Run Code Online (Sandbox Code Playgroud)

运行它时,我收到错误:

文件“/Users/bridgedudley/.local/share/virtualenvs/ShoMe/lib/python3.6/site-packages/botocore/signers.py”,第 574 行,在 generate_presigned_url operation_name = self._PY_TO_OP_NAME[client_method] KeyError: 'upload_file '

触发异常:

botocore.exceptions.UnknownClientMethodError:客户端没有方法:upload_file

调试后,我发现 self._PY_TO_OP_NAME 字典仅包含此处提供的 s3 客户端命令的一个子集: 在此处输入图片说明

向下滚动到“上传”... 在此处输入图片说明

没有upload_file 方法!我使用“list_buckets”尝试了相同的代码,它工作得很好,给了我一个预先签名的 …

python file-upload amazon-s3 pre-signed-url boto3

2
推荐指数
1
解决办法
5571
查看次数

如何将 API Gateway 的 AWS 签名 v4 预签名链接中的过期时间从默认 5 分钟增加?

我正在尝试生成指向 API 网关(使用 IAM 身份验证)的预签名链接,因此客户端可以访问我在此 API 网关后面的 Lambda 函数之一,而无需对请求进行身份验证。这主要是为了方便客户端,因此它可能会透明地使用响应中的一些链接,无论它们指向同一个经过身份验证的 API 网关、某个 S3 存储桶还是 Internet 中的任意 URL。

为此,我使用查询参数制作 API 签名 v4(请参阅文档示例

因此,如果我尝试签署以下针对us-west-2区域和execute-api服务范围的链接:

https://example.com/some/path?some=params
Run Code Online (Sandbox Code Playgroud)

我将得到以下结果(使用 Node.jsaws4,但在这里无关紧要):

https://example.com/some/path?some=params&
X-Amz-Security-Token=<Session Token Removed>
X-Amz-Date=20210330T180303Z&
X-Amz-Algorithm=AWS4-HMAC-SHA256&
X-Amz-Credential=<Access Key Removed>%2F20210330%2Fus-west-2%2Fexecute-api%2Faws4_request&
X-Amz-SignedHeaders=host&
X-Amz-Signature=884f132ad6f0c7a850e6b1d22b5fed169c13e2189b6e0d0d568d11f967f4a8bd
Run Code Online (Sandbox Code Playgroud)

它有效!但只有在一代后的前 5 分钟......

五分钟过去后,我将收到以下错误响应:

https://example.com/some/path?some=params
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅对此问题的回复

我尝试X-Amz-Expires使用各种值(小于和大于 300 秒)添加文档中提到的查询参数,但没有运气:行为不会改变。

对于由 IAM 实例凭证生成的链接,我至少需要几个小时,最多需要6 个小时,因为链接正在由另一个 Lambda 函数签名。

有没有办法增加 API Gateway 访问的预签名链接有效期?

amazon-web-services pre-signed-url aws-api-gateway sigv4

2
推荐指数
1
解决办法
448
查看次数

使用 Amazon S3 SignedURL 从浏览器客户端 PUT 文件是否安全?

我的后端是一个 nodejs 应用程序,我希望用户将图像上传到 Amazon S3 存储桶。

从我的服务器运行:

const s3 = new AWS.S3({
  params: {
    Bucket: bucket
  }
});

app.get('/api/images/signed-url', authMiddleware, (req, res) => {
  s3.getSignedUrl('putObject', 
    { ContentType: 'image/jpeg', Key: uuid() + '.jpeg' }, 
    (_err, url) => res.send({ signedUrl })
})
Run Code Online (Sandbox Code Playgroud)

然后从我的浏览器客户端上传到该端点

该网址如下所示:

https://my-s3-bucket.s3.ap-southeast-2.amazonaws.com/0050db00-c64c-419a-83c2-e8615120f458.jpeg?AWSAccessKeyId=MY_ACCESS_KEY&Content-Type=image%2Fjpeg&Expires=1625365030&Signature=1ebnshTgeMKoLMAH%2Bi2FLletsAU%3D
Run Code Online (Sandbox Code Playgroud)

鉴于此 URL 包含 my MY_ACCESS_KEY_ID,与客户共享是否安全?我不分享我的秘密(显然),但它是等式的一半。

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

2
推荐指数
1
解决办法
48
查看次数

生成预签名 URL 以上传到 S3 存储桶

我正在尝试为 AWS 上的 S3 存储桶生成一个预先签名的 URL 以上传文件,如下所示:

$ aws s3 presign s3://mybucket/somefolder/
Run Code Online (Sandbox Code Playgroud)

然后我使用该 URL 上传文件:

$ curl "https://mybucket.s3.amazonaws.com/somefolder/?AWSAccessKeyId=***&Signature=***&Expires=***"  --upload-file "./file"
Run Code Online (Sandbox Code Playgroud)

但随后它会打印出一个 XML 错误:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>SignatureDoesNotMatch</Code>
  <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
  <AWSAccessKeyId>***********</AWSAccessKeyId>
  <StringToSign>PUT


    ************
    /mybucket/somefolder/</StringToSign>
  <SignatureProvided>**************</SignatureProvided>
  <StringToSignBytes>**************</StringToSignBytes>
  <RequestId>************</RequestId>
  <HostId>************</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

[更新]

好的,所以我必须在预签名 URL 中指定对象名称。所以我做了,但我仍然面临同样的错误信息:

$ aws s3 presign s3://mybucket/someobject
Run Code Online (Sandbox Code Playgroud)

进而:

$ curl "https://mybucket.s3.amazonaws.com/someobject?AWSAccessKeyId=***&Signature=***&Expires=***"  --upload-file "./file"
Run Code Online (Sandbox Code Playgroud)

我会得到与以前完全相同的错误。为了确保这不是权限问题,我像这样测试了它:

$ aws s3 cp ./file s://mybucket/
Run Code Online (Sandbox Code Playgroud)

并且文件被复制了!有什么建议?

[更新] …

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

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

使用预签名 URL 上传到 S3 时显示进度条

我正在尝试使用预先签名的 URL 在我的 s3 存储桶中上传一个文件,它运行良好并将数据成功上传到存储桶,但是,我上传的文件非常大,我需要能够显示进度条。我在 StackOverflow 和其他博客文章上尝试了许多可用的解决方案,但似乎没有任何帮助。

以下是使用预签名 URL 将数据上传到 s3 的代码片段。

object_name = 'DataSet.csv'
response = create_presigned_post("mybucket_name",object_name)

fields = response['fields']
with open(object_name, 'rb') as f:
    files = {'file': (object_name, f)}
    http_response = requests.post(response['url'], data=fields, files=files,stream=True)

print (http_response.status_code)
Run Code Online (Sandbox Code Playgroud)

它返回用于成功上传的204状态。

现在,我可以对此代码进行哪些更改以显示进度条。

PS 我尝试stream=True过请求不起作用。我曾尝试使用tqdm迭代响应,但在这种情况下也不起作用

python upload amazon-s3 pre-signed-url aws-cli

1
推荐指数
2
解决办法
1790
查看次数