5 amazon-s3 amazon-web-services pre-signed-url boto3
我有一个存储桶,我想向中的my-bucket-name某些存储桶授予临时访问权限。至于默认情况下,我使用 boto3 获取下一个链接:file.pdffolder-name
https://my-bucket-name.s3.amazonaws.com/folder-name/file.pdf?AWSAccessKeyId=<key>&Signature=<signature>&x-amz-security-token=<toke>&Expires=<time>
Run Code Online (Sandbox Code Playgroud)
而且我还有一个 DNS 别名,my.address.com映射到my-bucket-name.s3.amazonaws.com. 当然,如果我直接使用它,我是SignatureDoesNotMatch从亚马逊获得的。所以我使用下一个代码来生成预签名链接:
https://my-bucket-name.s3.amazonaws.com/folder-name/file.pdf?AWSAccessKeyId=<key>&Signature=<signature>&x-amz-security-token=<toke>&Expires=<time>
Run Code Online (Sandbox Code Playgroud)
结果它返回我下一个链接:
https://my.address.com/my-bucket-name/folder-name/file.pdf?AWSAccessKeyId=<key>&Signature=<signature>&x-amz-security-token=<toke>&Expires=<time>
Run Code Online (Sandbox Code Playgroud)
这样做有两个问题:
my-bucket-name/应该省略<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>
Run Code Online (Sandbox Code Playgroud)
这些是这些问题:
目前我对亚马逊文档有点迷失。而且我对所有这些 AWS 东西都很陌生。
无法在 Amazon S3 预签名 URL 中隐藏存储桶名称。这是因为请求是向存储桶发出的。签名只是授权请求。
一种方法是使用Amazon CloudFront,并将存储桶作为源。您可以将域名与 CloudFront 分配相关联,这与 CloudFront 获取其内容的源无关。
Amazon CloudFront 支持预签名 URL。您可以通过原始访问身份 (OAI)向 CloudFront 授予对 S3 存储桶的访问权限,然后将分配配置为私有。然后,通过 CloudFront 预签名 URL 访问内容。请注意,分发版的全部内容都是私有的,因此您需要两个 CloudFront 分发版(一个是公共的,一个是私有的),或者仅将 CloudFront 用于私有部分(并继续对公共部分使用直接到 S3) )。
如果整个网站是私有的,那么您可以在 CloudFront 中使用 cookie,而不必为每个 URL 生成预签名 URL。
| 归档时间: |
|
| 查看次数: |
6262 次 |
| 最近记录: |