- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将 ACCOUNT-A
上的一个存储桶中的任何对象执行跨账户备份到 ACCOUNT-B
上的备份存储桶,并且我想要这些对象在备份存储桶中使用 AES256
进行加密。但加密似乎并未应用于备份存储桶中的对象。
设置
ACCOUNT-A
有一个名为 assets.myapp.com
ACCOUNT-B
有一个名为 backup-assets.myapp.com
的目标存储桶assets.myapp.com
存储桶上的 s3.ObjectCreated:*
存储桶事件会触发 Lambda 函数,将新创建的对象复制到backup- ACCOUNT-B
下的 assets.myapp.com
存储桶。ServerSideEncryption: 'AES256'
应用到 backup-assets.myapp.com
存储桶中的对象。Lambda 函数代码
var async = require('async');
var aws = require('aws-sdk');
var s3 = new aws.S3({ apiVersion: '2006-03-01' });
exports.backupObject = function backupS3Object(event, context) {
if (event.Records === null) {
return context.fail('NOTICE:', 'No records to process.');
}
async.each(event.Records, function(record, iterate) {
var sourceBucket = record.s3.bucket.name;
var targetBucket = 'backup-' + record.s3.bucket.name;
var key = record.s3.object.key;
s3.copyObject({
Bucket : targetBucket,
CopySource : sourceBucket + '/' + key,
Key : key,
ACL : 'private',
ServerSideEncryption : 'AES256',
MetadataDirective : 'COPY',
StorageClass : 'STANDARD_IA'
}, function(error, data) {
if (error) return iterate(error);
console.log('SSE: ' + data.ServerSideEncryption);
console.log('SUCCESS: Backup of ' + sourceBucket + '/' + key);
return iterate();
});
}, function (error) {
if (error) {
return context.fail('ERROR:', 'One or more objects could not be copied.');
}
return context.done();
});
};
Cloudwatch 日志报告成功
当函数运行时,对象已成功复制,并且我的 Lambda 函数的 Cloudwatch Log 报告用作 AES256
的 ServerSideEncryption
。
但是,S3 控制台不同意
但问题是,当我检查 ACCOUNT-B 下
它报告backup-assets.myapp.com
存储桶中复制对象的 Properties > Details
时服务器端加密:无
。
知道为什么当对象到达 backup-assets.myapp.com
存储桶时,SSE
似乎没有应用于该对象吗?或者它实际上正在应用,而我刚刚在 S3 控制台
中发现了一个显示错误?
BONUS QUESTION
When I attempt to apply
SSE:AES256
to any given object manually using the console, I get the following error:The additional
properties (RRS/SSE) were not enabled or disabled due to errors for
the following objects in backup-assets.myapp.com:
copied-object-one.txt.
预先感谢您的帮助。
最佳答案
想通了。
问题出在 copyObject
方法的 ACL
参数上。
如果您想对目标存储桶中的对象使用 ServerSideEnryption: 'AES256'
,您必须提供允许 bucket-owner-完全控制
以允许您的备份存储桶应用加密。这没有在任何地方记录(我发现),但我现在已经进行了广泛的测试(不是出于选择)并确定这确实有效。因此,有效的 Lambda 函数代码如下:
var async = require('async');
var aws = require('aws-sdk');
var s3 = new aws.S3({ apiVersion: '2006-03-01' });
exports.backupObject = function backupS3Object(event, context) {
if (event.Records === null) {
return context.done('NOTICE: No records to process.');
}
async.each(event.Records, function(record, iterate) {
var sourceBucket = record.s3.bucket.name;
var targetBucket = 'backup-' + record.s3.bucket.name;
var key = record.s3.object.key;
s3.copyObject({
Bucket : targetBucket,
CopySource : sourceBucket + '/' + key,
Key : key,
ACL : 'bucket-owner-full-control',
ServerSideEncryption : 'AES256',
MetadataDirective : 'COPY',
StorageClass : 'STANDARD_IA'
}, function(error, data) {
if (error) return iterate(error);
console.log('SUCCESS: Backup of ' + sourceBucket + '/' + key);
return iterate();
});
}, function (error) {
return context.done(error);
});
};
我不确定使用上述问题的评论中讨论的 X 区域 X 帐户复制方法是否可行。执行复制时似乎没有任何方法可以声明 SSE
。
关于javascript - s3.copyObject 未将 ServerSideEncryption 应用于目标存储桶中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40199118/
我正在使用 AWS 的 s3.copyObject 将文件从源移动到目标。我怎样才能获得新目的地的完整路径。 s3.copyObject 是否有给出此结果的任何回调参数? 最佳答案 没有这样的回调可用
我正在尝试通过创建旧对象版本的副本来实现“恢复”对象。 我正在使用 AWS PHP SDK 2,方法 copyObject , 但我找不到指定源对象的 versionID 的方法。 AWS REST
我正在使用 .NET SDK 在两个 S3 存储桶之间复制对象,如下所示: var request = new CopyObjectRequest { SourceBucket = _sour
我正在尝试将 ACCOUNT-A 上的一个存储桶中的任何对象执行跨账户备份到 ACCOUNT-B 上的备份存储桶,并且我想要这些对象在备份存储桶中使用 AES256 进行加密。但加密似乎并未应用于备份
我正在尝试将文件从 A 帐户中的存储桶复制到另一个存储桶,但在 B 帐户中。当我尝试使用命令同步文件时 aws s3 sync s3://BUCKET_A s3://BUCKET_B 它返回以下输出:
putObject 工作得很好: var destBucket = 'DESTBUCKETNAME'; var params = { Body: '01110100 01100101 011
我从 nodejs 脚本上传文件,当我尝试复制对象时,我收到拒绝访问错误,如果我尝试删除或获取对象 - 没有问题,它成功了。 CopyObject 中有什么特殊的东西吗? params = {
我们使用 Amazon S3 和 JDK copyObject 方法将对象从一个存储桶复制到另一个存储桶。复印是自动进行的。 User1手动上传文件到源存储桶,systemUser传输到目标存储桶。
iOS 5+;启用 ARC;aws-ios-sdk 1.5.0 我正在尝试将文件从一个“文件夹”复制到 Amazon S3 中的“另一个”。我可以在 Amazon S3 上看到文件已成功复制,但之后我
更新我认为这可能是因为没有等待 Elastic Trnscoder 完成工作。 我有一个由 lambda 启动的 Amazon Elastic Transcoder 作业。我可以在“out”存储桶中看
Documentation AWSJavaScriptSDK 中的 S3.copyObject 方法指示以下内容: A copy request might return an error when
我是一名优秀的程序员,十分优秀!