gpt4 book ai didi

amazon-web-services - 设置 S3 存储桶策略

转载 作者:行者123 更新时间:2023-12-04 08:18:01 26 4
gpt4 key购买 nike

我正在建立一个网站,用户可以在其中直接将文件上传到亚马逊 s3。我使用我的 key 临时签署一个 url,授予用户临时 PUT 访问我的站点的权限。这可以通过 CORS 配置实现。

现在,一旦文件在那里,我希望除了我之外没有人阅读它们。我当前的存储桶策略不允许每个人阅读对象,包括我,管理员。这不好。什么桶策略会在这里帮助我?

这是我的工作 CORS。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://url.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

更新 :适用于此政策:
 {
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Deny",
"NotPrincipal": {
"AWS":"arn:aws:iam::123456789012:user/Bob"
}
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<bucket>/*"
}
]
}

最佳答案

好的,我们创建了一个对 S3 具有完全权限的 IAM 用户,我们使用此用户签署临时策略以允许上传。用户的用户策略是(您可以进一步限制此用户只允许访问一个存储桶,或者甚至进一步允许用户只对存储桶进行访问):

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}

然后我们创建一个临时策略以允许上传到我们的 useruploads 存储桶
{ "expiration": "2013-11-20T12:00:00.000Z",
"conditions": [
{"bucket": "useruploadtest"},
["starts-with", "$key", "russ"],
{"acl": "public-read"},
{"success_action_redirect": "http://localhost/successful_upload.html"},
["starts-with", "$Content-Type", "image/"],
]
}

然后我们使用我们的 key 对 base64 编码策略进行签名(下面的代码是使用 cryptojs 创建签名的示例,永远不会将您的 key 放在客户端代码中)
  <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha1.js">    </script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js"></script>
<script>
var hash = CryptoJS.HmacSHA1("eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTAxVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJ1c2VydXBsb2FkdGVzdCJ9LA0KICAgIFsic3RhcnRzLXdpdGgiLCAiJGtleSIsICJydXNzIl0sIA0KICAgIHsiYWNsIjogInB1YmxpYy1yZWFkIn0sIA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL2xvY2FsaG9zdC9zdWNjZXNzZnVsX3VwbG9hZC5odG1sIn0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkQ29udGVudC1UeXBlIiwgImltYWdlLyJdLA0KICBdDQp9", "YourSecretKeyHere");
var base64 = CryptoJS.enc.Base64.stringify(hash);
console.log(base64);
</script>

然后你可以使用签名的策略来允许临时上传
<form action="http://useruploadtest.s3.amazonaws.com" method="post" enctype="multipart/form-data">
<input type="hidden" name="acl" value="public-read" />
<input type="hidden" name="success_action_redirect" value="http://localhost/successful_upload.html" />
<input type="hidden" name="AWSAccessKeyId" value="AKIAJM3U7AMGF6J6YYWQ" />
<input type="hidden" name="Policy" value="eyAiZXhwaXJhdGlvbiI6ICIyMDE1LTEyLTAxVDEyOjAwOjAwLjAwMFoiLA0KICAiY29uZGl0aW9ucyI6IFsNCiAgICB7ImJ1Y2tldCI6ICJ1c2VydXBsb2FkdGVzdCJ9LA0KICAgIFsic3RhcnRzLXdpdGgiLCAiJGtleSIsICJydXNzIl0sIA0KICAgIHsiYWNsIjogInB1YmxpYy1yZWFkIn0sIA0KICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL2xvY2FsaG9zdC9zdWNjZXNzZnVsX3VwbG9hZC5odG1sIn0sDQogICAgWyJzdGFydHMtd2l0aCIsICIkQ29udGVudC1UeXBlIiwgImltYWdlLyJdLA0KICBdDQp9" />
<input type="hidden" name="Signature" value="Db4K65tz/WJtjAUUCWRn5MXdAJ4=" />


Key to upload: <input type="input" name="key" value="test.jpg" /><br />
Content-Type: <input type="input" name="Content-Type" value="image/jpeg" /><br />
File: <input type="file" name="file" /> <br />

<input type="submit" name="submit" value="Upload to Amazon S3" />
</form>

只要我们案例中的存储桶“useruploadtest”允许来自另一个 IAM 用户的读取访问权限,我们在应用程序中使用该用户读取文件并处理它们,一切正常。

希望这可以帮助

关于amazon-web-services - 设置 S3 存储桶策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20017521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com