【发布时间】:2019-04-13 05:01:41
【问题描述】:
我想使用 S3 对象元数据和数据库中的一些角色数据(或一些远程服务)来保护 Cloudfront 响应,具体用于当前用户。我想我应该在这里使用viewer-response 事件,以便同时访问 S3 数据和用户数据。我尝试在response 对象中设置status 和statusDescription,但它不适用于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 文档没有说明它是否可能。也许还有其他解决方案?
【问题讨论】:
-
它总是返回 200 Ok 而不是 403 吗? 403 可以在云端缓存,除非您覆盖它。
标签: amazon-cloudfront aws-lambda-edge