我正在使用PHP库将文件上传到我的存储桶.我已将ACL设置为public-read-write,它工作正常,但该文件仍然是私有的.
我发现,如果我将受赠人更改为Everyone,则会将该文件公开.我想知道的是如何将我桶中所有对象的默认Grantee设置为"Everyone".或者是否有其他解决方案默认公开文件?
我正在使用的代码如下:
public static function putObject($input, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array()) {
if ($input === false) return false;
$rest = new S3Request('PUT', $bucket, $uri);
if (is_string($input)) $input = array(
'data' => $input, 'size' => strlen($input),
'md5sum' => base64_encode(md5($input, true))
);
// Data
if (isset($input['fp']))
$rest->fp =& $input['fp'];
elseif (isset($input['file']))
$rest->fp = @fopen($input['file'], 'rb');
elseif (isset($input['data']))
$rest->data = $input['data'];
// …Run Code Online (Sandbox Code Playgroud) 我收到错误"此策略包含以下错误:策略必须包含有效的版本字符串有关IAM策略语法的更多信息",当我尝试在AWS中创建新策略时,甚至我在策略中包含了该版本.我的政策是
{
"Version": "2015-06-19",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::repo.com",
"arn:aws:s3:::repo.com/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的S3存储桶公开,但是当我添加以下策略时,我得到错误访问被拒绝:
{
"Version":"2012-10-17",
"Statement":[{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal":"*",
"Action":[
"s3:GetObject"
],
"Resource":[
"arn:aws:s3:::emergencydatascience.org/*"
]
}]
}
Run Code Online (Sandbox Code Playgroud) 我想提供对我桶中所有文件的公共访问.几个SO答案,包括这个流行的一个表示,我要创建一个策略.
所以我去复制粘贴并编辑了资源名称和版本日期,但是我收到了一个错误
Document is invalid: Invalid Version 2014-05-02 - undefined
Run Code Online (Sandbox Code Playgroud)
我去看了一下文档(注意它说的是"最新的"),给出的例子是
{
"Version":"2012-10-17",
"Statement":[{
"Sid":"PublicReadGetObject",
"Effect":"Allow",
"Principal": {
"AWS": "*"
},
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::example-bucket/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我接受了,更新了资源名称,并再次尝试.仍然无法正常工作:版本不存在.
然后,我会在对话框的角落注意到"AWS policy generator"的链接.我填写了详细信息,点击"生成",得到了类似的东西
{
"Id": "Policy1399047197120",
"Statement": [
{
"Sid": "Stmt1399047194777",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::mybucketname/*",
"Principal": {
"AWS": [
"AWS"
]
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
它奏效了!很好,所以看起来他们已经决定放弃"版本"选项,除了我在SO上看到的所有示例以及他们的示例中包含这个"版本"选项.
这个版本对我来说并不重要,但这是一个众所周知的变化吗?
当图像放入s3存储桶时,我正在使用AWS Lambda将s3存储桶中的图像调整为使用节点js的不同大小的变体.
它一直工作到昨天.今天当我使用相同的lambda函数时,我收到以下错误:
{
"errorMessage": "Command failed: identify: not authorized `//bucketname.s3.amazonaws.com/imagename.jpg' @ error/constitute.c/ReadImage/454.\n",
"errorType": "Error",
"stackTrace": [
"",
"ChildProcess.proc.on.onExit (/var/task/node_modules/gm/lib/command.js:297:17)",
"emitTwo (events.js:87:13)",
"ChildProcess.emit (events.js:172:7)",
"maybeClose (internal/child_process.js:821:16)",
"Socket.<anonymous> (internal/child_process.js:319:11)",
"emitOne (events.js:77:13)",
"Socket.emit (events.js:169:7)",
"Pipe._onclose (net.js:469:12)"
]
}
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么会出现这种现象.我下面的lambda函数的所有给定函数都在异步瀑布中,首先计算宽高比,然后将图像转换为不同的大小变体.
var request=require("request");
function getTheAspectRatio(callback) {
gm(s3Url) // I am constructing the image url in the AWS Lambda Function.
.size(function(err, size) {
if (!err) {
//Calculate the Aspect ratio
} else if (err) {
//Give Back …Run Code Online (Sandbox Code Playgroud) 我最近创建了一个新的AWS账户(我们称之为"账户A")并在该账户中创建了一个S3桶(我们称之为"桶"),上传文件foo.txt.以下建议 从 在 互联网,我成立了我认为是最宽松的政策桶可能(应该允许任何用户的任何类型的访问):
{
"Version": "2012-10-17",
"Id": "PolicyABCDEF123456",
"Statement": [
{
"Sid": "StmtABCDEF123456",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucketa/*",
"arn:aws:s3:::bucketa"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
为帐户A创建IAM用户("身份和访问管理 - >用户 - >创建新用户"并创建一个用户"为每个用户生成一个访问密钥"后)并将该用户的凭据存储在〜/ .boto中,使用boto S3界面的简单脚本可以访问上传的文件foo.txt:
import boto
conn = boto.connect_s3()
b = conn.get_bucket("bucketa", validate=False)
k = boto.s3.key.Key(b)
k.key = "foo.txt"
print len(k.get_contents_as_string())
# 9
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个新的AWS账户(让我们称之为"账户B"),并按照相同的步骤,将IAM凭证存储在.boto文件中并运行相同的python脚本.但是在这种情况下,执行该行时会出现403错误print len(k.get_contents_as_string()):
Traceback (most recent call last):
File "access.py", line 7, in <module>
print len(k.get_contents_as_string())
File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 1775, in get_contents_as_string
response_headers=response_headers) …Run Code Online (Sandbox Code Playgroud) 我已经发现一对夫妇像在计算器上类似的问题这一个,但他们都已经陈旧,它似乎从那时起事情已经与S3改变。他们添加了这四个令人困惑的设置:
如果我关闭这些,是否意味着我的存储桶可以被公开写入?
另外我还添加了这个策略:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "PublicReadForGetBucketObjects",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::REDACTED/*"
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::REDACTED:user/REDACTED"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::REDACTED",
"arn:aws:s3:::REDACTED/*"
]
}
]
Run Code Online (Sandbox Code Playgroud)
这个 CORS 配置:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>REDACTED</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
我正在尝试向我在 IAM 中创建的用户授予公共读取访问权限并限制其完全访问权限。 如果有人能确认我的设置是正确的,或者如果他们没有指出我需要正确设置的资源,我将不胜感激。
我尝试将我的项目迁移到aws-sdk 2.需要使用AWS SDK for Ruby - 版本2.我找到了所有方法,但我无法更改对文件的访问权限(公开).在以后的版本中我用这个:
bucket.objects[file_path].acl = :public_read
Run Code Online (Sandbox Code Playgroud)
但我找不到改变新api版本的方法.
这是旧api文档的链接
这是新api文档的链接
我正在阅读 s3 android 指南,并且对如何下载我的文件感到非常困惑。
他们提供以下代码:
TransferObserver observer = transferUtility.download(
MY_BUCKET, /* The bucket to download from */
OBJECT_KEY, /* The key for the object to download */
MY_FILE /* The file to download the object to */
);
Run Code Online (Sandbox Code Playgroud)
那么什么是 MY_FILE?我是否想创建一个本地空文件对象并将其提供给该 transferUtility 下载函数,并将该空文件填充到一次下载中?
而且,当我完成获取文件时,(尤其是图像)我如何使用 glide 或 Picasso 将该文件上传到 imageView 中?
我不确定如何使用 TransferObserver 对象。
希望有人可以提供一个工作示例,请!
干杯!