我们已使用CloudFront存储图像网址,并使用已签名的Cookie仅通过我们的应用程序提供访问权限。没有签名的cookie,我们可以访问内容,但在启用签名的cookie后,我们将获得HTTP 403。
以下是我们发送的配置/ cookies:
Cookie随请求发送:
CloudFront-Expires: 1522454400
CloudFront-Key-Pair-Id: xyz...
CloudFront-Policy: abcde...
CloudFront-Signature: abce...
以下是我们的CloudFront政策:
{
"Statement": [
{
"Resource":"https://*.abc.com/*",
"Condition":{
"DateLessThan":{"AWS:EpochTime":1522454400}
}
}
]
}
Cookie域为.abc.com
,资源路径为https://*.abc.com/*
。
我们正在使用CannedPolicy
创建CloudFront
个Cookie。
为什么这不按预期工作?
答案 0 :(得分:0)
再次查看文档
只有3个Cookie,预制政策的最后一个为#include <iostream>
#include <vector>
template<class T> class Foo
{
public:
T getVar(T var)
{
return var;
}
};
int main()
{
template<class T>
std::vector<Foo<T>> foos;
Foo<int> foo1;
Foo<double> foo2;
foos.push_back(foo1); // doesn't work this way
foos.push_back(foo2);
return 0;
}
,自定义政策为CloudFront-Expires
。< / p>
我们正在使用CannedPolicy
预制策略的隐式资源为CloudFront-Policy
,因此预设的策略语句不能具有明确的*
,因此您实际上正在使用自定义策略。如果其他所有内容都已正确实施,那么您的解决方案可能只是删除Resource
Cookie,该Cookie不会与自定义策略一起使用。
“罐装”(瓶装,装箱,预包装)政策用于政策中唯一唯一信息到期的情况。它们的优点是它们需要的带宽略微减少(并且在创建签名URL时会缩短URL)。它们的缺点在于它们是通用设计的通配符,并不总是你想要的。
答案 1 :(得分:0)
我有解决方案。我们的要求是通配符访问。 where resource path = https+ "distribution name" + /*
activeFrom = it is optional so pass it as null
pk = private key ( few api also take file but it didn't work, so get the private key from file and use above function)
{{1}}
我们要访问分发中的所有内容,预设策略不允许使用通配符。因此,我们将其更改为自定义政策并且有效。
答案 2 :(得分:0)
虽然 403 可能有多种原因 - AccessDenied 作为响应。在我们的案例中,经过调试后,我们了解到在使用签名 cookie 时 - CloudFront-Key-Pair-Id cookie 对于每个请求都保持不变,而 CloudFront-Policy 和 >CloudFront-Signature cookie 更改每个请求的值,否则将发生 403 访问被拒绝。