ACCOUNT-A
のあるバケットからACCOUNT-B
のバックアップバケットへの任意のオブジェクトのクロスアカウントバックアップを実行しようとしています。バックアップバケットのオブジェクトをAES256
で暗号化したいとします。しかし、暗号化はバックアップバケツに入っているオブジェクトには適用されていないようです。s3.copyObjectは、対象バケット内のオブジェクトにServerSideEncryptionを適用しませんか?
セットアップ
ACCOUNT-A
assets.myapp.com
ACCOUNT-B
と呼ばれるソースバケットがassets.myapp.com
バケツにs3.ObjectCreated:*
バケットイベントは、新たにコピーするためにラムダ関数をトリガbackup-assets.myapp.com
- と呼ばれるターゲットバケツを持っていますオブジェクトを
backup-assets.myapp.com
バケツにACCOUNT-B
の下に作成します。 backup-assets.myapp.com
バケットのオブジェクトにServerSideEncryption: 'AES256'
を適用しようとしました。機能を実行すると
ラムダ関数のコードは
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のログは、オブジェクトが正常にコピーされ、成功
を報告し、私のラムダ関数のCloudWatchのログレポートServerSideEncryption
はAES256
として使用されます。
しかし、S3コンソールは
をは不一致しかし、問題は、私はACCOUNT-B
下backup-assets.myapp.com
バケツでコピーされたオブジェクトのProperties > Details
を検査するとき、それはServer Side Encryption: None
を報告していることです。
なぜSSE
は、backup-assets.myapp.com
バケットに着陸したときにオブジェクトに適用されないようですか?または、実際に適用されていますが、私はちょうどS3 Console
のディスプレイのバグを発見しましたか?
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.
ご協力いただきありがとうございます。
この場合、すべてのオブジェクトがコピーされますか?オブジェクトの大きさはどれくらいですか? [この古いフォーラムの投稿](https://forums.aws.amazon.com/thread.jspa?threadID=93744)では、5GBを超える問題が発生する可能性があることが示唆されています。あなたは自動的に(バージョン管理が必要です)コピーを行うために[クロスリージョンレプリケーション](https://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html)の使用を検討しましたか? –
ちょっとジョン、オブジェクトの範囲は20kから1Gbです。クロスリージョンレプリケーションは私のタスク目標を満たしておらず、x-accountである必要があります。どちらのバケットもバージョン管理が有効になっています。私はそれがS3コンソールが与えられたオブジェクトの暗号化された状態をどのように提示するかに関する問題であることを90%確信しています。私はいくつかのテストを行いました。同じ問題が表示されています。バージョン管理なしにスタンドアロンバケットにオブジェクトをアップロードし、コンソールを使用して暗号化する場合もあります。これはバグか、まだ別のAWSの機能(バグ)で、どちらがまだ分かっていないかのいずれかです。 – AJB
**異なるアカウント**に属するバケットの間でクロスリージョンレプリケーション*を行うことができます(正しいセキュリティ設定が必要です)。もう1つの選択肢は、[AWS Command-Line Interface(CLI)](http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html)の 'aws s3 sync'コマンドを使用することです。定期的なスケジュール(例えば、5分ごと)で。これは、CloudWatch Eventsを介してスケジュールされたLambdaタスクや、どこかのcronジョブから実行できます。 –