首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过S3更新boto3对象元数据时的签名错误

通过S3更新boto3对象元数据时的签名错误
EN

Stack Overflow用户
提问于 2020-11-24 20:35:28
回答 2查看 202关注 0票数 1

我有一个lambda函数,它从S3事件中获取S3对象并使用自定义元数据更新它。

下面是boto3脚本:

代码语言:javascript
运行
AI代码解释
复制
import json
import boto3

s3 = boto3.resource('s3')

def lambda_handler(event, context):
    key = event['Records'][0]['s3']['object']['key']
    key_name = key.split('/')
    bucket = event['Records'][0]['s3']['bucket']['name']
    print(key)
    print(bucket)
    s3_object = s3.Object(bucket, key)
    s3_object.metadata.update({'Cache-Control':'no-cache'})
    s3_object.copy_from(CopySource={'Bucket':bucket, 'Key':key}, Metadata=s3_object.metadata, MetadataDirective='REPLACE')

当我运行这个脚本时,它会给出以下错误:

调用CopyObject操作时发生错误(SignatureDoesNotMatch):我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法.:ClientError

(注:我已对lambda函数角色给予了足够的许可)

我需要在这里签名吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-24 23:47:32

对象的键中可能含有一些奇怪的字符。

下面是一些对我有用的稍微修改过的代码:

代码语言:javascript
运行
AI代码解释
复制
import boto3
import urllib

s3 = boto3.resource('s3')

def lambda_handler(event, context):

    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'])

    s3_object = s3.Object(bucket, key)
    s3_object.metadata.update({'Cache-Control':'no-cache'})
    s3_object.copy_from(CopySource={'Bucket':bucket, 'Key':key}, Metadata=s3_object.metadata, MetadataDirective='REPLACE')
票数 1
EN

Stack Overflow用户

发布于 2022-05-20 12:31:25

约翰·罗滕斯坦的答案行得通,但只有一次。运行相同的脚本两次会复制错误操作。

我相信这与原因有关:

用户定义的元数据是一组键值对.亚马逊S3以小写形式存储用户定义的元数据键。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html

注意,虽然Amazon将键存储为小写,但OP使用的是大写。将“缓存控制”更改为小写的“缓存控制”将允许您更新“缓存控制”已经是元数据条目的对象上的元数据。

我已经测试了区分大小写的问题,并且能够在不使用键大写的情况下工作,并在密钥大写重新引入时重现问题。

在客户端和AWS的API后端上如何计算签名似乎存在差异。大写问题仅在元数据项在对象上预先存在时才表示出来。这可能需要使用AWS引发有关boto3库的票证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64998595

复制
相关文章
S3 简单使用
S3 全名是 Simple Storage Service,简便的存储服务。amazon (S3) 是一个公开的服务,Web 应用程序开发人员可以使用它存储数字资产,包括图片、视频、音乐和文档。S3 提供一个 RESTful API 以编程方式实现与该服务的交互。可以通过 Amazon S3 随时在 Web 上的任何位置存储和检索的任意大小的数据。
用户4945346
2023/01/11
2.9K0
S3对象存储获取预签名URL | Golang
最近学习使用对象存储,自然要学习一下 Amazon S3,同时最近学了一下Golang,简单记录一下学习使用 AWS SDK for Go V2 生成文件预签名URL,
ZGGSONG
2022/07/21
3.2K0
S3对象存储获取预签名URL | Golang
最近学习使用对象存储,自然要学习一下 Amazon S3,同时最近学了一下Golang,简单记录一下学习使用 AWS SDK for Go V2 生成文件预签名URL,
ZGGSONG
2022/09/09
2.4K1
奇葩的 Git 签名错误
原因是公司电脑使用了一个安全工具,这个安全工具进行自签名,把访问外部网络的证书都自签名了,但是有些 CA 又不被这个自签名工具来信任。
HoneyMoose
2023/05/12
3470
奇葩的 Git 签名错误
奇葩的 Git 签名错误
原因是公司电脑使用了一个安全工具,这个安全工具进行自签名,把访问外部网络的证书都自签名了,但是有些 CA 又不被这个自签名工具来信任。
HoneyMoose
2023/05/23
2910
奇葩的 Git 签名错误
借助Amazon S3实现异步操作状态轮询的Serverless解决方法
本文提出了一个将轮询重定向到 Amazon Simple Storage Service(S3)的解决方案,S3 是一个由公有云提供商 Amazon Web Services(AWS)管理的高可用、可扩展和安全的对象存储服务。我们将会展现一个使用 AWS Lambda 函数的 serverless 实现,但是如果你想使用 S3 的话,并不强制要使用 AWS Lambda 函数。
深度学习与Python
2021/12/09
3.4K0
借助Amazon S3实现异步操作状态轮询的Serverless解决方法
Gradle 对包进行签名的时候提示错误 00B5050F
可以反问源代码:https://github.com/gradle/gradle/blob/124712713a77a6813e112ae1b68f248deca6a816/subprojects/security/src/main/java/org/gradle/plugins/signing/signatory/pgp/PgpKeyId.java
HoneyMoose
2020/12/26
5440
Gradle 对包进行签名的时候提示错误 00B5050F
【Google Play】Google Play 签名维护 ( 签名机制 | Google Play 签名机制选择 | 签名更新 )
【Google Play】创建 Google 开发者账号 ( 注册邮箱账号 | 创建开发者账号 ) 【Google Play】创建并设置应用 ( 访问权限 | 内容分级 | 受众群体 | 类别及联系方式 | 商品详情 )
韩曙亮
2023/03/29
10.1K0
【Google Play】Google Play 签名维护 ( 签名机制 | Google Play 签名机制选择 | 签名更新 )
AWS S3 使用 travis 编译的时候提示错误 Aws::S3::Errors::PermanentRedirect
这是因为在我们的配置文件下 travis 将会把数据存储到 S3 的 us-east-2 存储区。
HoneyMoose
2020/12/22
6240
AWS S3 使用 travis 编译的时候提示错误 Aws::S3::Errors::PermanentRedirect
鉴权方法签名错误
使用https://cloud.tencent.com/document/api/213/15693
用户3228870
2019/12/09
3.4K0
NHibernate 多对多映射的数据更新
最近在用 NHibernate 做多对多更新时突然发现 NHibernate 更新的策略很差, 对多对多关系的更新居然是先全部删除再插入全部数据, 感觉非常奇怪, 现在还原如下:
beginor
2020/08/10
9660
NHibernate 多对多映射的数据更新
debian系linux更新时,提示“由于没有公钥,无法验证下列签名”
此时继续使用sudo apt-get update更新,发现没有公钥错误提示了,但还存在校验问题。
双面人
2020/02/17
6.5K0
通过OpenCVS实现对CSV数据的封装
一般CSV文件都作为系统基础数据提供者的角色被频繁使用者。如果在进行自动化测试时,测试用例中的数据非常依赖于SUT中的上下文基础数据,而这些基础数据又是通过CSV文件导入到SUT之中。那么,考虑将这些CSV文件中遴选出部分必须的,导入到测试框架中,作为测试框架的基础数据存在并供下游用例使用。据此,则可简单实现所谓的单一数据源(Single Source Of Truth),即使后期CSV文件中的变化了,SUT/测试用例也可以照常执行,提高了通用性,降低了维护成本。
Antony
2020/12/02
9810
使用代码签名证书对EXE文件进行签名?
如果您想知道如何培养用户对您的应用程序或可执行文件的信任,对应用程序或可执行文件 (exe) 进行数字签名是确保这一点的最佳方法。
Gworg
2023/10/18
1.7K0
Visual Studio对程序集签名时一个很不好用的地方
由于我们的项目底层使用到一个通过LogicalCallContext实现的上下文数据管理框架,导致所有的Unit Test不能正常运行。具体的现象在《只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题》有过详细的介绍。解决的方案就是对相关的程序集进行强签名,并加到GAC中,是Unit Test能够识别基于LogicalCallContext项目的类型。有了Visual Studio这个强大的IDE,程序集的签名工作很好实现——仅仅需要在Project的Prope
蒋金楠
2018/01/16
7050
Visual Studio对程序集签名时一个很不好用的地方
Linq to Sql 更新数据时容易忽略的问题
越来越多的朋友喜欢用Linq to Sql来进行开发项目了,一般我们都会遇到CRUD等操作,不可否认,在查询方面Linq真的带来很大的便利,性能方面也表现不错,在插入操作和删除操作中,Linq的表现也还不错,但是在更新某条记录的时候,性能就相对比较弱了,我们一般会使用ExecuteSql等方法来执行脚本。 不过有时候,我们还是会使用Linq to Sql来进行Update,执行的步骤:获取一个记录-〉更新字段 -〉submitChanges() 昨天遇到了一个问题,流程都没有错,但是更新的时候始终没有更新到
脑洞的蜂蜜
2018/02/01
1.3K0
Python 下载的 11 种姿势,一种比一种高级!
今天我们一起学习如何使用不同的Python模块从web下载文件。此外,你将下载常规文件、web页面、Amazon S3和其他资源。
周萝卜
2022/09/28
1.6K0
Python 下载的 11 种姿势,一种比一种高级!
Python 下载的 11 种姿势,一种比一种高级!
在本教程中,你将学习如何使用不同的Python模块从web下载文件。此外,你将下载常规文件、web页面、Amazon S3和其他资源。
用户8949263
2022/04/08
1.4K0
Python 下载的 11 种姿势,一种比一种高级!
Kali更新源签名无效问题[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140370.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/02
2.8K0
点击加载更多

相似问题

通过星火查询亚马逊S3对象元数据

11

s3对象元数据lambda函数

11

R:写入s3对象元数据

11

写入EMRFS时火花集S3对象元数据

10

如何在图像上传PUT请求签名的url期间设置/更新AWS s3对象元数据?

137
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文