gpt4 book ai didi

javascript - s3.copyObject 未将 ServerSideEncryption 应用于目标存储桶中的对象?

转载 作者:太空宇宙 更新时间:2023-11-04 16:26:10 26 4
gpt4 key购买 nike

我正在尝试将 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 报告用作 AES256ServerSideEncryption

但是,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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com