Я хочу защитить ответ Cloudfront, используя метаданные объекта S3 и некоторые данные роли в БД (или некотором удаленном сервисе), указанные для текущего пользователя. Я думаю, что я должен использовать событие viewer-response
здесь, чтобы иметь доступ к данным S3 и пользовательским данным вместе. Я пытаюсь установить status
и statusDescription
в response
объекте, но он не работает для события viewer-response
, работает для всех других событий. Настройка заголовков все еще работает.
exports.handler = async (event) => {
const response = event.Records[0].cf.response;
const request = event.Records[0].cf.request;
const isUserAllowed = await allowedByTokenAndDb(request);
const isS3ObjectAllowed = response.headers['x-amz-meta-isSecure'][0].value === 'true';
if (!isUserAllowed || !isS3ObjectAllowed) {
response.status = '403'; // does not work
response.statusDescription = 'Nothing';
}
response.headers['X-Powered-By'] = [{ // works, header will be added
key: 'X-Powered-By',
value: 'lol',
}]
return response;
}
Есть ли способ заставить viewer-response
вернуть другой статус? Документация AWS не говорит, что это возможно или нет. Может быть, есть другое решение?