AWS CodeBuildのArtifactsにServer Side Encryptionがつく
タイトルのとおりなのだが、この挙動を無効にすることは現状できない。
https://forums.aws.amazon.com/thread.jspa?threadID=256656
上のスレッドでAWSのスタッフがコメントしているが、あくまでも顧客からのリクエストとして受け取ると言ったきりだ。大抵こういうリクエストは数年放置される。AWSにかぎらずAzureのリクエストだって同じようなもので、たくさんのUpvoteを得ている投稿には「X年たったけどなんか進捗ある?」みたいな書き込みが連なっている。ステータスがアンダーレビューになってからが長いのだ。
ワークアラウンドとして、私はS3へartifactsがアップロードされたことをトリガーにしてオブジェクトをコピーし、SSE付きのファイルを削除するLambdaを使うことにした。APIでSSEを解除することもできないため、やや非効率であることは理解しておきたい。
const aws = require('aws-sdk');
const s3 = new aws.S3({apiVersion: '2006-03-01'});
exports.handler = (event, context, callback) => {
const copyObjectParams = {
Bucket: 'BUCKET_NAME',
CopySource: `/BUCKET_NAME/${event.Records[0].s3.object.key}`,
Key: event.Records[0].s3.object.key.replace(/artifacts/g, 'no_sse'),
ACL: 'public-read'
};
const deleteObjectParams = {
Bucket: 'BUCKET_NAME',
Key: event.Records[0].s3.object.key
}
s3.copyObject(copyObjectParams).promise()
.then(result => s3.deleteObject(deleteObjectParams).promise())
.then(result => callback(null, {success: true}))
.catch(err => {
console.log(copyObjectParams, deleteObjectParams, err);
callback({success: false});
})
};