jia*_*amo 3 amazon-s3 amazon-web-services amazon-cloudfront boto3
我接着是私有的cloudfront文档http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#private-content-granting-permissions-to-oai文件。
存储桶策略如下所示:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXX"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::XXXXXX/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
当我通过带有密钥对的签名网址上传文件时。文件所有者是
Owner CloudFront Origin Access Identity *********
Run Code Online (Sandbox Code Playgroud)
目前,我无法在 ec2 中使用 boto3。命令
aws s3 cp s3::/xxx/uploadfile test.txt
Run Code Online (Sandbox Code Playgroud)
给我一个错误:
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden
Run Code Online (Sandbox Code Playgroud)
我可以上传不使用签名网址的文件。这些文件可以通过 boto3 正常访问。这些文件的所有者是
****MyCountName*****
Run Code Online (Sandbox Code Playgroud)
所以我不明白为什么ec2机器无法读取origin access identity文件?
正如您所注意到的,当 CloudFront 原始访问身份 (OAI) 授权上传时,OAI 是拥有该对象的实体,而不是您的帐户。
Owner CloudFront Origin Access Identity XXXX
Run Code Online (Sandbox Code Playgroud)
OAI 代表您独家控制的实体,但它们实际上并不是您的 AWS 账户的一部分。
对象的所有权由授权上传的账户决定,而不是由拥有存储桶的账户决定。上传帐户以外的帐户必须获得拥有该对象的帐户的许可。
x-amz-acl: bucket-owner-full-control
Run Code Online (Sandbox Code Playgroud)
http://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html
您可以使用存储桶策略强制使用此标头。
如果您控制进行上传的客户端,您应该能够添加此标头。
如果您不控制客户端,您应该能够使用 Lambda@Edge 查看器请求触发器添加它。我还没有测试过这段代码,但它应该可以达到目的:
'use strict';
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
if(request.method == 'PUT')
{
request.headers['x-amz-acl'] = [
{ key: 'x-amz-acl', value: 'bucket-owner-full-control' }
];
}
return callback(null, request);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1415 次 |
| 最近记录: |