具有受限访问的 AWS Cloudfront 缺少密钥和无效密钥 403 错误

具有受限访问的 AWS Cloudfront 缺少密钥和无效密钥 403 错误

我正在开发一个 PoC,用于限制对 Web 应用程序中某些文件的访问。基本上,一个用户应该有权访问 S3 中的所有文件,而另一个用户只能访问公共文件(未登录的用户也可以访问)。

我设置了一个带有一个private-files文件夹和一个public-files文件夹的 S3 存储桶,并设置了一个存储桶策略,以将对公共文件的访问限制到一个 cloudfront arn,将对私有文件的访问限制到另一个 cloudfront arn。在任一 cloudfront 发行版上均未启用文件限制的情况下进行测试,结果表明它按预期运行。

然后,我通过私有云端分发限制对文件的访问,将签名者限制为“自己”,并根据我的安全凭证生成云端密钥对。

我在用着这个脚本基本上是开箱即用的,只需进行少量修改(例如间距和删除一些转换)即可使解释器正常工作。它可以毫无问题地生成 cookie。

当我尝试通过 cloudfront url 访问私人文件时,收到以下消息:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
    <Code>MissingKey</Code>
    <Message>Missing Key-Pair-Id query parameter or cookie value</Message>
</Error>

Postman 说它带有 403 禁止状态。当我将 CloudFront-Signature、CloudFront-Key-Pair-Id、CloudFront-Policy 添加到 Postman 中的 cookie 中时,我得到了

<?xml version="1.0" encoding="UTF-8"?>
<Error>
    <Code>InvalidKey</Code>
    <Message>Unknown Key</Message>
</Error>

再次出现 403。CloudFront-Key-Pair-Id 似乎是导致这种情况发生的 cookie,因为其他两个仅返回缺少的密钥,而这个本身返回了无效的密钥消息。

除了这些 cookie 之外,我还需要发送什么吗?根据我上面描述的设置,这些是预期的错误消息吗?还是我缺少一些需要发送的数据?或者可能是其他问题?

答案1

缺少密钥和无效密钥指的是 AWS CloudFront 密钥对 ID,而不是 S3 对象密钥。如果您不发送该值,您将收到缺少密钥的响应。如果您发送该值并且它是错误的,您将收到无效密钥。

登录您的 aws 账户,单击右上角的账户名,然后选择我的安全凭证。展开 cloudfront 访问密钥部分并从那里复制密钥对 ID。

答案2

我能够通过以下步骤解决该问题:

  1. 转到 cloudfront 发行版
  2. 点击“行为”选项卡
  3. 选中复选框并单击“编辑”
  4. 在“受信任密钥组”或“受信任签名者”单选按钮中选择“受信任签名者”
  5. 点击“保存”

https://www.lazydeveloper.tech/aws/aws-cloudfront-invalidkey-unknown-key-when-using-signed-urls/

相关内容