我发现在 canned policies 的资源 URL 中使用通配符无法生效,必须使用自定义策略才能生效。此外,请确保如果您正在为 HTTPS URL 签署 cookie,则应该使用 HTTPS URL 进行测试请求(这很明显,但容易出错)。
CloudFront-Policy
cookie中,我设置了Resource(s)的不正确路径。我毫不知情,原来对于CloudFront来说知道域名甚至协议是很重要的。path_to_my_resources/*
如果您想通过他们为您生成的 CloudFront 域名访问资源,资源应该长这样:
http://somedomain.cloudfront.net/path_to_my_resources/*
或者用于HTTPS
https://somedomain.cloudfront.net/path_to_my_resources/*
最后,如果你想通过自己的域名(CNAME)访问它,那么你应该在资源属性中使用它:
https://example.com/path_to_my_resources/*
这是对我起作用的最终策略声明:
{
"Statement":[
{
"Resource":"https://example.com/path_to_my_resources/*",
"Condition":{
"IpAddress":{
"AWS:SourceIp":"127.0.0.1/32"
},
"DateLessThan":{
"AWS:EpochTime":1554469015
}
}
}
]
}
这里是一个链接,你可以阅读更多关于使用自定义策略的签名 cookie 的策略声明的信息:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html#private-content-custom-policy-statement-signed-cookies-examples